Perhitungan Tetangga Terdekat di PostGIS?

8

Saya sedang belajar bagaimana menggunakan PostGIS dan database spasial untuk analisis. Apa yang saya coba lakukan adalah melakukan perhitungan untuk mendapatkan jarak untuk poligon terdekat dalam file, menggunakan perhitungan tepi, daripada simpul.

Menggunakan jawaban ini dari Paul Ramsey untuk Menemukan jarak minimum ujung ke ujung poligon menggunakan ArcGIS Desktop? yang merupakan pertanyaan serupa:

CREATE TABLE mytable_distances SEBAGAI SELECT a.id, b.id, ST_Distance (a.geom :: geografi, b.geom :: geography) sebagai jarak DARI mytable a, mytable b;

Saya mencoba menerapkannya ke basis data spasial saya. Saya tidak mengerti struktur permintaan ini. Saya pikir CREATE TABLE mytable_distances ASmembuat tabel untuk menyimpan hasilnya tetapi setelah bagian ini saya tersesat. Apakah adan bnama kolom? Jika demikian, mengapa saya menentukan dua kolom untuk menghitung ini?

Meja saya dipanggil TestAreadan saya telah berhasil melakukan percobaan dengan beberapa pertanyaan dasar:

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

Struktur database di PGAdmin III adalah sebagai berikut, dengan tabel saya dipanggil TestArea. Saya tidak yakin seperti apa perhitungan tetangga terdekat dengan menggunakan tajuk kolom saya (semua objek ini adalah poligon).

masukkan deskripsi gambar di sini

djq
sumber

Jawaban:

10

adan bnama-nama tabel alias ke tabel yang sama. Ini secara efektif adalah T1 CROSS JOIN T2dalam bahasa DB. Ini memungkinkan self-join untuk mengatakan "seberapa dekat satu bagian dengan yang lain" dalam satu tabel.

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

Anda mungkin ingin menambahkan WHEREklausa lain untuk membatasi jumlah baris, misalnya, tambahkan AND ST_Distance(a.the_geom, b.the_geom) < 1000.0sehingga semua jarak kurang dari satu kilometer (jika Anda telah memproyeksikan UTM).

Mike T
sumber
Terima kasih atas jawaban Anda, Mike. Saya menggunakannya, dan sekarang mengerti apa yang sedang terjadi. Mungkin saya harus mengajukan ini sebagai pertanyaan baru, tetapi apakah ada cara untuk mengoptimalkan perhitungan? Sebagai contoh jika saya memiliki 100 poligon yaitu 10.000 perhitungan. Saya kebetulan memiliki 1.000.000 poligon dan bertanya-tanya bagaimana menurunkan perhitungan.
djq
1
itulah sebabnya saya memperkenalkan ST_Distancefilter terakhir dalam WHEREklausa .. untuk mengatakan bahwa "kami tidak ingin menemukan jarak antara hal lain di luar jarak tertentu". Apakah Anda berharap menemukan [satu] area terdekat dengan yang lain? Ini memang permintaan yang sedikit berbeda.
Mike T
Saya pikir ini hanya tidak akan mencatat nilai-nilai di atas level tertentu, tetapi itu masih akan menghitungnya. Oleh karena itu pertanyaan saya selanjutnya .... gis.stackexchange.com/q/11979/803
djq