Rendering garis yang tumpang tindih

24

Saya membuat peta berisi informasi tentang transportasi umum: bus, trem, dll. Peta ini akan memiliki lapisan yang berisi misalnya jalur trem. Setiap garis memiliki warna sendiri, dan diwakili oleh garis geometri string.

Masalahnya adalah, banyak jalur memiliki bagian yang tumpang tindih, di mana lebih dari satu jalur trem menutupi bagian yang sama. Untuk menunjukkan ini kepada pengguna, saya lebih suka agar garis berjalan paralel satu sama lain alih-alih ditarik di atas satu sama lain. Sebagai contoh, lihat bagaimana Google Maps menunjukkan jalur kereta bawah tanah New York.

Saya menduga ini adalah masalah yang cukup umum dalam kartografi, tetapi tidak tahu terminologi apa yang harus saya cari.

Saya menggunakan PostGIS / GeoServer / OpenLayers sebagai tumpukan saya, tetapi solusi open source apa pun dapat diterima.

Liedman
sumber
Memiliki masalah yang sama dengan kereta bawah tanah. Sudahkah Anda menemukan / menerapkan solusi yang dapat diterima?
Geert-Jan
Sayangnya tidak ada. Pelanggan tidak memprioritaskan ini, dan kami melakukan peretasan yang cukup jahat untuk mencegah tumpang tindih.
Liedman

Jawaban:

7

Jika Anda tertarik untuk mempelajari lebih lanjut tentang bidang ini, masalahnya bernama perpindahan kartografi , dan salah satu aspek generalisasi kartografi .

Beberapa artikel yang membahas perpindahan dan pendekatan untuk menangani masalah:

scw
sumber
"Pemindahan"! Itu istilah lain yang saya coba ingat. Kami memiliki alat dalam FME (maaf - bukan open source) yang "Memecahkan konflik kedekatan antara fitur menggunakan varian dari algoritma perpindahan Nickerson" - jadi mungkin lakukan Google Nickerson untuk melihat apa yang muncul?
Tandai Irlandia
scholar.google.com/… memunculkan tautan ke artikel asli (sayangnya membayar tembok) dan banyak orang yang merujuknya. Beberapa artikel terkait gratis dan terlihat menarik.
Ian Turton
4

Masalah ini sangat khas dalam generalisasi kartografi. Ada metode otomatis untuk itu, tetapi belum ada implementasi yang tersedia.

Metode berdasarkan " Balok " dan " Ular " memberikan hasil yang efisien untuk menyelesaikan konflik kartografi data jaringan ini (lihat juga referensi yang diberikan oleh scw ). Berikut adalah beberapa hasil dari algoritma balok pada data jalan:

Sebelum:

teks alternatif

Setelah:

teks alternatif

Lihat juga makalah ini dan presentasi ini yang menjelaskan bagaimana melakukan transformasi ini .

EDIT: Saya belum pernah mengujinya, tetapi sepertinya ada sesuatu yang terkait dengan ular di GRASS. Lihat di sini .

Julien
sumber
1
Apakah ini berfungsi jika dua segmen garis (jalur bus) memiliki geometri yang persis sama?
underdark
1
Ini berlaku untuk jalur yang terlalu tertutup, dan seharusnya tidak bekerja dengan baik untuk saluran yang tumpang tindih. Diperlukan adaptasi.
julien
1

Saya tidak tahu solusinya, tetapi saya pikir istilah yang Anda cari adalah "resolusi konflik" - topik generalisasi peta. Pencarian Google pada "konflik generalisasi peta" menunjukkan beberapa info menarik - tetapi saya tidak tahu ada banyak kegunaan praktis.

Tandai Irlandia
sumber
1

Dalam implementasi saat ini, Anda sering dapat menemukan "Offset" atau "Dislokasi". Menggunakan tumpukan saat ini, agak sulit untuk mencapai garis paralel secara otomatis:

Singkatnya: Cara termudah yang saya ketahui adalah menggunakan UMN Mapserver dan nilai Offset di sana. Gaya contoh untuk mapfile Anda:

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

Jika Anda menggambar lapisan garis yang tumpang tindih, Anda memiliki beberapa opsi untuk memungkinkan pemirsa melihat semua garis.

  1. Lebar - Anda memvariasikan lebar garis antar lapisan dan meletakkan garis yang lebih lebar di bagian bawah.
  2. Opacity / Transparansi - Anda dapat membuat layer garis individual sebagian buram, sehingga Anda dapat 'melihat melalui' lapisan individual.
  3. Offset - Anda dapat mengimbangi simbol garis yang mewakili fitur garis aktual ke satu sisi geometri aktual garis. Masing-masing lapisan dapat diimbangi dengan jumlah yang berbeda dan dalam arah yang berbeda untuk memungkinkan semua lapisan terlihat.
  4. Garis dapat diwakili oleh serangkaian simbol titik dengan jarak yang ditentukan antara simbol. Dengan memvariasikan simbol, warna simbol, ukuran simbol, dan celah antara lapisan garis yang berbeda, Anda harus membuat setiap lapisan garis dapat dibedakan.

Saya tidak menggunakan GeoServer, tetapi saya tahu bahwa MapServer memiliki fungsi untuk melakukan semua hal ini. Kemungkinan GeoServer juga melakukannya.

DavidF
sumber
Sepertinya kami ingin # 3, tetapi hanya untuk fitur yang tumpang tindih. Apakah itu mungkin?
mwalker
2
MapServer dan server peta web lainnya dan GIS melakukan resolusi konflik untuk label, tetapi saya tidak mengetahui fitur yang memungkinkan Anda melakukan ini dengan cepat. Tentu saja, jika data Anda cukup statis, Anda dapat melakukan pra-proses data Anda untuk mengidentifikasi di mana garis-garis dari lapisan yang berbeda berpotongan (atau berada dalam toleransi) dan mengklasifikasikan data berdasarkan ini. Mesin rendering peta Anda kemudian dapat menerapkan simbologi 'perpindahan' berdasarkan atribut dalam data Anda.
DavidF