Ist der PostGIS-Geografietyp nur EPSG: 4326?

8

Ich hatte den Eindruck, dass der Geografietyp nur die lat- und long-basierten Koordinaten verwendet EPSG:4326. Und ich erinnerte mich nicht daran, ein CRS für eine geographySpalte angeben zu müssen .

Aus diesem grenzenlosen Beispiel :

SELECT * FROM geography_columns;

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

Es kann andere SRIDs haben, wie 0oben gezeigt.

Ist geographyArt Verwendung 4326nur?

Tinlyx
quelle
1
Eine SRID von 0 wird auch zugewiesen, wenn Sie keine speziell zuweisen. Ich erinnere mich an eine Debatte unter den Postgis-Entwicklern darüber, ob eine fehlende SRID als -1 oder 0 gemeldet werden sollte. Ich war für -1, 0 wurde gewählt. Wenn Sie sich die Definition der Geometriespaltenansicht ansehen, werden Sie eine Funktion, typemod_get_srid, entdecken, die der Schuldige zu sein scheint, siehe `#define TYPMOD_SET_SRID (typmod, srid) ((typmod) = (((typmod) & 0xE00000FF) | () (srid & 0x001FFFFF) << 8))) `
John Powell

Antworten:

7

Basierend auf der PostGIS-Website war dies 4326früher das einzige unterstützte CRS für geografische Typen, aber nicht mehr:

Vor PostGIS 2.2 unterstützte der Geografietyp nur WGS 84 Long Lat (SRID: 4326). Für PostGIS 2.2 und höher kann jedes in der Tabelle Spatial_Ref_Sys definierte Long / Lat-basierte Raumbezugssystem verwendet werden. Sie können sogar Ihr eigenes kugelförmiges räumliches Referenzsystem hinzufügen, wie unter Geografietyp beschrieben, das nicht auf die Erde beschränkt ist.

Laser-
quelle
5

Während das, was der Laser sagt, wahr ist, glaube ich, dass der Grund für das Erscheinen der SRID als 0 auf einer Entscheidung der Postgis-Entwickler beruht, dass eine undefinierte SRID als 0 gemeldet werden sollte - es gab eine Debatte, in der auch -1 vorgeschlagen wurde. (Ich weiß das, weil ich an dieser Debatte über das IRC teilgenommen und -1 favorisiert habe, da es meiner Meinung nach offensichtlicher undefiniert als 0 ist).

Wenn Sie sich die Definition der Ansicht geography_columns ansehen,

\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);

Sie sehen eine Referenz zu einer Funktion postgis_typmod_srid. Nach diesem Kaninchenbau finden Sie die hier definierte Funktion als:

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

Es ist einfach genug, dies zu bestätigen, indem Sie eine Geografiespalte erstellen und dann geography_columns betrachten. Da Sie auch eine Geometriespalte mit einem benutzerdefinierten Sphäroid erstellen können, erscheint es angesichts der Verbreitung von WGS84 etwas sinnlos, diese Funktionalität im Geografietyp zuzulassen.

`

John Powell
quelle