必须有一些经过验证和测试的方法可以做到这一点,但您可以使用 Maps API 做到这一点:
- 将 lat/lng 坐标转换为像素
- 在像素平面内插值
- 转换回 lat/lng
这很简单。一个麻烦是弄清楚如何处理穿过 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 经线的线的部分,但在我尝试的几个快速测试中它工作正常。