Bagaimana saya bisa menggabungkan / menutup jalur jalan terdekat dan paralel (mis. Jalur ganda) menjadi satu jalur tunggal?


23

Saya memiliki shapefile dari OSM yang berisi semua jalan di dalam kota. Jalan yang lebih besar (seperti jalur ganda) tampaknya memiliki 2 jalur paralel. Saya ingin menciutkan / menggabungkannya menjadi 1 baris sehingga saya dapat mengekspor dan membuatnya dengan baik dalam aplikasi 3D eksternal (2 jalan yang tumpang tindih akan rumit dan akan terlihat aneh dalam 3D).

Bagaimana saya bisa mencapai ini dengan QGIS atau PostGIS? Saya tidak khawatir tentang sedikit kehilangan keakuratan (dalam beberapa meter) dan ingin menghasilkan, satu baris menjadi antara (idealnya pusat) garis paralel saat ini.

Terima kasih.

(berikut adalah contoh jalur jalan ganda yang ingin saya gabungkan)

masukkan deskripsi gambar di sini

Jawaban:


3

ESRI memiliki jalur ganda runtuh untuk alat garis tengah. Anda bisa mendapatkan versi murah untuk digunakan dengan OSM. Kalau tidak, Anda dapat memilih fitur dan menyimpan sebagai layer baru. Hapus yang dipilih dari lapisan yang Anda gunakan untuk ekspor. Fitur penyangga berada dalam jangkauan satu sisi dari jalur lalu lintas yang mencakup jalur kedua. Gabungkan shapefile dengan yang asli, sambungkan topologi yang rusak.

Jika Anda dapat membuat kode dan / atau skrip, Anda dapat rata-rata garis tengah antara jalur pada simpul dengan pencocokan seg per simpul dan mengeluarkan programatik garis tengah dan kemudian programatik menghapus fitur terpilih yang digunakan untuk proses produksi, memeriksa dan memperbaiki topologi yang rusak, dan Anda selesai

Saya menemukan contoh kode arcpy yang saya sertakan, cara menemukan tautan di bawah ini di komentar.

dikaitkan dengan Bantuan ESRI ARCG

# Name: CollapseDualLinesToCenterline_Example.py
# Description: Creates street centerlines from a street casing coverage.
# Requirements: ArcInfo Workstation

# Import system modules
import arcpy
from arcpy import env

# Set environment settings
env.workspace = "C:/data"

# Set local variables
inCover = "streets"
outCover = "C:/output/centerlines"
maximumWidth = 50

# Execute CollapseDualLinesToCenterline
arcpy.CollapseDualLinesToCenterline_arc(inCover, outCover, maximumWidth, "")

Bisakah Anda menautkan ke ESRI runtuh ke alat garis tengah? Saya tidak dapat menemukannya. Satu-satunya hal yang dapat saya temukan adalah bagian Editing dual carriageways dari halaman ini .
Fezter

Bantuan ArcGIS menghasilkan tautan unik yang tidak memiliki referensi sebagai tautan pated yang saya lihat, jadi ... buka resources.arcgis.com/en/help/main/10.1/index.html dan cari Perkecil Garis Ganda Ke Garis Tengah (Cakupan) tautan asli berasal dari diskusi dan mungkin salah karena Anda memerlukan ArcGIS untuk Desktop Advanced: Membutuhkan ArcInfo Workstation terinstal
lewis

1
Sebagian besar pengguna tidak boleh menggunakan alat "Cakupan" (yang membutuhkan Workstation), kecuali jika bekerja dengan data cakupan Arc7, secara eksplisit. Sebagai gantinya, gunakan Ciutkan Garis Ganda Ke Garis Tengah (Kartografi) dalam banyak kasus.
RyanDalton

2

Anda bisa mencoba menggunakan Skeletron Mike Migurski . Ini adalah alat open source yang ia gunakan untuk hal-hal seperti gaya peta Terrain-nya.


1

Mungkin ini bukan solusi yang sangat elegan dan didasarkan pada metode menjawab pertanyaan: /gis//a/295348/120129 .

Ini adalah salah satu varian dari penyelesaian pertanyaan Anda, buat geoinstrument (bagi saya ini adalah jalan dengan nama "road_border" selebar 11 m, tipe - line (MultiLineString)),

jalankan geoinstrument :-),

WITH 
      tbla AS (SELECT id, ((ST_DumpPoints(geom)).geom) geom FROM road_border),
      tblb AS (SELECT (ST_Buffer((ST_Dump(geom)).geom, 0.0001)) geom FROM tbla),
      tblc AS (SELECT ST_Centroid(ST_UnaryUnion(Unnest(ST_ClusterWithin(geom, 0.0001)))) geom FROM tblb),
      tbld AS (SELECT ((ST_Dump(ST_DelaunayTriangles(ST_Collect(geom)))).geom) geom FROM tblc),
      tble AS (SELECT (ST_Boundary(geom)) geom FROM ST_Dump((SELECT ST_Polygonize(geom) geom FROM (SELECT ST_Union(geom) geom FROM
      (SELECT ST_ExteriorRing(geom) geom FROM tbld) AS lines) AS foo))),
      tblf AS (SELECT ST_MakeLine(p1, p2) geom FROM (SELECT ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) p1,
      ST_PointN(geom, generate_series(2, ST_NPoints(geom))) p2 FROM tble) AS geom),
      tblj AS (SELECT ST_Buffer((ST_Dump(ST_Union(ST_Buffer(geom, 0.0005)))).geom, -0.0005) geom FROM road_border)
      SELECT ST_Intersection (a.geom, b.geom) geom FROM tblf a JOIN tblj b ON ST_Within (a.geom, b.geom);

dan lihat hasilnya.

Semoga sukses untuk semua orang :-),

Solusi asli ...

Script ini disebut - ST_RoadAxisFromDelaunayTriangulation ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.