2016-03-29 38 views
0

Bazı rastgele noktaların şekil dosyasında saklanan bazı yasaklı alanlarda olmadığını kontrol etmek için bir shapely kitaplığı kullanıyoruz.shapely.geometry.shape.contains (a_point) çağrısının hızını optimize etmenin bir yolu var mı?

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) 

Ama son çağrı geom.contains(point) tamamlamak için bir saniye sürer. Python için başka herhangi bir daha hızlı kütüphane var mı, yoksa şekil dosyalarını daha iyi bir hız elde etmek için optimize edebilir miyiz?

+1

Biçim dosyanızda uzamsal bir dizin var mı? –

+0

, GEOS'u yüklediniz mi? ve Shapely'nin bulabildiğinden emin oldu mu? –

cevap

1

Uzamsal bir dizin kullanmak için @iant point için teşekkürler.

Benim şekil dosyam çok sayıda noktaya sahip tek bir MultiPoligon'du ve .contains()'u gerçekten yavaşlatıyor.

Bu sorunu daha küçük şekillere bölerek ve Rtree dizinini kullanarak çözdüm. Burada descrived olarak

  1. , ben QGIS kullanılan şekil dosyası bölmek için - https://gis.stackexchange.com/a/23694/65569

  2. Python RTree nasıl kullanılacağını çekirdek fikri burada - Toplamda https://gis.stackexchange.com/a/144764/65569

bu beni gaves .contains() aramaları için 1000x hız-up!