Shapelys多边形检查的效率如何?

时间:2018-09-03 13:35:47

标签: shapely

我只是想知道Shapelys polygon.contains(point)实现的时间复杂度和整体执行时间。

如果n是定义多边形的点数,那么时间复杂度是多少?

(旁问:过去,我已经看到特殊情况的实现可能比一般情况(example)要快得多。是否有特殊的多边形可以使检查更快,例如是否保证多边形不相交?)

基准

使用geojson.io,创建了一个示例形状,另存为data.geojson

结果:看起来非常快,但我的观点很少

20.38s for 100000 executions (0.20ms per execution)

代码:

# core modules
import json
import timeit

# 3rd party modules
from shapely.geometry.geo import shape, Point
import numpy as np

with open('data.geojson') as f:
    data = json.load(f)

polygon = shape(data['features'][0]['geometry'])
minx, miny, maxx, maxy = polygon.bounds


def does_polygon_contain_point():
    x = np.random.uniform(minx, maxx)
    y = np.random.uniform(miny, maxy)
    point = Point(x, y)
    return polygon.contains(point)

if __name__ == '__main__':
    n = 100000
    result = timeit.timeit(does_polygon_contain_point, number=n)
    print('{:.2f}s for {} executions ({:.2f}ms per execution)'
          .format(result, n, result / n * 1000))

0 个答案:

没有答案