我需要沿兩個其他經緯度點之間的直線折線段獲取X百分比位置的緯度/經度。谷歌地圖 - 沿直線折線獲得X%的座標
我已經走了這麼遠用最接近以下(對沿線40%):
google.maps.geometry.spherical.interpolate(startLatLng, endLatLng, 0.4);
這完全適用於短距離,但是對於經緯度返回長折線段之外的因爲它正在計算沿地球表面的最短距離,而不是通過平面地圖的最短距離。
對此的任何幫助將不勝感激,希望我只是失去了明顯的東西。
我需要沿兩個其他經緯度點之間的直線折線段獲取X百分比位置的緯度/經度。谷歌地圖 - 沿直線折線獲得X%的座標
我已經走了這麼遠用最接近以下(對沿線40%):
google.maps.geometry.spherical.interpolate(startLatLng, endLatLng, 0.4);
這完全適用於短距離,但是對於經緯度返回長折線段之外的因爲它正在計算沿地球表面的最短距離,而不是通過平面地圖的最短距離。
對此的任何幫助將不勝感激,希望我只是失去了明顯的東西。
必須有一些驗證和測試方法,在那裏要做到這一點,但這裏是一個辦法,你可以使用Maps API做到這一點:
這多半是非常簡單的;一個麻煩就是如何處理穿過180子午線或杆子的線。
下面是一些半測試的代碼,可能會給你一個地方開始:
function mercatorInterpolate(map, latLngFrom, latLngTo, fraction) {
// Get projected points
var projection = map.getProjection();
var pointFrom = projection.fromLatLngToPoint(latLngFrom);
var pointTo = projection.fromLatLngToPoint(latLngTo);
// Adjust for lines that cross the 180 meridian
if(Math.abs(pointTo.x - pointFrom.x) > 128) {
if(pointTo.x > pointFrom.x)
pointTo.x -= 256;
else
pointTo.x += 256;
}
// Calculate point between
var x = pointFrom.x + (pointTo.x - pointFrom.x) * fraction;
var y = pointFrom.y + (pointTo.y - pointFrom.y) * fraction;
var pointBetween = new google.maps.Point(x, y);
// Project back to lat/lng
var latLngBetween = projection.fromPointToLatLng(pointBetween);
return latLngBetween;
}
我不是100%地肯定,處理跨180經絡線的一部分,但它的工作原理確定我試過的一些快速測試。
看到這個discussion in the Google Maps API v3 group
而且this example從中
這表明代碼利用投影考慮的中點:
google.maps.event.addListener(map, 'projection_changed', function() {
var projection = map.getProjection();
if (!projection) return;
// Project
var startLatLng = startMarker.getPosition();
var endLatLng = endMarker.getPosition();
var startPoint = projection.fromLatLngToPoint(startLatLng);
var endPoint = projection.fromLatLngToPoint(endLatLng);
// Average
var midPoint = new google.maps.Point(
(startPoint.x + endPoint.x)/2,
(startPoint.y + endPoint.y)/2);
// Unproject
var midLatLng = projection.fromPointToLatLng(midPoint);
midMarker.setPosition(midLatLng);
});
+1 ..輝煌的問題.. – writeToBhuwan 2013-05-02 11:20:00