有關微信小程序調騰訊內置地圖(標記點暴露修正)

業務需要使用途經點進行導航 各大api 僅高德支持.

但是隻簡單實現了路線規劃. 這裏想到需要調起高德APP,但是不支持直接調用,需要先使用wx.openLocation()使用他自己的內置地圖.然後纔可以調用高德

使用的過程中,出現這樣一個問題,參數什麼的都輸入了,內置地圖無法顯示.後來經查找發現原因:

微信小程序wx.openLocation()方法描述
API
這裏的經緯度是數字類型的
但是,在其他的使用過程中,是以字符串爲主的,由於這裏傳遞參數的時候沒有轉型,所以錯誤!
所以,我覺得這個是不是有點反人類了~~~~~~~~
還有幾大地圖大廠的座標差異有點明顯,座標系定一樣,原點感覺不一樣,唉
另外我貼出這塊的代碼片段 有想參考的,可以參考參考.
這裏的參數考慮到有些是不能外傳的,所以僅給了一條,不是動態的

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章