在 Google Maps API v.3 中使用统一的偏移/边距在现有多边形内创建新的多边形

问题描述 投票:0回答:1

我有一个多边形,想在其中创建一个新的多边形,该多边形与周围边缘的间隔恰好为 5 米。

我的想法是计算质心,然后获取外多边形的每个点并将其向质心移动5米。

使用 google.maps.geometry.spherical 函数我应该能够computeHeading()来获取朝向质心的方向,然后使用距离和标题(方向)computeOffset()。

这会将所有顶点移动 5 米。这是否意味着我的所有线条都会自动间隔 5 米,还是取决于角度?我可以执行 JavaScript,但不确定几何形状。有更好的方法吗?

google-maps-api-3 geometry margin offset polygons
1个回答
0
投票

并不是很复杂,需要很大的库。您需要做的就是沿相邻两条边之间的中角计算新的多边形点。这是一个简单的 python 函数,可以做到这一点:

def shrinkPoly(poly, dd):
     spoly = []

     for i in range(len(poly)):

          ip1 = i+1
          if ip1 >= len(poly): ip1 = 0
          
          vm = norm(poly[i-1] - poly[i])
          vp = norm(poly[ip1] - poly[i])
          aa = acos(dot(vm, vp))
          crsmp = cross(vm,vp)[2]
          vo = poly[i] - sign(crsmp) * norm((vm+vp))*dd/sin(aa/2)
          spoly.append(vo)

     return spoly

dd 是您想要作为原始多边形和新多边形边之间的边距的距离。

这里你要注意两点:

1.) sign(crsmp) 处理给定多边形点处的边缘凹度。因此,您可以添加或减去边距量,具体取决于多边形在该特定点处是凸的还是凹的。

2.) 除以 sin(aa/2) 可计算给定边距的旧多边形点到新点的正确距离。

© www.soinside.com 2019 - 2024. All rights reserved.