Menyempurnakan @ Pablo jawaban yang baik, dengan definisi (di bawah) dan menambahkan daftar periksa untuk setiap metode, membatasi penggunaannya. Definisi:
Block layer adalah tabel SQL dengan poligon yang mewakili batas-batas blok kota , yang atau tanpa trotoar , tetapi melestarikan pribadi (lihat depan-1 ) atau lorong-lorong yang tidak dapat ditutup (lihat depan-2 ) ke dalam blok.
Lapisan Lot adalah tabel SQL dengan poligon yang mewakili batas tanah banyak .
Lapisan jalan adalah tabel SQL dengan garis-garis yang mewakili jalan ... Atau, di "tanah sungai" juga sungai (dan kereta api bisa menjadi "depan"?).
Front-1 : metode @ Pablo adalah tentang konsep umum front , di mana beberapa lot memiliki lebih dari "satu depan tentang satu jalan", karena berada di sudut (memiliki dua atau lebih segmen depan tentang semua jalan di sekitarnya).
Front-2 : "front" adalah tentang jalan yang ditunjukkan dalam alamat resmi (atau alamat korespondensi) dari lot. Mereka, semua lot (bahkan di sudut) hanya memiliki satu segmen jalan depan. PS: jika sistem alamat Anda dan lapisan blok menerima banyak " condominuim horisontal " dan kondominium-addressnya, "jalan pribadi" harus menunjukkan jalan biasa .
Ilustrasi pertanyaan @ ChristianAbreu menunjukkan konsep Front-2 (!) , Bukan yang umum.
Catatan teknis: Anda bisa pasang Python dengan PostGIS atau dengan alat lain yang sesuai dengan OGC (untuk spasial SQL) untuk mengekspresikan secara formal daftar periksa.
Periksa daftar untuk metode # 1 - sisi poligon yang tidak menyentuh poligon lain
Metode ini memiliki pendekatan topologi, hanya berlaku untuk blok di mana semua area lot membentuk area blok mereka. Jadi, untuk menggunakan metode ini, Anda perlu lapisan blok .
Mengekspresikan secara formal: periksa apakah blkarea~=sum_lotarea
untuk setiap blok,
SELECT ST_Area(geom) INTO blkarea FROM block WHERE gid=each1;
SELECT SUM(ST_Area(geom)) INTO sum_lotarea FROM lot WHERE gid_block=each1;
Atau, jika goemetries tidak tepat, atau jika blok menggunakan trotoar, gunakan w paling sedikit untuk ST_Buffer(block.geom,-w)
memastikan ST_Within(lot.geom lot,ST_Buffer(block.geom,-w))
semua lot.
CATATAN: periksa juga
jika semua lot berada di dalam blok, ST_Within(lot.geom,block.geom)
untuk semua lot dan blok terkait.
jika, untuk semua lot yang tidak terputus-putus, tidak ada area yang tumpang tindih. not(ST_Overlaps(a,b))
atau area persimpangan ini tidak memiliki arti (yaitu 2*ST_Area(ST_Intersection(a,b))/(ST_Area(a)+ST_Area(b))<0.01
).
Periksa daftar untuk metode # 2 - sisi poligon terdekat dengan jalan
Metode ini memiliki pendekatan geometris, berdasarkan jarak euclidean minimal .
Periksa apakah layer jalan hanya memiliki "jalan umum" , karena Anda harus memisahkan "jalan umum" (yang dapat mengungkapkan alamat resmi suatu tanah) dari "lorong" (dapat berupa bagian dalam dari tanah tersebut atau "blok kondominium") ").
Kemudian, periksa secara visual, apakah semua "blok visual" dikelilingi oleh jalan-jalan. Jika layer jalan Anda tidak lengkap, metode ini tidak valid untuk blok itu.
Kesimpulan: aturan untuk memilih metode
Untuk definisi Depan-1 :
A) Ketika Anda memiliki data jalan yang baik, gunakan metode # 2 ;
B) Ketika Anda memiliki layer blok dan layer lot konsisten, gunakan metode # 1
C) Ketika Anda tidak memiliki data yang baik, coba pisahkan data spasial Anda menjadi beberapa bagian di mana Anda dapat menggunakan satu atau beberapa metode lain. PS: bahkan tanpa lapisan blok Anda dapat membangun bergabung dengan banyak tetangga, atau dengan jawaban yang bagus dari pertanyaan ini .
Untuk definisi Front-2 : Anda memerlukan data jalan yang baik, karena definisi Front-2 memerlukan nama jalan (dari alamat lot). Gunakan metode # 2 dan lepaskan segmen depan yang tidak memiliki nama jalan yang sama dari alamat lot.