业务需要使用途经点进行导航 各大api 仅高德支持.
但是只简单实现了路线规划. 这里想到需要调起高德APP,但是不支持直接调用,需要先使用wx.openLocation()使用他自己的内置地图.然后才可以调用高德
使用的过程中,出现这样一个问题,参数什么的都输入了,内置地图无法显示.后来经查找发现原因:
微信小程序wx.openLocation()方法描述
这里的经纬度是数字类型的
但是,在其他的使用过程中,是以字符串为主的,由于这里传递参数的时候没有转型,所以错误!
所以,我觉得这个是不是有点反人类了~~~~~~~~
还有几大地图大厂的坐标差异有点明显,坐标系定一样,原点感觉不一样,唉
另外我贴出这块的代码片段 有想参考的,可以参考参考.
这里的参数考虑到有些是不能外传的,所以仅给了一条,不是动态的
https://developers.weixin.qq.com/s/hKAPlomM7Ue6
补充:
在这里调用时,万恶的产品经理提出一个需求,路线规划出来后,需要将整个线路暴露在视野中.
这里,我想到一个方法:
在地理坐标系中,以左下角(最小)坐标和右上角(最大)坐标可以构建一个最大的矩形,暂且将该两点连线的中点作为该矩形
的中心.当这个矩形暴露在视野时,该线路规划必然暴露在视野中.
上代码,两种
//java
//传参所有途径点字符串数组
public static String GainCentre(String[] arr){
List<Double> longitudeArr = new ArrayList<>();
List<Double> latitudeArr = new ArrayList<>();
for (String s : arr) {
Double longitude = Double.valueOf(s.split(",")[0]);
Double latitude = Double.valueOf(s.split(",")[1]);
longitudeArr.add(longitude);
latitudeArr.add(latitude);
}
Collections.sort(longitudeArr);
Collections.sort(latitudeArr);
Double maxLongitude = longitudeArr.get(longitudeArr.size()-1);
Double minLongitude = longitudeArr.get(0);
Double maxLatitude = latitudeArr.get(longitudeArr.size()-1);
Double minLatitude = latitudeArr.get(0);
Double midLongitude = (maxLongitude+minLongitude)/2;
Double midLatitude = (maxLatitude+minLatitude)/2;
return midLongitude+","+midLatitude;
}
//微信小程序js
//排序
function selectSort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
var minIndex = i;
for (var j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
var temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
function coordinate(arr) {
var longitudeArr = [];
var latitudeArr = [];
for (var s of arr) {
let longitude = s.split(",")[0];
let latitude = s.split(",")[1];
longitudeArr.push(longitude);
latitudeArr.push(latitude);
}
longitudeArr = selectSort(longitudeArr);
latitudeArr = selectSort(latitudeArr);
var maxLongitude = longitudeArr[longitudeArr.length - 1];
var minLongitude = longitudeArr[0];
var maxLatitude = latitudeArr[longitudeArr.length - 1];
var minLatitude = latitudeArr[0];
var midLongitude = (parseFloat(maxLongitude) + parseFloat(minLongitude)) / 2;
var midLatitude = (parseFloat(maxLatitude) + parseFloat(minLatitude)) / 2;
return midLongitude + "," + midLatitude;
}
觉得有用的大哥,能不能给个小赞,让我有点点动力[羞涩]
之前是自己写的简单的视野暴露,不完善,也没有计算地图级别什么的.
现在发现API提供了视野暴露的函数, 直接拿来用就行了.
includePoints函数
贴个例子:
JS:
onReady: function (e) {
// 使用 wx.createMapContext 获取 map 上下文
this.mapCtx = wx.createMapContext('navi_map')
},
//标记点全部暴露在视野中
showMarker(years) {
var points = [];
for(var year of years){
points.push({
latitude:parseFloat(year.coordinates.split(",")[1]),
longitude:parseFloat(year.coordinates.split(",")[0]),
})
}
this.mapCtx.includePoints({
"padding": [50, 50, 50, 50],
"points": points,
success: function () {
console.log("includePoints-success")
}
})
},
wxml:
<map id="navi_map" scale="{{scale}}" bindcontroltap="controltap" markers="{{markers}}" bindmarkertap="markertap" latitude="{{latitude}}" longitude="{{longitude}}" cover-view="40" show-location></map>