業務需要使用途經點進行導航 各大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>