zed*_*eso 5 javascript google-maps google-maps-api-3 google-polyline
我需要沿着其他两个纬度/经度点之间的直折线段获取 X 百分比位置的纬度/经度。
到目前为止,我最接近的是使用以下内容(占 40%):
google.maps.geometry.spherical.interpolate(startLatLng, endLatLng, 0.4);
Run Code Online (Sandbox Code Playgroud)
这对于短距离非常有效,但是对于长折线段,返回的纬度位于折线行进的位置之外,因为它计算出沿地球表面的最短距离,而不是平面地图上的最短距离。
对此的任何帮助将不胜感激,希望我只是错过了一些明显的东西。
必须有一些经过验证和测试的方法来执行此操作,但您可以使用 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;
}
Run Code Online (Sandbox Code Playgroud)
我对处理穿过 180 度子午线的线的部分不是 100% 确定,但在我尝试的几个快速测试中它工作正常。
归档时间: |
|
查看次数: |
1966 次 |
最近记录: |