Estoy tratando de almacenar en el búfer algunos resultados después de consultar un servicio de características utilizando el arcgis
API para Python:
from arcgis.gis import GIS
from arcgis.features import FeatureLayerCollection
from arcgis.geometry import Geometry, buffer
# obtain the LOMR feature
nfhl_url = "https://hazards.fema.gov/gis/nfhl/rest/services/public/NFHL/MapServer"
nfhl = FeatureLayerCollection(nfhl_url)
lomr = nfhl.layers[1]
# define the desired spatial ref for the project
sr = 2876 # NAD83(HARN) / Colorado North (ftUS)
# start an anonymous GIS session
anon_gis = GIS()
# query the service
boulder_lomrs = lomr.query(where="DFIRM_ID = '08013C'", out_sr=sr)
# create a list of geometries to buffer
lomr_geoms = [l.geometry for l in boulder_lomrs.features]
# buffer the polygons
lomr_buffer = buffer(geometries=lomr_geoms,
in_sr=sr,
distances=[1],
unit='ftUS',
out_sr=sr,
buffer_sr=sr,
union_results=True,
gis=anon_gis)
El error que recibo es:
Exception: Unable to complete operation.
The operation was attempted on an empty geometry.
(Error Code: 400)
Sin embargo, he comprobado que todas las geometrías en lomr_geoms
son válidos y no están vacíos. Esto me hace pensar que estoy haciendo algo mal con las referencias espaciales y/o las unidades.
¿Por qué recibo este error? El Documentación de ESRI sobre el método del buffer no es muy específico en cuanto a la sintaxis, y afirman erróneamente que unit
se derivará del in_sr
(he probado a ejecutar el buffer sin el parámetro unit
y falló porque es obligatorio).
EDITAR 1
He intentado redefinir cómo se construye la lista de geometrías:
# create a list of geometries to buffer
lomr_geoms = [Geometry(l.geometry) for l in boulder_lomrs.features]
# buffer the polygons
lomr_buffer = buffer(geometries=lomr_geoms,
in_sr=sr,
distances=[1],
unit='ftUS',
out_sr=sr,
buffer_sr=sr,
union_results=True,
gis=anon_gis)
Me sigue apareciendo el mismo código de error, pero por un motivo diferente:
Exception: Unable to complete operation.
(Error Code: 400)