6 votos

Consulta fallida: ERROR: Operación en dos geometrías con diferente SRID

Tras el taller pgRouting aquí Tengo la siguiente consulta de enrutamiento:

$sql = "SELECT gid, start_id AS source, end_id AS target, the_geom, 
                  distance(the_geom, GeometryFromText(
                       'POINT(".$lonlat[0]." ".$lonlat[1].")', 4326)) AS dist 
                 FROM ".TABLE."  
                 WHERE the_geom && setsrid(
                       'BOX3D(".($lonlat[0]-0.1)." 
                              ".($lonlat[1]-0.1).", 
                              ".($lonlat[0]+0.1)." 
                              ".($lonlat[1]+0.1).")'::box3d, 4326) 
                 ORDER BY dist LIMIT 1";

Esta consulta falla con el error: Query failed: ERROR: Operation on two geometries with different SRIDs . Ahora, he estado buscando y me encontré con este . He probado las sugerencias de este post, pero el error persiste. Cualquier idea sobre cómo solucionar esto será apreciada.

ACTUALIZACIÓN: Ejecutar SELECT st_srid(the_geom) FROM table_name contra mi tabla de la base de datos devuelve -1 . En mi consulta y mapa, la proyección externa asumida es EPSG:4326 . ¿Es probable que cambiar este valor ayude? ¿Hay algún inconveniente en cambiar el valor srid directamente en la base de datos? ¿Cómo puedo cambiar el valor srid en la base de datos si no presenta ningún riesgo?

ACTUALIZACIÓN: Tuve que cambiar el srid de la columna del UNKNOWN indicador de -1 a 4326 . La respuesta en este Post de StackOverflow fue de gran ayuda en esto. Además, la pregunta en este Puesto SE GIS fue fundamental para ayudarme en la dirección correcta.

8voto

gocio Puntos 56

Tuve que cambiar el srid de la columna del UNKNOWN indicador de -1 a 4326 . La respuesta en este Post de StackOverflow fue de gran ayuda en esto. Además, la pregunta en este Puesto SE GIS fue fundamental para ayudarme en la dirección correcta.

En resumen: Ejecutar UPDATE table_name SET the_geom = ST_SetSRID(the_geom, 4326) y UPDATE table_name SET the_geom = ST_Transform(the_geom, 4326) lo hizo.

0 votos

Por alguna razón tuve que hacer un VACUUM ANALYZE table_name después de esto para deshacerse realmente del error.

0voto

Jay Stevens Puntos 2288

Hay un error en la respuesta de okello: los dos comandos deberían estar en orden invertido. Es UPDATE table_name SET the_geom = ST_Transform(the_geom, 4326) primero, para hacer la conversión, y luego UPDATE table_name SET the_geom = ST_SetSRID(the_geom, 4326) para indicar a PostGIS que los nuevos valores deben ser interpretados como WGS84.

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