Tính toán hàng xóm gần nhất trong PostGIS?


8

Tôi đang học cách sử dụng PostGIS và cơ sở dữ liệu không gian để phân tích. Những gì tôi đang cố gắng làm là thực hiện một phép tính để có được khoảng cách cho đa giác gần nhất trong một tệp, sử dụng phép tính cạnh, thay vì các đỉnh.

Sử dụng câu trả lời này từ Paul Ramsey để Tìm cạnh tối thiểu đến khoảng cách cạnh của đa giác bằng ArcGIS Desktop? đó là một câu hỏi tương tự:

TẠO BẢNG mytable_distances NHƯ a.id, b.id, ST_Distance (a.geom :: geography, b.geom :: geography) là khoảng cách TỪ mytable a, mytable b;

Tôi đang cố gắng áp dụng nó vào cơ sở dữ liệu không gian của tôi. Tôi không hiểu cấu trúc của truy vấn này mặc dù. Tôi nghĩ CREATE TABLE mytable_distances AStạo ra một bảng để lưu trữ kết quả nhưng sau phần này tôi bị mất. Là abtên cột? Nếu vậy, tại sao tôi chỉ định hai cột để tính toán điều này?

Bảng của tôi được gọi TestAreavà tôi đã thử nghiệm với một số truy vấn cơ bản thành công:

SELECT 
  "TestArea".hgt
FROM 
  public."TestArea"
WHERE
  "TestArea".area > 100

Cấu trúc của cơ sở dữ liệu trong PGAdmin III như sau, với bảng của tôi được gọi TestArea. Tôi không chắc phép tính hàng xóm gần nhất sẽ trông như thế nào khi sử dụng các tiêu đề cột của tôi (tất cả các đối tượng này là đa giác).

nhập mô tả hình ảnh ở đây

Câu trả lời:


10

ablà tên bảng bí danh cho cùng một bảng. Đây thực sự là một T1 CROSS JOIN T2DB-speak. Điều này cho phép một người tự tham gia nói "mức độ gần một phần với phần khác" trong một bảng duy nhất.

SELECT 
  a.hgt AS a_hgt,
  b.hgt AS b_hgt,
  ST_Distance(a.the_geom, b.the_geom) AS distance_between_a_and_b
FROM 
  public."TestArea" AS a, public."TestArea" AS b
WHERE
  a.gid < b.gid AND a.area > 100 AND b.area > 100

Bạn có thể muốn thêm một WHEREmệnh đề khác để giới hạn số lượng hàng, ví dụ: thêm AND ST_Distance(a.the_geom, b.the_geom) < 1000.0để tất cả các khoảng cách nhỏ hơn một km (nếu bạn đã chiếu UTM).


Cảm ơn câu trả lời của bạn Mike. Tôi đã sử dụng nó, và bây giờ hiểu những gì đang xảy ra. Có lẽ tôi nên hỏi điều này như một câu hỏi mới, nhưng có cách nào để tối ưu hóa tính toán không? Ví dụ: nếu tôi có 100 đa giác là 10.000 phép tính. Tôi tình cờ có 1.000.000 đa giác và đang tự hỏi làm thế nào để giảm quy mô tính toán.
djq

1
đó chính xác là lý do tại sao tôi giới thiệu ST_Distancebộ lọc cuối cùng trong WHEREmệnh đề .. để nói rằng "chúng tôi không muốn tìm khoảng cách giữa bất kỳ thứ gì khác ngoài một khoảng cách nhất định". Bạn có mong muốn tìm thấy [một] khu vực gần nhất với khu vực khác không? Đây thực sự sẽ là một truy vấn hơi khác nhau.
Mike T

Tôi nghĩ rằng điều này sẽ chỉ không ghi lại các giá trị trên một mức nhất định, nhưng nó vẫn sẽ tính toán chúng. Do đó, câu hỏi tiếp theo của tôi .... gis.stackexchange.com/q/11979/804
djq
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.