Là loại địa lý PostGIS EPSG: chỉ 4326?


8

Tôi có ấn tượng rằng loại địa lý chỉ sử dụng tọa độ lat, dài EPSG:4326. Và tôi đã không nhớ phải chỉ định CRS cho một geographycột.

Tuy nhiên, từ ví dụ vô biên này :

SELECT * FROM geography_columns;

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

Nó có thể có các SRIDs khác 0như được hiển thị ở trên.

geographyloại 4326chỉ sử dụng ?


1
SRID bằng 0 cũng được chỉ định khi bạn không chỉ định cụ thể. Tôi nhớ lại một cuộc tranh luận giữa các nhà phát triển Postgis về việc liệu SRID bị thiếu nên được báo cáo là -1 hay 0. Tôi đã ủng hộ -1, 0 được chọn. Nếu bạn nhìn vào định nghĩa của khung nhìn hình học_columns, bạn sẽ phát hiện ra một hàm, typemod_get_srid, dường như là thủ phạm, xem `#define TYPMOD_SET_SRID (typmod, srid) ((typmod) = ((typmod) (srid & 0x001FFFFF) << 8))) `
John Powell

Câu trả lời:


7

Dựa trên trang web PostGIS , 4326từng là CRS được hỗ trợ duy nhất cho các loại địa lý, nhưng không còn nữa:

Trước PostGIS 2.2, loại địa lý chỉ hỗ trợ WGS 84 lat lat (SRID: 4326). Đối với PostGIS 2.2 trở lên, có thể sử dụng mọi hệ thống tham chiếu không gian dựa trên dài / lat được xác định trong bảng spatial_Vf_sys. Bạn thậm chí có thể thêm hệ thống tinh chỉnh không gian hình cầu tùy chỉnh của riêng bạn như được mô tả trong loại địa lý không giới hạn ở trái đất.


5

Mặc dù những gì laser nói là đúng, tôi tin rằng lý do SRID xuất hiện là 0 là do quyết định của các nhà phát triển Postgis đưa ra rằng SRID không xác định nên được báo cáo là 0 - có một cuộc tranh luận, trong đó -1 cũng được đề xuất. (Tôi biết điều này bởi vì tôi đã tham gia vào cuộc tranh luận đã nói về IRC và ủng hộ -1, vì nó nghĩ rằng nó rõ ràng không được xác định rõ hơn 0).

Nếu bạn nhìn vào định nghĩa của chế độ xem 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);

bạn sẽ thấy một sự giới thiệu cho một hàm postgis_typmod_srid. Theo lỗ thỏ đó, bạn sẽ tìm thấy hàm được định nghĩa ở đây là:

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

Thật dễ dàng để xác nhận điều này bằng cách tạo một cột địa lý và sau đó nhìn vào geography_columns. Cho rằng bạn cũng có thể tạo một cột hình học với bất kỳ hình cầu tùy chỉnh nào, có vẻ hơi vô nghĩa khi cho phép chức năng này trong loại địa lý, với sự phổ biến của WGS84.

`

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.