Le type géographique PostGIS est-il EPSG: 4326 uniquement?

8

J'avais l'impression que le type de géographie n'utilise que les coordonnées latentes et longues EPSG:4326. Et je ne me souvenais pas d'avoir à spécifier un CRS pour une geographycolonne.

Cependant, à partir de cet exemple illimité :

SELECT * FROM geography_columns;

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

Il peut avoir d'autres SRIDs tels que 0ceux indiqués ci-dessus.

Le geographytype est-il utilisé 4326uniquement?

tinlyx
la source
1
Un SRID de 0 est également attribué lorsque vous n'en attribuez pas spécifiquement. Je me souviens d'un débat parmi les développeurs de Postgis pour savoir si un SRID manquant devait être signalé comme -1 ou 0. J'étais en faveur de -1, 0 a été choisi. Si vous regardez la définition de la vue geometry_columns, vous découvrirez une fonction, typemod_get_srid, qui semble être le coupable, voir `#define TYPMOD_SET_SRID (typmod, srid) ((typmod) = ((((typmod) & 0xE00000FF) | 0xE00000FF) | (( (srid & 0x001FFFFF) << 8))) `
John Powell

Réponses:

7

Basé sur le site Web de PostGIS , 4326était le seul CRS pris en charge pour les types géographiques, mais plus maintenant:

Avant PostGIS 2.2, le type géographique ne supportait que le WGS 84 long lat (SRID: 4326). Pour PostGIS 2.2 et supérieur, n'importe quel système de référence spatiale basé sur le long / lat défini dans la table spatial_ref_sys peut être utilisé. Vous pouvez même ajouter votre propre système de référence spatiale sphéroïdale personnalisé comme décrit dans le type de géographie n'est pas limité à la terre.

laser
la source
5

Bien que ce que le laser dit soit vrai, je pense que la raison pour laquelle le SRID apparaît comme 0 est dû à une décision prise par les développeurs de Postgis qu'un SRID non défini doit être signalé comme 0 - il y a eu un débat, dans lequel -1 a également été suggéré. (Je le sais parce que j'ai participé à ce débat sur l'IRC, et que j'ai favorisé -1, car il pense qu'il est plus évident non défini que 0).

Si vous regardez la définition de la vue 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);

vous verrez une référence à une fonction postgis_typmod_srid. Après ce trou de lapin, vous trouverez la fonction définie ici comme:

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

Il est assez facile de le confirmer en créant une colonne de géographie puis en regardant geography_columns. Étant donné que vous pouvez également créer une colonne de géométrie avec n'importe quel sphéroïde personnalisé, il semble un peu inutile d'autoriser cette fonctionnalité dans le type de géographie, compte tenu de la prévalence de WGS84.

"

John Powell
la source