Yakındaki ve paralel yol hatlarını (örn. Çift anayol) tek bir hatta nasıl birleştirebilir / daraltabilirim?


23

OSM'den bir şehirdeki tüm yolları içeren bir form dosyam var. Büyük yollarda (çift anayollar gibi) 2 paralel çizgiye sahip gibi görünüyor. Bunları 1 çizgide daraltmak / birleştirmek istiyorum, böylece harici bir 3B uygulamasında onları güzelce dışa aktarabilir ve oluşturabilirim (2 çakışan yol karmaşık olacak ve 3B'de tuhaf görünecektir).

Bunu QGIS veya PostGIS ile nasıl başarabilirim? Hafif bir doğruluk kaybı hakkında endişelenmiyorum (birkaç metre içinde) ve sonuçta ortaya çıkan tek çizginin mevcut paralel çizgilerin (idealin merkezi) arasında olmasını istiyorum.

Teşekkür ederim.

(burada birleştirmek istediğim çift yol çizgileri örneği)

görüntü tanımını buraya girin

Yanıtlar:


3

ESRI, merkez hattı aracına giden bir çöküş çift taşıt yoluna sahiptir. OSM ile kullanım için ucuz bir versiyonunu alabilirsiniz. Aksi takdirde özellikleri seçebilir ve yeni bir katman olarak kaydedebilirsiniz. Dışa aktarma için kullandığınız katmandan seçilenleri silin. Tampon özelliği, ikinci şeridi içeren anayolun bir yanı arasındadır. Shapefile ile orjinalini birleştir, bozuk topolojiyi birleştir.

Kod yazabilir ve / veya komut dosyası yazabiliyorsanız, bir düğümdeki şeritlerin arasındaki bir merkez çizgisini, düğüm tarafından eşleştirerek ve böylelikle bir merkez çizgisi programlaması ve ardından üretim süreci için kullanılan seçili özellikleri silerek, programlanmış olarak silebilir, bozuk topolojiyi kontrol edip düzeltebilirsiniz. yapılır.

Ben dahil ediyorum bir arcy kod örneği buldum, nasıl yorumların altında link bulmak nasıl.

ESRI ARCGis Yardım'a atfedilen

# 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, "")

ESRI çöküşünü merkez hattı aracına bağlar mısınız? Bulamadım. Bulabildiğim tek şey, bu sayfanın İkili arabaları düzenleme bölümü idi .
Fezter

ArcGIS yardım Öyle ... gidin bakın bir kafalı bağlantı olarak hiçbir başvuru yapmak benzersizlere bağlantılar oluşturur resources.arcgis.com/en/help/main/10.1/index.html Çift Hatları için Orta Hattı (Kapsamı) kapa ve arama orjinal link bir tartışmadan geldi ve Desktop Advanced için ArcGIS'e ihtiyaç duyduğunuzda yanlış olabilir: ArcInfo Workstation kurulumu gerekiyor
lewis 13:13

1
Arc7 kapsama verileriyle çalışmadıkça, çoğu kullanıcı "İş Kapsamı gerektiren" "Kapsam" aracını kullanmamalıdır. Bunun yerine, çoğu durumda Çift Satırları Daralt Merkez Merkezine (Kartografya) kullanın .
RyanDalton,

2

Mike Migurski's Skeletron'u kullanmayı deneyebilirsiniz . Arazi haritası stili gibi şeyler için kullandığı açık kaynaklı bir araçtır.


1

Belki de çok şık bir çözüm değildir ve soruyu cevaplama yöntemine dayanır: /gis//a/295348/120129 .

Bu, sorunuzu çözmenin bir türevi, bir geoinstrument kurdu (benim için "road_border" 11 m genişliğinde, type - line (MultiLineString) adında bir yol),

bir geoinstrument işletmek :-),

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);

ve sonucu görün.

Herkese iyi şanslar :-),

Orijinal çözümler ...

Bu betiğin adı - ST_RoadAxisFromDelaunayTriangulation ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.