谷歌地图 - 沿直线折线获得X%的坐标
问题描述:
我需要沿两个其他经纬度点之间的直线折线段获取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