Çokgenlerin en yakın komşularını hesaplamak için PostGIS kullanıyorum. Hesaplamak istediğim, her çokgenden en yakın çokgene olan minimum mesafedir.
Şimdiye kadar (küçük bir değişiklikle alıntıladığım) Mike Toews'ın cevabından çok yardım aldım :
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.hgt != b.hgt AND ST_Distance(a.the_geom, b.the_geom) < 400
Sonra minimum hesapladım:
SELECT a_hgt, MIN(distance_between_a_and_b)
FROM public."lon_TestArea"
GROUP BY a_hgt
Bununla birlikte, benim meydan okumam bunu çok sayıda çokgen (1.000.000) için hesaplamaktır. Yukarıdaki hesaplama her çokgeni diğer çokgenlerle karşılaştırdığından, 10 ^ 12 hesaplamaları yapmak zorunda kalmamam için hesaplamayı nasıl geliştirebileceğimi merak ettim.
Sahip olduğum bir düşünce, her çokgeni arabelleğe almak ve daha sonra o çokgenin arabelleğindeki tüm değerlerin en yakın komşularını hesaplamak ve minimum değeri kaydetmekti. Bunun en iyi yaklaşım olup olmadığından ya da PostGIS'te kullanmam gereken bir işlev olup olmadığından emin değilim.
DÜZENLEME: Nicklas'ın önerilerinden birini kullanarak şunları deniyorum ST_Dwithin()
:
CREATE TABLE mytable_withinRange AS SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_DWithin(a.the_geom, b.the_geom, 400)
FROM
public."lon_TestArea" AS a, public."lon_TestArea" AS b
Bu, her çokgenin kimliğinin ve belirli bir mesafe içinde olup olmadığını gösteren bir tablo döndürür. IF/ELSE
SQL kullanarak bir tür ifadesi oluşturmak mümkün mü ? ( CASE
Durumu kullanma hakkında okudum ) Yoksa ürettiğim tabloyu özgün tabloya katmayı ve sonra sorguyu tekrar ST_Distance kullanarak çalıştırmayı denemeliyim?