Diberikan seperangkat koordinat, Bagaimana kita menemukan koordinat batas.
<== Gambar 1
Mengingat koordinat dalam set di atas, Bagaimana saya bisa mendapatkan koordinat pada batas merah. Batas adalah poligon yang dibentuk oleh koordinat input untuk simpul, sedemikian rupa sehingga memaksimalkan area.
Saya sedang mengerjakan aplikasi yang mencari properti dalam jarak 'x' dari sebuah kota . Apa yang saya miliki adalah:
- Koordinat semua properti.
- Satu set koordinat untuk setiap kota (saya punya satu koordinat untuk setiap zip. Dan karena sebagian besar kota memiliki lebih dari satu zip, Setiap kota memiliki satu set koordinat)
Alasan saya meminta area maksimum adalah agar saya tidak membuat poligon seperti di bawah ini:
<== Gambar 2
Yang saya butuhkan adalah algoritma untuk menghasilkan set koordinat untuk batas. Algoritme yang memungkinkan saya menghasilkan koordinat batas untuk Gambar 1 .
algorithm
polygon-creation
vertices
convex-hull
Khaja Minhajuddin
sumber
sumber
Jawaban:
Ada banyak algoritma untuk menyelesaikan masalah ini ( Wikipedia "Convex_hull_algorithms" ):
sumber
1) Cembung Hull dalam GRASS GIS: http://grass.fbk.eu/grass64/manuals/html64_user/v.hull.html
2) Convex Hull di Alat Vektor Qgis (sangat mudah digunakan):
sumber
Alat Hawth untuk ArcGIS memiliki fungsi ini . Ditambah skrip untuk ArcInfo 10.
Ada juga alat lambung cembung di QuantumGIS via plugin ftools .
sumber
Yang Anda inginkan adalah lambung cembung. Di PostGIS ada fungsi (sebenarnya GEOS) yang memberi Anda convex hull, ST_ConvexHull (geometri) .
Di wikipedia ada banyak info tentang lambung cekung.
sumber
Jika Anda menginginkan algoritma untuk melakukan ini (daripada paket yang dapat melakukannya) maka saya pikir Anda perlu melakukan triangulasi data; atau pada dasarnya mendefinisikan garis dari setiap titik ke setiap titik lainnya. Kemudian, mulai dari (katakanlah) titik dengan nilai Y tertinggi, lacak rute di luar mengikuti garis yang terhubung dengan sudut / bantalan eksterior terkecil.
Anda akan dapat mempercepat pelacakan dengan membuang garis berpotongan terlebih dahulu. Batas eksternal tidak akan memiliki persimpangan.
btw - FME akan melakukan ini juga dengan transformator ConvexHullAccumulator atau ConvexHullReplacer!
sumber
Jika Anda tertarik untuk melihat algoritma yang ada yang diimplementasikan dalam kode, NetTopologySuite memiliki algoritma untuk melakukan ini
Lihat ConvexHull.cs
Kebetulan NTS dan banyak perpustakaan lainnya terbungkus dalam proyek keren bernama DotSpatial, ditemukan di sini
sumber