使用GDAL OGR从存储在AWS S3上的数据源过滤几何

时间:2018-10-19 08:38:28

标签: python amazon-s3 gdal ogr

我对存储在AWS S3存储桶中的压缩shapefile进行地理处理时遇到了问题。

假设我在S3存储桶上的test.zip包含:

  • test.shp
  • test.dbf
  • test.prj
  • test.shx

在同一S3存储桶中,我有一个名为virtual.vrt的xml虚拟文件,看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<OGRVRTDataSource>
  <OGRVRTLayer name="test">
    <SrcDataSource relativeToVRT="1" shared="1">
     /vsizip/vsis3/test_bucket/test.zip
    </SrcDataSource>
    <SrcLayer>test</SrcLayer>
    <GeometryType>wkbPolygon</GeometryType> 
    <LayerSRS>PROJCS["ETRS89_TM35FIN_E_N",GEOGCS["GCS_ETRS_1989",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
    </LayerSRS>
    <Field name="id" type="Integer" src="id" width="9"/>     
  </OGRVRTLayer>
</OGRVRTDataSource>

使用这些,我想有效地在Python中执行空间分析,例如:

from osgeo import ogr

ds = ogr.Open('/vsis3/test_bucket/virtual.vrt')
layer = ds.GetLayer(0)
geom = ogr.CreateGeometryFromWkt(some_wkt_geom)
layer.SetSpatialFilter(geom)  # this line has very low performance

for feature in layer:
    do_some_stuff_on_geometry(feature.geometry())

但是此代码性能非常低,这很奇怪,因为docs说:

  

/ vsis3 /是一个文件系统处理程序,它允许即时随机读取AWS S3存储桶中可用的(主要是非公共)文件,而无需事先下载整个文件

在我的情况下,压缩的shapefile必须存储在S3中。

您对如何有效解决我的问题有任何想法吗?

0 个答案:

没有答案