用剪刀按米偏移多边形
Offsetting polygons by meters with clipper
我想创建位置(城镇、村庄等)的缓冲多边形,以便使用它们进行半径搜索。
这就是我想要达到的(插图单位):
这是我在 pyclipper 中的做法:
import pyclipper
coordinates = # Array of lat,lng tuples
clipper_offset = pyclipper.PyclipperOffset()
coordinates = pyclipper.scale_to_clipper(coordinates)
clipper_offset.AddPath(coordinates, pyclipper.JT_ROUND,
pyclipper.ET_CLOSEDPOLYGON)
scaled_coordinates = clipper_offset.Execute(1000.0)
scaled_coordinates = pyclipper.scale_from_clipper(scaled_coordinates)
数字 1000.0 是任意的,我的问题是 - 如何计算 Execute 方法的正确偏移率,以便偏移的多边形大约代表 10,20 和 50km 半径?
顺便说一句。这是解决这个问题的正确方法吗?
您还需要缩放应用的偏移量(到裁剪函数):
scaled_coordinates = clipper_offset.Execute(scale_to_clipper(1000.0))
pyclipper 将输入浮点数缩放为 64 位整数:
http://www.angusj.com/delphi/clipper/documentation/Docs/Overview/Rounding.htm
对我有用的方法:
import pyclipper
coordinates = [(198,362),(220,330),(282,372),(260,404)] # Array of lat,lng tuples
clipper_offset = pyclipper.PyclipperOffset()
coordinates_scaled = pyclipper.scale_to_clipper(coordinates)
clipper_offset.AddPath(coordinates_scaled, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)
new_coordinates = clipper_offset.Execute(pyclipper.scale_to_clipper(10))
new_coordinates_scaled = pyclipper.scale_from_clipper(new_coordinates)
我的意思是:
new_coordinates = clipper_offset.Execute(pyclipper.scale_to_clipper(10))
10 或您需要的任何其他值。
它基于对我不起作用的 baji 答案
[ scale_to_clipper(x) => pyclipper.scale_to_clipper(x) ]
我想创建位置(城镇、村庄等)的缓冲多边形,以便使用它们进行半径搜索。
这就是我想要达到的(插图单位):
这是我在 pyclipper 中的做法:
import pyclipper
coordinates = # Array of lat,lng tuples
clipper_offset = pyclipper.PyclipperOffset()
coordinates = pyclipper.scale_to_clipper(coordinates)
clipper_offset.AddPath(coordinates, pyclipper.JT_ROUND,
pyclipper.ET_CLOSEDPOLYGON)
scaled_coordinates = clipper_offset.Execute(1000.0)
scaled_coordinates = pyclipper.scale_from_clipper(scaled_coordinates)
数字 1000.0 是任意的,我的问题是 - 如何计算 Execute 方法的正确偏移率,以便偏移的多边形大约代表 10,20 和 50km 半径?
顺便说一句。这是解决这个问题的正确方法吗?
您还需要缩放应用的偏移量(到裁剪函数):
scaled_coordinates = clipper_offset.Execute(scale_to_clipper(1000.0))
pyclipper 将输入浮点数缩放为 64 位整数: http://www.angusj.com/delphi/clipper/documentation/Docs/Overview/Rounding.htm
对我有用的方法:
import pyclipper
coordinates = [(198,362),(220,330),(282,372),(260,404)] # Array of lat,lng tuples
clipper_offset = pyclipper.PyclipperOffset()
coordinates_scaled = pyclipper.scale_to_clipper(coordinates)
clipper_offset.AddPath(coordinates_scaled, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)
new_coordinates = clipper_offset.Execute(pyclipper.scale_to_clipper(10))
new_coordinates_scaled = pyclipper.scale_from_clipper(new_coordinates)
我的意思是:
new_coordinates = clipper_offset.Execute(pyclipper.scale_to_clipper(10))
10 或您需要的任何其他值。
它基于对我不起作用的 baji 答案
[ scale_to_clipper(x) => pyclipper.scale_to_clipper(x) ]