Estoy intentando recuperar polígonos de una base de datos postgresql y me encuentro con varios problemas. En primer lugar, he sido capaz de obtener ST_AsText(geom)
para trabajar en conjunto con arcpy.FromWKT()
pero la precisión se pierde como se describe en el Documentos de PostGIS :
El formato WKT no mantiene la precisión, así que para evitar el truncamiento flotante, utilice el formato ST_AsBinary o ST_AsEWKB para el transporte.
Pero cuando intento utilizar ST_AsBinary
o ST_AsEWKB
con arcpy.FromWKB
Me salen estos errores:
cur.execute("SELECT ST_AsBinary(geom) FROM master.modeled_yield_hotspots WHERE model_id = 4;")
lsTemp = cur.fetchall()
lsGeom = []
for j in range(0, len(lsTemp)):
lsGeom.append(arcpy.FromWKB(lsTemp[j]))
arcpy.CopyFeatures_management(lsGeom, pathScratchGDB + "fcHotspots")
Traceback (most recent call last):
File "C:\SmartFarm_Tools\python_scripts\testing.py", line 24, in <module>
lsGeom.append(arcpy.FromWKB(lsTemp[j]))
File "C:\Program Files (x86)\ArcGIS\Desktop10.3\ArcPy\arcpy\__init__.py", line 1640, in FromWKB
return gp.createObject("geometry", byte_array, None, spatial_reference)
File "C:\Program Files (x86)\ArcGIS\Desktop10.3\ArcPy\arcpy\geoprocessing\_base.py", line 379, in createObject
self._gp.CreateObject(*gp_fixargs(args, True)))
RuntimeError: Object: CreateObject cannot create geometry from inputs
Si imprimo lsTemp[j]
Me sale lo siguiente:
(<read-only buffer for 0x0000000012808190, size 82146, offset 0 at 0x0000000003092F10>,)
¿Qué es un read-only buffer
? ¿Cómo puedo sacar el WKB de Postgis y meterlo en una clase de característica o en un shapefile?