我们在餐厅管理篇幅介绍了用腾讯地图去获取餐厅的地址信息,实测的话生成的经纬度长度过长,在我们后续计算距离的时候使用不太方便。本篇我们重新调整一下功能,使用高德地图去获取经纬度。
1 调整表结构
打开我们已经建好的数据源,增加餐厅地址、经度、纬度字段。经度、纬度类型选择数字
2 创建API
我们后端API编写的原理是,通过传入餐厅地址解析出餐厅的经纬度信息,这就需要调用高德地图的地址解析接口
打开我们的API,在餐厅管理里增加地址解析的API
URL输入如下地址:
https://restapi.amap.com/v3/geocode/geo?parameters
method选择GET
入参输入key和address
这里需要注意的是,我们的入参要先建立,之后在Query部分要将key和我们的入参对应上
建立好之后点击方法测试,输入我们的入参,执行成功后点击出参映射,完成出参的编写
3 调整后台功能
我们字段增加好之后,因为功能已经创建好了,需要重新调整一下。首先切换到列表页面,选中我们的表格组件,点击数据源的刷新按钮
将我们刚刚添加的字段添加好
切换到编辑页面,选中我们的表单容器组件,勾选新添加的字段
勾选后我们需要在餐厅地址旁边增加一个按钮调用我们的API,并且自动填充到经纬度字段里,布局结构如下
设置普通容器的布局为横向排列,垂直居中
4 创建变量
需要创建两个变量,分别用来保存经度和纬度信息,变量的类型选择数字
5 创建自定义方法
在点击按钮的时候我们要调用编制的自定义方法,执行调用我们的后端API,并且解析出经纬度,赋值给变量
export default async function ({ event, data }) {
const address = $w.input2.value
if (!address) {
$w.utils.showToast({
title: "请输入地址",
icon: "error",
duration: 2000
})
}
const result = await $w.cloud.callDataSource({
dataSourceName: 'ctgl_jb3folg',
methodName: 'getGeoByAddress',
params: {
key: "154efad00",
address: address
} // 方法入参
});
const geopoint = result.geocodes[0].location
if (!geopoint) {
$w.utils.showToast({
title: "没有获取到经纬度",
icon: "error",
duration: 2000
})
}
$w.page.dataset.state.longitude = geopoint.split(",")[0]
$w.page.dataset.state.latitude = geopoint.split(",")[1]
console.log($w.page.dataset.state.latitude, $w.page.dataset.state.longitude)
}
创建好自定义方法,给按钮绑定点击事件
最后给经度和纬度的输入框绑定输入值即可
6 获取经纬度
餐厅地址需要我们先从百度地图里获取标准地址,打开百度地图,搜索你需要的地点,贴入地图的精准地址
将地址贴入到我们的表单中,点击按钮即可自动填充我们的经纬度信息
总结
本篇我们结合高德地图的地址解析接口,实现了将文本地址信息解析出经纬度。日常开发中还有各种各样的功能需要集成,主要思路是查看第三方的接口,找到最接近需求的,然后结合微搭的API进行开发。