Perangkat lunak gvSIG OA Digital Edition 2010 memiliki topologi alat untuk menemukan node semu dalam geometri linier. Saya menetapkan toleransi kluster 0,00002 dan jumlah kesalahan maksimum -10000 untuk 20000 penghitungan geometri linier. Tetapi hasilnya tidak berhasil.
Apakah ada solusi yang menemukan node semu di perangkat lunak GIS gratis?
Saya perlu lapisan pseudo node (satu solusi untuk masalah ini - untuk menggunakan alat topologi ArcInfo, tetapi prioritas bagi saya adalah menggunakan perangkat lunak gratis). Linear geometry membuat beberapa pengguna dalam QGIS 1.8.0 di database PostGIS (v. 2.0.1).
Tambahkan gambar baru: 12 fitur linier dengan tiga node semu di A (baris 4/5), B (baris 6/7), C (baris 9/10). Node pseudo harus berupa titik - dua fitur linier dengan persimpangan dalam satu titik (node) harus menjadi satu fitur linier (baris 4/5 - baris 4, ...).
Apakah mungkin membuat permintaan di PostGIS, yang akan menghasilkan lapisan pseudo node?
Tambahkan gambar baru dari contoh pseudo node: jika saya menerima untuk layer pseudo node lapisan linier (rect biru) saya diperbaiki kesalahan berikut dalam lapisan linier: A - menambahkan geometri yang hilang, B - memotong garis di persimpangan, C - menghapus pseudo node.
Jawaban:
Di sini soluion generik, yang dapat Anda perbaiki dengan PostGIS atau perangkat lunak lain yang sesuai dengan OGC.
Masalah Anda adalah untuk "menemukan node semu" ... Tapi saya pikir itu sedikit lebih, "menemukan node non-semu dan bergabung dengan garis-garis node semu". Solusi saya dapat digunakan untuk keduanya.
Standar OGC menawarkan:
ST_Boundary (geom) : untuk mendeteksi node dari garis
ST_Dump (geom) : untuk menempatkan setiap node dalam catatan tabel SQL.
ST_DWithin, ST_Equals, ST_SnapToGrid, ST_Snap dapat digunakan untuk mengubah toleransi. Saya menggunakan ST_DWithin.
Kami dapat menganggap bahwa masalah utama Anda dapat ditentukan dengan objek dan properti ini,
hanya ada segmen garis (dari pembagian baris tabel ), yang diwakili oleh geometri LINESTRING ... Saya tidak diuji dengan MULTILNE, jika Anda memiliki geometritip = MULTIPOINT, Anda dapat membagi dan membuat MULTILINE dengan ST_Dump dan ST_LineMerge;
setiap segmen garis memiliki (geometri ID) gid dan (ID warna) idline .
Jadi, langkah pertama adalah untuk mendapatkan node yang berasal dari bergabung dengan garis,
CATATAN: menggunakan cache karena mereka lebih cepat daripada tampilan. Gunakan "EXPLAIN SELECT ..." untuk memeriksa waktu CPU, ini bisa memakan waktu lama.
Di sini siklus dan garis kontinyu (warna yang sama) dideteksi sebagai
ncolors=1
titik, dan titik semu menurutncolors=2
titik, jadi, Anda memiliki lapisan dengan titik itu.Tabel "good node" Anda adalah dengan "poin pembatas" asli dan tanpa "pseudo node".
sumber
array_distinct
fungsi yang tidak dikutip dari perpustakaan postgres.cz . Kesalahan lainnya, tolong laporkan, saya dapat menambahkan lebih banyak penjelasan di sini.geom
menjadithe_geom
. (ST_Dump (x)) tetap sebagai geom, bukan atribut basis data.Penelitian Pembiasan telah membuat alat Pembersih Garis yang tampaknya melakukan apa yang Anda inginkan.
The kode sumber dapat ditemukan di GitHub.
sumber
Solusi Non-Gratis: Trafo FME + MRF + SmartCleaner
Solusi gratis GRASS v.clean (QGIS 1.8.0 terbaru dengan alat GRASS adalah cara termudah untuk menggunakannya) dan alat pembersih topologi lainnya
sumber
Berikut adalah langkah-langkah untuk Menemukan node semu Anda menggunakan OpenJump GIS gratis.
QGIS dan gvSIG memiliki Plugin Sextante, jadi langkah-langkah yang sama ini harus bekerja juga,
Spatial Join mungkin sedikit berbeda.
Saya menggunakan versi 1.2 untuk pengujian.
- simpan endpoint
Garis toolbox Sextante, Topologi, Ekstrak titik akhir garis -> endpt_0
- cabut garis garis Anda
Sextante toolbox, Alat untuk lapisan garis, Gabungkan garis yang berdekatan
- simpan titik akhir garis
unsplit Toolbox Sextante, Topologi, ekstrak titik akhir dari line -> endpt_1
- titik akhir yang dihapus oleh "Bergabung dengan garis yang berbatasan" adalah pseudo node
Tools, Query, Query Spatial,
Source layer "endpt_0"
Relation "Intersects"
Lapisan topeng "endpt_1"
mengaktifkan atau klik Hasil Pelengkap
sumber
DIST > 0
sebagai ekspresi. Selanjutnya, semua geoproses dapat dirantai bersama dalam model SEXTANTE untuk membuat alat baru, misalnya "Temukan pseudonode" .Solusi untuk menemukan node pseudo (dan aturan topologi lainnya) tersedia di master QGIS 1.9.0 (2.0) - plugin "Pemeriksa Topologi". Tautan: Plugin Pemeriksa Topologi di YouTube , plugin Pemeriksa Topologi di GitHub
sumber
Dengan PostGIS, Anda dapat menggunakan versi kueri yang dimodifikasi untuk menemukan dangles yang dibahas dalam topik ini , karena pseudonode adalah node yang memotong 2 linestrings dan dangles adalah node yang mencegat 1 linestring.
sumber