У меня проблема с геообработкой сжатого шейп-файла, который хранится в корзине AWS S3.
Давайте предположим, что мой test.zip в корзине S3 содержит:
- test.shp
- test.dbf
- test.prj
- test.shx
В том же контейнере S3 у меня есть виртуальный файл xml, который называетсяvirtual.vrt
, это выглядит так:
<?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())
Но эта производительность кода оченьlow, что странно, потому что docs говорят:
/ vsis3 / - это обработчик файловой системы, который позволяет на лету случайное чтение (в основном, не публичное)файлы, доступные в корзинах AWS S3, без предварительной загрузки всего файла
В моем случае необходимо сохранить архивированный шейп-файл в S3.
У вас есть идеи, как решить мою проблему?проблема эффективно?