Bir ağdaki hatlar nasıl bağlanır?


15

Bir şekil dosyam ve bir çokgenim var. İki veya daha fazla çizgi bir poligonla kesiştiğinde bağlanmaları (kopmaları) gerekir, ancak bazen manuel sayısallaştırma sırasında bu gerçekleşmez. Tüm bu hataları bulup düzeltmem gerekiyor. v.cleanGRASS GIS'den kullandım ve otomatik olarak birçok köşe noktası yakaladı, bu da iyi oldu, ancak bu bağlantısız hatlardan bazıları verdiğim toleranstan daha fazla ve toleransı çok fazla arttırırsam diğer hata türlerini üretmeye başlar.

resim açıklamasını buraya girin

Herhangi bir fikir?


1
Çokgenlere çoklu çizginin uç noktalarını uzamsal olarak birleştirin ve sayıları çokgen ile özetleyin. Birden fazla birleşik uç nokta içeren her çokgen için, bu uç noktaların merkez noktasından uç noktaların kendilerine (bir "yıldız") yayılan segmentlerden oluşan bir çok çizgi oluşturun. Yıldızları orijinal çoklu çizgilerle birleştirin. Ortaya çıkan tüm kavşakları gidermek için sonucu temizleyin. Bu adımların her biri tam özellikli GIS'ler tarafından desteklenir (ve otomatikleştirilebilir). QGIS veya GRASS'ın ayrıntılarına aşina olmadığım için bu çözümü yalnızca yorum olarak sunuyorum.
whuber

ama bazen tüm çizgiler çokgenin dışında
bitiyor

1
Bu çizgiler neyi temsil ediyor? Eğer bunlar nehir ise isim veya Akış Emri gibi ekstra bilgilerle kodlanmış mıdır? İki birinci dereceden akımın ikinci dereceden bir akıma akması gerektiği gibi ağ yönlendirilmiş mi (nehir ağı gibi). Sanırım arama toleransı arttıkça tehlikeli yapışma sorununun üstesinden gelmek için yapıştırma sürecinin arkasına biraz zeka koymak isteyebileceğinizi söylemeye çalışıyorum.
Hornbydd

1
Yorumunuz soruyla çelişiyor gibi görünüyor. Soru görünüyor ortak bir poligon içinde kalan köşeleri yapıştırmak istediğiniz söylemek. Bir tepe noktası bir çokgenin dışına düşerse, nasıl ele alınması gerektiğine dair herhangi bir kriter vermiyorsunuz! Peki, çokgenler ve çoklu çizgiler arasındaki ilişki tam olarak nedir?
whuber

1
Whuber'a katılıyorum; belki de soruyu açıklığa kavuşturmalısınız. Çokgen içinde 'olan' ve 'yakın' olan ama 'in' olan ama düzgün bir şekilde birleştirilen satırları hariç tutan satırlar mı istiyorsunuz?
Darren Cope

Yanıtlar:


7

Sorun hakkındaki anlayışım şöyledir:

Bir çoklu çizgi uç noktası bir poligonla kesişiyorsa, çoklu hattın aynı poligonla kesişen tüm ilave çoklu çizgi uç noktalarına bağlanması (köşe noktaları ekleyerek veya ayarlayarak) gerekir.

Bazı çok hatlı uç noktalar, bir poligonla kesişmez, alt kısımlardır, ancak bunlar yukarıdaki gibi bağlanmalıdır.

Bu cevap zaten verilen bazı sorulara dayanıyor, ancak tüm QGIS komutlarının farkında olmadığım için tam değil - belki başka biri buna ekleyebilir mi?

  1. Her çok çizgi için, uç nokta koordinatlarını çıkarın ( Vektör> Geometri Araçları> Düğümleri çıkart ve sonra topla) ve çokgen içinde olup olmadıklarını hesapla ( Vektör> Araştırma Araçları> Konuma Göre Seç ).

  2. Bir çokgenin içindeki çokgen uç noktaları için, çok çizginin bu ucunu çokgenin merkezine uzatın ( Vektör> Geometri Araçları> Çokgen sentroidini kullanarak çokgen merkezini ayıklayın , çizgi modifikasyonundan emin değilsiniz, ancak çalışabilirsiniz. çoklu çizgi köşe noktalarını nokta olarak ekleyin ve Yollara Noktalar eklentisini kullanarak değiştirilmiş çoklu çizgiyi yeniden yapılandırmadan önce uygun numaralandırmaya sahip olanları ekleyin)

    Çizgilerin bir kısmının veya tamamının doğru bağlandığı durumlar olabileceğini, bu durumlarda (çakışan çoklu çizgi uç noktalarıyla tanımlanabilir), uzatma noktası olarak çokgen sentroid yerine çakışan bitiş noktası konumunu kullanmayı tercih edebileceğinizi belirtiyorsunuz. o poligon için herhangi bir ek bağlı olmayan polietilenler.

  3. Bir poligonun dışına düşen çoklu çizgi uç noktaları için, çoklu çizginin bu ucunu en yakın poligonun merkezine kadar uzatın. Yine, en yakın çokgeni hesaplamaktan emin değilim, ancak GRASS v.distance modülü hile yapmak istiyor.


bu sorun çözümü için iyi bir gerekçe. Ayrıca alexgleith'in cevabı ile böyle bir şeye sahibim. Ama ben "çok çizginin bu ucunu en yakın çokgenin merkezine uzatmak" operasyonunda sıkışmıştım. Şimdi soru bunu nasıl yaparım? Çokgenlerin sentroidlerine v.clean.snap kullanırsam, hala uç nokta olmayan herhangi bir köşeyi hareket ettirir ...
vascobnunes

Bir yaklaşım, çoklu çizgileri tarif edildiği gibi noktalara dönüştürmek ve gerekirse belirli bir çizginin başına veya sonuna mevcut başlangıç ​​veya bitiş noktasının konumuna göre belirlendiği şekilde ek bir nokta eklemek olacaktır. Eklenen noktanın yeri poligonun sentroidi olacaktır ve nokta, çoklu çizginin başına veya sonuna yerleştirmek için -1 veya 1000000 tepe sıra numarası ile ilişkilendirilecektir. Bu daha sonra, çoklu yolların Noktalara
Giden

2

Bazı özel algoritmalarla yapabileceğimi düşünüyorum ... Nasıl uygulamak istediğinize dikkat edin, ama işe yarayacağını düşünüyorum.

Her satır için, her bir son nokta için, son noktadaki tepe noktası için çokgen içinde bir nokta yapın ve onu çokgene bağlayın.

Daha sonra, her çokgen için birden fazla satırın bitiş noktası bağlıysa, hepsini ortalama koordinatla veya çokgenin merkeziyle birleştiririm.

Bu oldukça basit. Ancak standart operatörlerde mevcut değildir. Sanırım ArcGIS'te bir gün kodlama ile yapılabilir.

Gönderdiğiniz görüntüde başka bir not, satırlardan biri çokgenin dışında ... Her son tepe noktasına en yakın tepe noktasını bularak daha basit bir şekilde ele alabilirsiniz, böylece yakınlığın karşılıklı olmasını sağlayın (bence bu gerekli, böylece yalnızca bir şekilde kenetlenen köşeleriniz var), o zaman onları köşelerin ortalama konumuna taşıyabilirsiniz.


1

İlginç bir sorun! Yapışmayı otomatik olarak gerçekleştirmenin bir yolunu düşünemiyorum, ancak en azından manuel düzeltmeyi aramak için alanları tanımlamak için bir adım:

  • Çizgi katmanınıza yeni bir sütun ekleyin ve tüm özellikler için onu '1' değerine ayarlayın.
  • Vektör> Nitelikleri Konuma Göre Katla altında Hedef katmanınızı çokgen katmanınıza ve çizgi katmanını birleştirme katmanı olarak ayarlayın. Ardından "Kesişen Özelliklerin Özetini Al" ı seçin ve "Toplam" ı tıklayın. Çıktı dosyası için bir konum belirtin ve "Tamam".
  • Ortaya çıkan çokgen dosyası, orijinal çokgen katmanınız olacaktır, ancak bazı ek alanlarla birlikte. TOPLA alanı istediğiniz şeydir; 2 olduğunda, o zaman yakınlaştırabilir ve özellikleri manuel olarak yapıştırabilirsiniz.

Duruma bağlı olarak (özellik sayısı, bu durumda olan sayı vs. olmayanlar vb.) Bu size biraz zaman kazandırabilir.

DÜZENLEME: Ayrıca, satır katmanlarınızın bir alt kümesini oluşturmak için toplamları 2 olan çokgenleri kullanmak, ardından diğer özellikleri değiştirmemek için daha büyük toleranslı olanlarda temizlemeyi çalıştırmak isteyebilirsiniz.


Zaten böyle bir şey yapmıştım. Hatta hatlar için düğümleri almak için v.net'i kullandım ve düğümlerle eşleşen çokgenlerin uzamsal bir seçimini yaptım. Bunu kullanarak düzeltmek için bir çok hata buluyorum, ama yine de 3 büyük sorun var: 1) bir düzeltme süresi manuel olarak düzeltmek için binlerce hata vardır; 2) Bazı durumlarda satırları veya düğümleri çokgenlere bile dokunmadığı için tüm hataları alamıyorum; 3) hata olmayan hatalar alıyorum, çünkü iki hat düzgün bağlandığında da seçilir.
vascobnunes

0

uç noktalara ulaştıktan sonra, çokgenler sentroidlerini tesisler olarak ve yakın hatların hedefler olarak bitiş noktalarını alan bir örümcek diyagramı yapardım. Örümcek şeması analizini gerçekleştirirsiniz ve sonuç olarak her çoklu çizgi için bir segmentiniz olur.

Bu, çokgenlerin dışında bitenler için bile işe yarar. QGIS'de bunu nasıl yapacağımı bilmiyorum, üzgünüm, ama bunu ESRI'nin iyi bildiğim ürünlerinde yapardım. Whuber, ilk cevapta bir "yıldız" inşa etmeyi önerdiğinde anladım.

QGIS'de böyle bir analizi nasıl yapacağını bilen insanlar olduğundan eminim


4
GIS Stack Exchange'e hoş geldiniz! Cevabınızın bazı downvotes ve şüpheli çektiğini fark ettim, çünkü askerin kullandığı teknolojiye bir alternatif önerdiniz (GRASS / QGIS). Benim tavsiyem cevaplardan çok yorum gibi önerileri yüzdürmek ve asker ilgileniyorsa, bilgiyi bir cevaba aktarmak.
PolyGeo
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.