7 votos

PostGIS y los SRID no válidos

Tengo dificultades con una consulta PostGIS. Estoy tratando de consultar mi base de datos ( world_countries ) utilizando un cuadro delimitador dibujado en un mapa web de Google. El objetivo de esta consulta es encontrar cualquier país que se encuentre dentro de una caja dibujada por el usuario, y devolverlo en formato GeoJSON. La consulta es la siguiente:

SELECT ST_AsGeoJSON(the_geom)
 FROM
 "world_countries"
WHERE 
((the_geom && 'POLYGON((
-1572563.9181513 7593219.6338481, 
-1709539.0728192 6507202.3361235, 
-413167.07328311 6477850.5172661, 
-271299.948805577549191.905562, 
-1572563.9181513 7593219.6338481))'));

y el mensaje de error es:

ERROR: Operation on two geometries with different SRIDs
SQL state: XX000

El SRID de estos datos es 900913 ( srid(the_geom) = 900913 ). Cuando miro estos datos en ArcGIS y los recorro, los valores del cuadro anterior coinciden con los de ArcGIS.

¿Hay alguna razón por la que una geometría poligonal requiera un SRID específico? Supuse que mis valores estaban dentro del rango.


Una nota rápida sobre mi proyección. Originalmente tenía un mapa de países del mundo en forma geométrica utilizando WGS_84. Luego usé ArcGIS para reproyectar esto en 'WGS 1984 Web Mercator.prj' basado en este hilo de rosca.

Como estoy usando la siguiente versión de PostGIS "POSTGIS="1.3.6" GEOS="3.1.1-CAPI-1.6.0" PROJ="Rel. 4.7.1, 23 September 2009" USE_STATS" He ejecutado lo siguiente SQL para incluir la información de proyección de Google:

INSERT into spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) values (900913 ,'EPSG',900913,'GEOGCS["WGS 84", DATUM["World Geodetic System 
1984", SPHEROID["WGS 84", 6378137.0, 298.257223563,AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], NIT["degree",0.017453292519943295], AXIS["Longitude", EAST], AXIS["Latitude", NORTH],AUTHORITY["EPSG","4326"]], PROJECTION["Mercator_1SP"],PARAMETER["semi_minor", 6378137.0], 
PARAMETER["latitude_of_origin",0.0], PARAMETER["central_meridian", 0.0], PARAMETER["scale_factor",1.0], PARAMETER["false_easting", 0.0], PARAMETER["false_northing", 0.0],UNIT["m", 1.0], AXIS["x", EAST], AXIS["y", NORTH],AUTHORITY["EPSG","900913"]] |','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m 
+nadgrids=@null +no_defs');

8voto

axk Puntos 2147

Pruebe a sustituir

'POLYGON((-1572563.9181513 7593219.6338481, 

con

'SRID=900913;POLYGON((-1572563.9181513 7593219.6338481...

La primera definición no incluye el SRID, por lo que no está utilizando un SRID en absoluto, de ahí la falta de coincidencia con 900913:

osm=# select srid('POLYGON((1 1,2 2,3 3,4 4,1 1))'::geometry);
 srid 
------
   -1

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