¿Es el tipo de geografía PostGIS EPSG: 4326 solamente?

8

Tenía la impresión de que el tipo de geografía solo usa las coordenadas lat y largas EPSG:4326. Y no recordaba tener que especificar un CRS para una geographycolumna.

Sin embargo, a partir de este ejemplo ilimitado :

SELECT * FROM geography_columns;

          f_table_name    | f_geography_column | srid |   type
--------------------------+--------------------+------+----------
 nyc_subway_stations_geog | geog               |    0 | Geometry
 airports                 | geog               | 4326 | Point

Puede tener otros SRIDs como los 0que se muestran arriba.

¿El geographytipo 4326solo usa ?

tinlyx
fuente
1
También se asigna un SRID de 0 cuando no se asigna específicamente uno. Recuerdo un debate entre los desarrolladores de Postgis sobre si un SRID faltante debería informarse como -1 o 0. Estaba a favor de -1, se eligió 0. Si observa la definición de la vista geometry_columns, descubrirá una función, typemod_get_srid, que parece ser la culpable, consulte `#define TYPMOD_SET_SRID (typmod, srid) ((typmod) = (((typmod) & 0xE00000FF) | ( (srid & 0x001FFFFF) << 8))) `
John Powell

Respuestas:

7

Basado en el sitio web de PostGIS , 4326solía ser el único CRS compatible para los tipos de geografía, pero ya no:

Antes de PostGIS 2.2, el tipo de geografía solo admitía WGS 84 long lat (SRID: 4326). Para PostGIS 2.2 y superior, se puede utilizar cualquier sistema de referencia espacial basado en long / lat definido en la tabla spatial_ref_sys. Incluso puede agregar su propio sistema de referencia espacial esferoidal personalizado como se describe en el tipo de geografía no se limita a la tierra.

láser
fuente
5

Si bien lo que dice el láser es cierto, creo que la razón por la que el SRID aparece como 0 se debe a la decisión tomada por los desarrolladores de Postgis de que un SRID indefinido debe informarse como 0; hubo un debate en el que -1 también se sugirió. (Lo sé porque participé en dicho debate sobre IRC y favorecí -1, ya que creo que es más obvio que 0).

Si observa la definición de la vista geography_columns,

\df+ geography_columns

SELECT current_database() AS f_table_catalog,
  n.nspname AS f_table_schema,
  c.relname AS f_table_name,
  a.attname AS f_geography_column,
  postgis_typmod_dims(a.atttypmod) AS coord_dimension,
  postgis_typmod_srid(a.atttypmod) AS srid,
  postgis_typmod_type(a.atttypmod) AS type
FROM pg_class c,
  pg_attribute a,
  pg_type t,
  pg_namespace n
WHERE t.typname = 'geography'::name AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND NOT pg_is_other_temp_schema(c.relnamespace) AND has_table_privilege(c.oid, 'SELECT'::text);

verá una referencia a una función postgis_typmod_srid. Siguiendo esa madriguera de conejo, encontrará la función definida aquí como:

#define TYPMOD_SET_SRID(typmod, srid) ((typmod) = (((typmod) & 0xE00000FF) | ((srid & 0x001FFFFF)<<8))).

Es bastante fácil confirmar esto creando una columna de geografía y luego mirando geography_columns. Dado que también podría crear una columna de geometría con cualquier esferoide personalizado, parece un poco inútil permitir esta funcionalidad en el tipo de geografía, dada la prevalencia de WGS84.

``

John Powell
fuente