全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
小程序已经放出一段时间了,从最初的不被看好,到现在的其他厂商的竞相模仿,小程序的确已经逐渐得到了用户及企业的认可。今天想聊聊的是小程序开发中与咱GIS有关的几个接口。
先声明2点
这里的有关是指直接相关,毕竟咱大GIS就没有什么是与咱没关系的~
本文的更新时间是2018年9月18日,小程序API的更新迭代速度相当之快,很有可能几天之后,这里所列举的接口就已经更新或者出现了新的接口。本文请谨慎参考。
位置获取
最直接相关的应该就是位置获取了,小程序三个接口来完成位置的获取,使用这三个API的时候均需要用户授权。
// 获取当前的地理位置、速度。
// 当用户离开小程序后,此接口无法调用。
wx.getLocation(Object object)
// 使用微信内置地图查看位置。
wx.openLocation(Object object)
// 打开地图选择位置。
wx.chooseLocation(Object object)
先看一个官方示例
wx.getLocation({
// 返回可以用于wx.openLocation的经纬度
type: 'gcj02',
success (res) {
const latitude = res.latitude
const longitude = res.longitude
wx.openLocation({
latitude,
longitude,
scale: 28
})
}
})
getLocation 可以获取 wgs84 和 gcj02 两种坐标系,但是 openLocation 和 chooseLocation 只能接受和返回 gcj02 坐标系。
另外一个数据获取的重要辅助接口是 罗盘,小程序也提供了3个API。
// 开始监听罗盘数据
wx.startCompass
// 停止监听罗盘数据
wx.stopCompass
// 监听罗盘数据变化事件
// 频率:5 次/秒
// 接口调用后会自动开始监听
// 可使用 wx.stopCompass 停止监听
wx.onCompassChange
数据展示
与空间相关最直接的数据展示当属小程序自带原生组件<map>,使用示例如下:
<!-- map.wxml -->
<map id="map"
longitude="113.324520"
latitude="23.099994"
scale="14"
controls="{{controls}}"
bindcontroltap="controltap"
markers="{{markers}}"
bindmarkertap="markertap"
polyline="{{polyline}}"
bindregionchange="regionchange"
show-location
style="width: 100%; height: 300px;">
</map>
目前 <map> 组件属性设置如下:
应该来说,基本的地图显示需求不成问题,如果对样式有更高要求可以申请个性化地图能力,可在小程序后台“设置-开发者工具-腾讯地图服务”申请开通。示例:
小程序同样也支持地图元素交互,并提供了相应的API,包含如下方法:
// 创建一个 MapContext 对象
wx.createMapContext
// MapContext 对象
MapContext
// 获取当前地图中心的经纬度,返回的是 gcj02 坐标系
// 可以用于 wx.openLocation()
MapContext.getCenterLocation
// 将地图中心移动到当前定位点
// 需要配合map组件的show-location使用
MapContext.moveToLocation
// 平移marker,带动画
MapContext.translateMarker
// 缩放视野展示所有经纬度
MapContext.includePoints
// 获取当前地图的视野范围
MapContext.getRegion
// 获取当前地图的缩放级别
MapContext.getScale
目前相应的方法不是很多,但相信后续也会更新,有需要的可以持续关注。
其他相关接口
除此之外,小程序也提供了许多其他可能用到的接口,这里做一个列举。
Canvas接口
小程序提供的API可能不能很好的绘制相关元素,使用Canvas吧,不过需要注意的是,小程序提供的是一个阉割版本的Canvas,与HTML5原生Canvas有区别(这是个深坑),使用的时候一定要注意。
陀螺仪、加速计
一些场景下,可能也会用到陀螺仪、加速计相关数据,小程序也提供了良好的支持。
陀螺仪:
// 开始监听陀螺仪数据
wx.startGyroscope
// 停止监听陀螺仪数据
wx.stopGyroscope
// 监听陀螺仪数据
// 频率根据 wx.startGyroscope() 的 interval 参数
// 可以使用 wx.stopGyroscope() 停止监听
wx.onGyroscopeChange
加速计
// 开始监听加速度数据
wx.startAccelerometer
// 停止监听加速度数据
wx.stopAccelerometer
// 监听加速度数据事件
// 频率根据 wx.startAccelerometer() 的 interval 参数
// 可使用 wx.stopAccelerometer() 停止监听。
wx.onAccelerometerChange
iBeacon
iBeacon是苹果公司提出的“一种可以让附近手持电子设备检测到的一种新的低功耗、低成本信号传送器”的一套可用于室内定位系统的协议。小程序对 iBeacon 也提供良好的功能支持。
// 开始搜索附近的 iBeacon 设备
wx.startBeaconDiscovery
// 停止搜索附近的 iBeacon 设备
wx.stopBeaconDiscovery
// 获取所有已搜索到的 iBeacon 设备
wx.getBeacons
// 监听iBeacon 设备更新事件
wx.onBeaconUpdate
// 监听iBeacon 服务的状态变化
wx.onBeaconServiceChange
// IBeaconInfo 对象
IBeaconInfo
string uuid
iBeacon 设备广播的 uuid
string major
iBeacon 设备的主 id
string minor
iBeacon 设备的次 id
number proximity
表示设备距离的枚举值
number accuracy
iBeacon 设备的距离
number rssi
表示设备的信号强度
另外小程序也提供了访问设备相信的诸多API,比如蓝牙、NFC、WIFI等,有相关需求可参考官方API手册:
https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html
作为一个GISer,我相信在小程序中也有无限可能。