在微信小程序开发中,经常会碰到需要获取用户定位信息(经纬度、省-市-区-街道四级地址等),那么一些地理信息的转换就需要借助腾讯位置服务平台提供的微信小程序JavaScript SDK来完成。

一、JavaScript SDK 使用示例

示例场景:在微信小程序中使用定位功能,获取用户当前位置 省-市-区-街道 信息。

第一步:获取用户当前位置经纬度

通过小程序API wx.getLocation 获取经纬度信息,如下:

  1. wx.getLocation({
  2. type: 'gcj02', // wgs84-返回 gps 坐标; gcj02-返回地图中用直接用的坐标
  3. success (res) {
  4. const latitude = res.latitude
  5. const longitude = res.longitude
  6. }
  7. })

Note:需要特别注意的是,如果后续需要在小程序地图中使用该坐标或者需要借助小程序JavaScript SDK进行位置信息转换,那么这里的 type 值必须取 gcj02。因为微信小程序地图相关使用的坐标格式为 gcj02。

第二步:微信小程序JavaScript SDK 的使用准备

详细文档:https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/jsSdkOverview
腾讯位置服务的使用及坐标系说明 - 图1
Note:目前统一用的key为:RACBZ-ISCKD-5LJ4I-H5HU2-PFMTS-D7F6T,我们只需要将 sdk(建议统一使用v1.2) 下载保存到项目指定位置(一般为utils/目录下),然后在小程序管理后台配置安全域名即可。

第三步:使用 reverseGeocoder 方法逆解析得到省-市-区-街道四级地址

腾讯位置服务的使用及坐标系说明 - 图2
详细代码如下:

  1. import QQMapWX from '@/utils/qqmap-wx-jssdk.min.js'
  2. let qqmapsdk = new QQMapWX({
  3. key: 'RACBZ-ISCKD-5LJ4I-H5HU2-PFMTS-D7F6T',
  4. })
  5. qqmapsdk.reverseGeocoder({
  6. location: {
  7. longitude: longitude,
  8. latitude: latitude,
  9. },
  10. success: (res) => {
  11. let { province, city, district, street } = res.result.address_component
  12. },
  13. fail: (err) => {},
  14. })

二、主要地图坐标系的补充说明

  • WGS-84

原始坐标体系(GPS坐标系)。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。在中国,为了安全需要,任何一个商业地图产品都不允许直接使用GPS坐标。

  • GCJ02

国测局02年发布的坐标体系。又称“火星坐标”。在中国,必须至少使用GCJ-02的坐标体系。比如腾讯,高德都在用这个坐标体系。GCJ-02也是国内最广泛使用的坐标体系。GCJ02相当于是一个保密算法的偏移量,所有国内的民用地图(矢量图)都需要在WGS84的基础上加上这个偏移量。

  • 百度坐标系BD-09

百度中国地图所采用的坐标系,是对 火星坐标系GCJ-02 进行了一次加密,进一步偏移计算形成了百度坐标系。
不同坐标系的分类,详见下图:
腾讯位置服务的使用及坐标系说明 - 图3
Note:关于 WGS84 和 CGCS2000。这两者的差别很小,如果无特殊需求,基本可以认为这两者等同于一个坐标系(已得到模型组同学的确认),所以我们统一为 WGS84 坐标系。

三、领见数农不同应用中使用的坐标系

领见产品中使用到地图及相关应用的地方如下:

  • 天地图

PC端中采用 mapbox 展示模型图斑的地方会用到

  • 高德地图
    • H5中使用高德地图的地方
    • PC端中用到高德地图 JS SDK 的地方
    • 支付宝小程序(地图组件基于高德地图)
  • 腾讯地图

    微信小程序(地图组件基于腾讯地图)
    归纳起来,目前领见业务中使用两类坐标系:

  • WGS84 坐标系

所有基于 mapbox 呈现的地图应用

  • GCJ-02 坐标系

除了 mapbox 以外其它使用到地图的地方。包括高德地图(包括相应的 JS SDK)、腾讯地图(包括相应的 JS SDK)。
据了解,模型组提供的gis数据主要使用 WGS84 和 CGCS2000 坐标系,因此在 mapbox 应用中可以直接使用。如果模型中附带的坐标点需要在H5或小程序中使用,则需要进行WGS84 与 GCJ-02 坐标系之间的转换(目前后端保存两份不同坐标体系的坐标数据,根据前端不同应用场景进行区分返回)。

参考文档