擅长:python、mysql、java
<P>另一个选择是使用Shaviy(基于GeOS的Python库,PASGIS的引擎)和菲奥娜(基本上用于读/写文件):</P>
<pre><code>import fiona
import shapely
with fiona.open("path/to/shapefile.shp") as fiona_collection:
# In this case, we'll assume the shapefile only has one record/layer (e.g., the shapefile
# is just for the borders of a single country, etc.).
shapefile_record = fiona_collection.next()
# Use Shapely to create the polygon
shape = shapely.geometry.asShape( shapefile_record['geometry'] )
point = shapely.geometry.Point(32.398516, -39.754028) # longitude, latitude
# Alternative: if point.within(shape)
if shape.contains(point):
print "Found shape for point."
</code></pre>
<p>请注意,如果多边形很大/很复杂(例如,一些海岸线极不规则的国家的形状文件),则进行点对多边形测试可能会很昂贵。在某些情况下,在进行更深入的测试之前,可以使用边界框快速排除问题:</p>
^{pr2}$
<p>最后,请记住,加载和解析大的/不规则的shapefile需要一些时间(不幸的是,这些类型的多边形在内存中的保存通常也很昂贵)。在</p>