1 votos

Cómo guardar los resultados de OGRSpatialReference::AutoIdentifyEPSG()

No es que vea la necesidad de convertir masivamente los shapefiles mediante programación, pero hay debe ser una forma de almacenar la autoridad EPSG en un shapefile convertido y autoidentificado.

Mi pequeño programa en C++ puede utilizar la API GDAL para ...

  • leer un conjunto de datos shapefile ETRS89_UTM32 mediante GDALOpenEx() ,
  • comprobar que no es EPSG:32632 llamando a GetLayer(0)->GetSpatialRef()->GetAuthorityName() y GetAuthorityCode() ,
  • convertir el archivo a EPSG:32632 llamando a GDALVectorTranslate() ,
  • GDALOpenEx() el shapefile resultante,
  • se da cuenta de que su SRS todavía no contiene una entrada de autoridad EPSG (¿por qué no?),
  • AutoIdentifyEPSG() el SRS, y
  • comprobar que el código EPSG ahora es efectivamente 32632

-- ¿y luego qué? Si llamo a GDALClose() en mi conjunto de datos shapefile recién convertido y lo vuelvo a abrir, su SRS sigue apareciendo como WGS_1984_UTM_Zone_32N, sin ninguna entrada de AUTORIDAD.

Esto podría tener algo que ver con este comentario en OGRLayer::GetSpatialRef() :

El objeto devuelto es propiedad de OGRLayer y no debe ser modificado o liberado por la aplicación.

Así pues, basta con convertir un shapefile a EPSG:32632 (ya sea en la consola mediante ogr2ogr o de forma programada a través de GDALVectorTranslate() ) no establece ninguna entrada EPSG en el SRS. Realizando AutoIdentifyEPSG() en el SRS hace establecer la autoridad correcta, pero no puedo guardarla para que se mantenga.

¿Qué estoy haciendo mal?

1voto

braeden Puntos 1

Este es el truco que acabé utilizando:

si el archivo .prj convertido no contiene un nodo con el código EPSG de destino, simplemente lo sobrescribo con la definición WKT devuelta al llamar a OGRSpatialReference::exportToPrettyWkt() en un SRS inicializado por OGRSpatialReference::importFromEPSG(<target EPSG code>) .

HTH.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X