2009-07-09 7 views
7

Tôi có 8 giá trị thực trong bảng mà tôi muốn kết hợp thành đa giác. Tôi đã không thể tìm ra cách để tạo ra một đa giác bằng cách sử dụng các giá trị này mặc dù. Tôi tiếp tục thử các biến thể củaLàm cách nào để tạo đa giác bằng các trường trong PostgreSQL?

SELECT polygon(lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4) FROM table; 

nhưng vẫn gặp lỗi về hàm đa giác không tồn tại hoặc cú pháp nhập không hợp lệ cho đa giác loại. Có ai làm điều này trước khi?

Trả lời

12

Cú pháp cho một postgres đa giác đều giống như hơn:

insert into geo_table values (1, '((2,2),(3,4),(3,6),(1,1))');

đâu 1 là số id và mục trích dẫn là đa giác. Tôi hy vọng truy vấn sẽ giống nhau, bạn có thể cần dấu ngoặc đơn, vv cho các tọa độ. Thông thường cho dữ liệu không gian địa lý bạn muốn (Lon Lat) tọa độ. PostGIS cũng mất WKT những câu như:

GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))')

+0

Tuyên bố WKT đó giống như những gì tôi muốn, nhưng cơ sở dữ liệu được tạo bởi Drupal (CMS) để mẫu PostGIS không được sử dụng khi tạo nó. Tôi có thể chuyển văn bản thành đa giác theo cách khác không? –

+0

Tôi đã tìm thấy hướng dẫn về cách thêm PostGIS vào cơ sở dữ liệu và làm việc này. –

1

Như đã đề cập bởi bvmou - GeomFromText sẽ hoạt động tốt. tôi sẽ chỉ cần thêm một bản cập nhật cú pháp nhỏ:

GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))') 
+0

+1 Luôn luôn vặn vẹo các ngăn xếp! – unmounted

0

dụ này có kinh độ và vĩ độ phối từ một bảng và chuyển đổi chúng thành một hình học. Kích thước của mỗi hộp được đưa ra như long_high, long_low, lat_high và lat_low. Ở đây, một hộp khoảng 500m x 500m.

  1. Thêm một cột hình học mới 'chiếc hộp' để bàn

    SELECT AddGeometryColumn('public', 'predpol_raw', 'box', 2240, 'POLYGON', 2);
  2. Cập nhật các lĩnh vực mới với những giá trị đó.

     
    UPDATE predpol_raw 
    SET box = 
         ST_Transform(
          ST_GeomFromText(
           format('POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))', 
            long_high,lat_high, long_low,lat_high, 
            long_low,lat_low, long_high,lat_low, 
            long_high,lat_high 
           ), 
           4326 
          ), 
          2240 
         ); 
    

Lưu ý việc chuyển đổi sang một tham chiếu không gian khác nhau. Từ khóa POLYGON yêu cầu dấu ngoặc kép '(())'.