Örtüşen çizgileri oluşturma


24

Toplu taşıma hakkında bilgi içeren bir harita hazırlıyorum: otobüsler, tramvaylar, vb. Harita, örneğin tramvay hatları içeren bir katmana sahip olacaktır. Her çizginin kendi rengi vardır ve bir çizgi dizgisi geometrisi ile temsil edilir.

Sorun, çizgilerin çoğunun üst üste binen parçalara sahip olması, birden fazla tramvay hattının aynı bölümü kaplaması. Bunu kullanıcıya göstermek için, çizgilerin üst üste çizilmek yerine birbirlerine paralel çalışmasını istiyorum. Örneğin, Google Haritalar’ın New York metro hatlarını nasıl gösterdiğini görün.

Bunun haritacılıkta oldukça yaygın bir sorun olduğunu düşünüyorum, ancak hangi terminolojiyi aramam gerektiğini bilmiyorum.

Yığın olarak PostGIS / GeoServer / OpenLayers kullanıyorum, ancak açık kaynaklı herhangi bir çözüm kabul edilebilir.


Metro hatları ile aynı sorunu yaşıyor. Kabul edilebilir bir çözüm buldunuz / uyguladınız mı?
Geert-Jan

Ne yazık ki hayır. Müşteri bunu önceliklendirmedi ve üst üste binmeyi önlemek için oldukça kötü bir saldırı gerçekleştirdik.
Liedman

Yanıtlar:


7

Bu alan hakkında daha fazla bilgi edinmek istiyorsanız, sorun kartografik yer değiştirme ve kartografik genellemenin bir yönü olarak adlandırılır .

Yerinden edilmeyi ve sorunu ele almak için yaklaşımları tartışan birkaç makale:


"Yer değiştirme"! Hatırlamaya çalıştığım diğer terimdi. FME’de (üzgünüm - açık kaynak değil) “Nickerson yer değiştirme algoritmasının bir türevi kullanarak özellikler arasındaki yakınlık çatışmalarını çözen” bir aracımız var - belki de ne olacağını görmek için bir Google Nickerson olabilir mi?
Mark Ireland

scholar.google.com/… orijinal makaleye (maalesef maaşlı duvarlı) ve atıfta bulunan pek çok kişiye bağlantı oluşturur. İlgili makalelerden bazıları ücretsiz ve ilginç görünüyor.
Ian Turton

4

Bu problem kartografik genellemede çok tipik bir problemdir. Bunun için otomatik yöntemler var, ancak henüz bir uygulama mevcut değil.

" Kirişler " ve " Yılanlar " a dayanan yöntemler , ağ verilerinin bu kartografik çatışmalarını çözmek için etkili sonuçlar verir (ayrıca bkz . Scw tarafından verilen referanslar ). Yol verilerinde kullanılan ışın algoritmalarının bazı sonuçları:

Önce:

alt metin

Sonra:

alt metin

Bu dönüşüme nasıl yapılacağını açıklayan bu makaleye ve bu sunuma bakın .

EDIT: Daha önce hiç test etmedim, fakat GRASS'da yılanlarla ilgili bir şey var gibi görünüyor. Buraya bakınız .


1
İki çizgi parçası (veri yolu) tam olarak aynı geometriye sahipse bu işe yarar mı?
underdark

1
Çok kapalı hatlar için geçerlidir ve tam olarak çakışan hatlar için bu kadar iyi çalışmamalıdır. Bir uyarlama gereklidir.
julien

1

Bir çözüm bilmiyorum, ancak aradığınız terimin "uyuşmazlık çözümü" - harita genellemesi konusu olduğunu düşünüyorum. "Harita genellemesi çakışmaları" konulu bir Google araması bazı ilginç bilgiler gösteriyor - ancak pratik kullanımın çok fazla olduğunu bilmiyorum.


1

Mevcut uygulamalarda, genellikle "Offset" veya "Dislocation" bulabilirsiniz. Geçerli yığınızı kullanarak, otomatik olarak paralel çizgiler elde etmek biraz zor görünüyor:

Özetlemek gerekirse: En kolay bildiğim yöntem UMN Eşleştiricisini ve buradaki Ofset değerini kullanmak. Harita dosyanız için örnek stil:

STYLE
 SYMBOL 7
 OUTLINECOLOR 160 160 160
 SIZE 5
 OFFSET 2 -99 # <-- This will offset the line to the right.
 ANTIALIAS FALSE
END # STYLE

0

Örtüşen çizgi katmanları çiziyorsanız, izleyicinin tüm çizgileri görmesini sağlamak için çeşitli seçenekleriniz vardır.

  1. Genişlik - çizgi genişliğini katmanlar arasında değiştirir ve daha geniş çizgileri alt tarafa koyarsınız.
  2. Opaklık / Şeffaflık - tek tek çizgi katmanlarını kısmen opak yapabilir, böylece tek tek katmanları 'görebilir'.
  3. Ofset - gerçek çizgi özelliğini temsil eden çizgi sembolünü çizginin gerçek geometrisinin bir tarafına dengeleyebilirsiniz. Tek tek katmanlar, tüm katmanların görülmesine izin vermek için farklı miktarlarda ve farklı yönlerde dengelenebilir.
  4. Çizgiler, semboller arasında belirli bir boşluğu olan bir dizi nokta sembolüyle gösterilebilir. Sembolü, sembol rengini, sembol boyutunu ve farklı çizgi katmanları arasındaki boşluğu değiştirerek, her bir ayrı çizgi katmanını ayırt edilebilir kılmalısınız.

GeoServer kullanmıyorum, ancak MapServer'ın tüm bunları yapma özelliğine sahip olduğunu biliyorum. GeoServer'ın da yapması muhtemeldir.


İstediğimiz # 3 gibi geliyor, ancak yalnızca üst üste gelen özellikler için. Mümkün mü?
mwalker

2
MapServer ve diğer web harita sunucuları ve GIS, etiketler için ihtilaf çözümü yapar, ancak bunu anında yapmanıza izin verecek bir özelliğin farkında değilim. Elbette, verileriniz oldukça statikse, farklı katmanlardan satırların nerede kesiştiklerini (veya bir tolerans dahilinde olduğunu) belirlemek ve buna göre verileri sınıflandırmak için verilerinizi önceden işlemden geçirebilirsiniz. Harita oluşturma motorunuz daha sonra verilerinizdeki bir özniteliği temel alan 'yer değiştirme' sembololojisini uygulayabilir.
DavidF
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.