Tạo các bảng không gian với PostGIS


20

Trong tài liệu PostGIS có nói rằng có hai bước để tạo bảng không gian với SQL:

  1. Tạo một bảng không gian bình thường.
  2. Thêm một cột không gian vào bảng bằng chức năng "AddGeometryColumn" của OpenGIS.

Nếu tôi làm theo các ví dụ, tôi sẽ tạo một bảng có tên terrain_pointsnhư sau:

CREATE TABLE terrain_points ( 
  ogc_fid serial NOT NULL, 
  elevation double precision,
);

SELECT AddGeometryColumn('terrain_points', 'wkb_geometry', 3725, 'POINT', 3 );

Ngoài ra, nếu tôi xem các bảng hiện có trong pgAdmin III , có vẻ như tôi có thể tạo cùng một bảng như thế này:

CREATE TABLE terrain_points
(
  ogc_fid serial NOT NULL,
  wkb_geometry geometry,
  elevation double precision,
  CONSTRAINT terrain_points_pk PRIMARY KEY (ogc_fid),
  CONSTRAINT enforce_dims_wkb_geometry CHECK (st_ndims(wkb_geometry) = 3),
  CONSTRAINT enforce_geotype_wkb_geometry CHECK (geometrytype(wkb_geometry) = 'POINT'::text OR wkb_geometry IS NULL),
  CONSTRAINT enforce_srid_wkb_geometry CHECK (st_srid(wkb_geometry) = 3725)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE terrain_points OWNER TO postgres;

-- Index: terrain_points_geom_idx

-- DROP INDEX terrain_points_geom_idx;

CREATE INDEX terrain_points_geom_idx
  ON terrain_points
  USING gist
  (wkb_geometry);

Liệu hai phương pháp này tạo ra cùng một kết quả? Có phải phiên bản dựa trên pgAdmin III đơn giản dài dòng hơn và làm những việc AddGeometryColumnsẽ làm theo mặc định?


Tôi hy vọng bạn không lấy từng pixel của raster và lưu trữ nó như một điểm :)
Ragi Yaser Burhum

không hoàn toàn không. :) Nhưng tôi sẽ sử dụng ST_DumpPoints trên một số dòng dõi đường viền để điền vào bảng này.
BenjaminGolder

Câu trả lời:


9

Không, họ không tạo ra kết quả tương tự.

Với phương thức thứ hai, bạn vẫn sẽ cần thêm một bản ghi trong bảng GEOMETRY_COLUMNS và bạn sẽ cần thực hiện nó với một câu lệnh INSERT hoặc sử dụng hàm Population_Geometry_Columns như được đề xuất trong câu trả lời khác.

AddGeometryColumn sẽ đảm nhiệm việc này cho bạn (cùng với việc tạo chỉ mục và các ràng buộc).


2
Để tham khảo trong tương lai, điều này không còn đúng nữa: postgis.net/docs/AddGeometryColumn.html
Janosimas

7

Hai phương pháp sẽ tạo ra kết quả như nhau. AddGeometryColumnsẽ không chỉ tạo trường hình học, nó sẽ xác nhận và tạo các chỉ mục cần thiết. Miễn là bạn làm tất cả những điều này bằng tay, kết quả sẽ giống nhau. Nếu bạn có một cột hình học hiện có, bạn có thể sử dụng Populate_Geometry_Columnshàm để xác thực nó và tạo các chỉ mục cần thiết.


Điều này có nghĩa là hai phương pháp sẽ tạo ra kết quả giống nhau?
BenjaminGolder

Nó cũng sẽ làm như vậy, nếu bạn đã sử dụng các hình học_column hiện có, xác thực và tạo các chỉ mục đúng cách. Bạn có thể kiểm tra elsasoft.org/samples/postgre_postgis/ Kẻ
Senthil

xin lỗi @Senthil, tôi không hiểu câu của bạn. Ý bạn là gì khi bạn nói: "nếu bạn đã sử dụng các hình học_column hiện có, xác thực và tạo các chỉ mục đúng cách"? Đó có phải là một lệnh bị thiếu trong các ví dụ?
BenjaminGolder

@BenjaminGolder Có nhìn những gì AddGeometryColumn làm với liên kết này: elsasoft.org/samples/postgre_postgis/... Trong trường hợp của bạn, miễn là wkb_geometry đã có trong bảng geometry_columns và bạn tạo chỉ số bằng tay. Vì vậy, có vẻ tốt. nhưng, tùy chọn dễ nhất là đi với AddGeometryColumn cho các trường mới.
Senthil

Tôi chỉnh sửa câu trả lời của bạn để làm cho nó rõ ràng hơn. Cảm ơn bạn.
BenjaminGolder

5

Trong PostGIS 2.0+, bạn có thể tạo cột hình học trực tiếp bằng ngôn ngữ định nghĩa dữ liệu phổ biến.

Ví dụ:

-- points in geographic wgs84 coordinates (epsg:4326)
create table mypoints (id serial, name varchar, geom geometry(Point, 4326));

-- lines in spherical mercator (epsg:3857)
create table mylines (id serial, name varchar, geom geometry(LineString, 3857));

-- polygons in Dutch national coordinate system (epsg:28992)
create table mypolygons (id serial, name varchar, geom geometry(Polygon, 28992));

-- multipolygons in British National Grid (epsg:27700)
create table 
  mymultipolygons(id serial, name varchar, geom geometry(Multipolygon, 27700));

-- generic geometry (no data type constraints)
create table mygeometries(id serial, name varchar, geom geometry);
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.