当前位置: 首页 > 知识库问答 >
问题:

谷歌地图-点到折线的距离

邓子濯
2023-03-14

我有一些谷歌地图折线。我试图在它们周围画两条折线,这样它们就形成了某种边界:

所以对于原始折线的每一个点,我计算边界线点,从原点算起25米:

function getOffsetPoints($p1, $p2, $p3, $distance = 25) {
    $gap = (180 / M_PI)  * ($distance / 6378137);
    $sx = $p3['lat'] - $p1['lat'];
    $sy = $p3['lng'] - $p1['lng'];
    $cx = $p2['lat']; $cy = $p2['lng'];

    $normx = $sy; $normy = -$sx;
    $length = sqrt($normx * $normx + $normy * $normy);
    $normx = $normx / $length; $normy = $normy / $length;
    
    $newx1 = $cx - $normx * $gap;
    $newy1 = $cy - $normy * $gap;
    $newx2 = $cx + $normx * $gap;
    $newy2 = $cy + $normy * $gap;

    return [
        ['lat'=>$newx1, 'lng'=>$newy1], 
        ['lat'=>$newx2, 'lng'=>$newy2]
    ];
}

在这个例子中,让我们省略折线的第一个和最后一个点。所以我总是看上一个点和下一个点,计算中心点的偏移量。

for (var i=0; i<offset_polylines.length; i++) {
    var oPath = offset_polylines[i];
    var polyline = new google.maps.Polyline({
        path: offset_polylines,
        strokeColor: "#ffffff",
        strokeOpacity: 1,
        strokeWeight: 1,
        map: map,
    });
}

共有1个答案

戈曾琪
2023-03-14

请注意,米/度的比值对于纬度(N/S方向,沿子午线)是不变的,但对于经度方向,取决于系数abs(Cos(latitude)),所以赤道平行1度包含111公里,但对于北纬45度--只有78公里。

您的计算是粗略的近似值,因此您可能只需将经度差($sx)乘以系数1/abs(Cos($lat))来减少不等参数。

更精确的方法可能包括按距离和方位角计算坐标,如这里所述。不要忘记度数和弧度。

dlng = lng3 - lng1

bearing = atan2( sin(dlng)⋅cos(lat3), cos(lat1)⋅sin(lat3) − sin(lat1)⋅cos(lat3)⋅cos(dlng))

perpbearing1 =  bearing + Pi/2
perpbearing2 =  bearing - Pi/2

latperp = asin(sin(lat2)⋅cos(d/R) + cos(lat2)⋅sin(d/R)⋅ cos(perbearingX))
lonperp = lon2+atan2(sin(perpbearingX)⋅sin(d/R)⋅cos(lat2),cos(d/R)−sin(lat2)⋅sin(latperp))
 类似资料:
  • 我试图找到android maps api v2的方法,它将决定我在移动时创建的折线的长度。我会把它放在onLocationChanged()中,以便不断更新。有人知道方法是什么吗?maps api将显示哪些单元的长度吗?

  • 我正在从导入geoJSON数据。jsons文件。它在某些文件上工作得很好,但在其他文件上就不行了。我认为我的文件有问题,但我在geojson lint和geojson.io上测试了它们,没有问题。 这是堆栈: 这是我非常简单的代码 这是我的一个JSON导致了这个错误 build.gradle(项目)和build.gradle(应用程序) 欢迎任何想法

  • 问题内容: 您如何计算Google Maps V3中两个标记之间的距离?(类似于inV2中的功能。) 谢谢.. 问题答案: 如果要自己计算,可以使用Haversine公式:

  • 在我的应用程序中,当我徒步旅行时,我会为每个位置的变化画一条折线。这可能是一个8小时的背包徒步旅行,所以我可能有数万个点的计划。 在我的测试中,我注意到当我放大到相当近的地方(比如17或18)时,即使在绘制了数千条线后,它也工作得很好,但当我缩小时,地图必须渲染所有这些线,它变得缓慢,因为我的手机试图处理所有事情。 我所知道的绘制折线的另一个选项是创建一个包含所有点(LatLng)的集合(Arra

  • 问题内容: 我的程序使用Google Maps的网络服务路线来查找两点之间的路线。结果被解析并存储在变量中。 然后,此变量用于组成google静态地图URL。 解析和URL正常工作。问题是绘制的“路线”穿过湖泊和山脉。 解析功能: 杰森回应: https://maps.googleapis.com/maps/api/directions/json?origin=-22.978823,-43.233