2016-03-29 3 views
0

shapelyライブラリを使用して、いくつかのランダムな点がシェイプファイルに保存されている禁止領域にないことを確認しています。shapely.geometry.shape.contains(a_point)呼び出しの速度を最適化する方法はありますか?

with fiona.open(path) as source: 
    geometry = get_exclusive_item(source[0]) 
geom = shapely.geometry.shape(geometry['geometry']) 

def check(lat, lng): 
    point = shapely.geometry.Point(lng, lat) 
    return not geom.contains(point) 

最新の電話geom.contains(point)は完了するまでに約1秒かかります。 Python用の他のより高速なライブラリがありますか、またはより良い速度を得るために何とかシェイプファイルを最適化できますか?

+1

シェイプファイルに空間インデックスがありますか? –

+0

GEOSをインストールしましたか?マジックがそれを見つけることができるようにしましたか? –

答えて

1

空間インデックスを使用するための@iantポイントをありがとうございます。

私のshapefileは、多くのポイントを持つ単一のMultiPoligonでした。.contains()は本当に遅くなります。

私は小さな形に分割してRtreeインデックスを使用して問題を解決しました。それがここにdescrivedとして

  1. は、私はQGISを使用シェープファイルを分割するには - https://gis.stackexchange.com/a/23694/65569

  2. pythonでRTREEを使用するには、どのように核となるアイデアがここにある - 合計でhttps://gis.stackexchange.com/a/144764/65569

が、これは私をgaves .contains()ルックアップのための1000倍のスピードアップ!

関連する問題