重なり合う線のレンダリング


24

バス、路面電車など、公共交通機関に関する情報を含む地図を作成しています。地図には、たとえば路面電車の路線を含むレイヤーがあります。各ラインには独自の色があり、ラインストリングジオメトリで表されます。

問題は、多くの路線が重複する部分を持ち、複数の路面電車が同じ区間をカバーしていることです。これをユーザーに示すために、線を互いの上に描画するのではなく、互いに平行に走らせたいと思います。例については、Googleマップでニューヨークの地下鉄路線がどのように表示されるかをご覧ください。

これは地図作成において非常に一般的な問題であると思われますが、どの用語を検索すべきかわかりません。

スタックとしてPostGIS / GeoServer / OpenLayersを使用していますが、どのオープンソースソリューションでも受け入れられます。


地下鉄でも同じ問題があります。許容できる解決策を見つけましたか、実装しましたか?
ゲルトジャン

残念だけど違う。顧客はこれを優先せず、重複を防ぐためにかなり厄介なハックを行いました。
リードマン

回答:


7

この分野の詳細に興味がある場合、問題は地図作成変位と呼ばれ、地図作成一般化の 1つの側面です。

問題を処理するための変位とアプローチについて説明している記事:


「変位」!それは私が覚えていたもう一つの用語でした。FMEには「オープンソースではなくごめんなさい」というツールがあり、「Nickerson変位アルゴリズムのバリアントを使用して機能間の近接性の競合を解決します」-おそらく、GoogleのNickersonがどうなるか見てみましょう。
マークアイルランド

scholar.google.com/…は、元の記事へのリンクを表示し(残念ながら壁に囲まれています)、多くの人がそれを参照しています。関連記事の一部は無料で、面白そうです。
イアンタートン

4

この問題は、地図作成の一般化における非常に典型的な問題です。そのための自動化されたメソッドが存在しますが、実装はまだ利用できません。

Beams」および「Snakes」に基づく方法は、ネットワークデータのこれらの地図上の矛盾を解決するための効率的な結果を提供します(scwの参考文献も参照)。道路データのビームアルゴリズムの結果を次に示します。

前:

代替テキスト

後:

代替テキスト

この変換を行う方法を説明するこのペーパープレゼンテーションも参照してください。

編集:私はそれを一度もテストしたことがありませんが、GRASSにはヘビに関連する何かがあるようです。こちらをご覧ください


1
これは、2つのラインセグメント(バストラック)のジオメトリがまったく同じ場合に機能しますか?
暗闇

1
閉じすぎた線に適用され、正確に重なる線に対してはあまりうまく機能しないはずです。適応が必要です。
ジュリアン

1

私は解決策を知りませんが、あなたが探している用語は「紛争解決」、つまり地図の一般化のトピックです。「マップの一般化の競合」に関するGoogleの検索では、いくつかの興味深い情報が表示されますが、実際に使用できることはあまりわかりません。


1

現在の実装では、多くの場合、「オフセット」または「転位」を見つけることができます。現在のスタックを使用すると、平行線を自動的に達成するのは少し難しいように見えます。

要約すると、私が知っている最も簡単な方法は、UMN Mapserverとそこでのオフセット値を使用することです。マップファイルのスタイルの例:

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

オーバーラップするラインレイヤーを描画する場合、視聴者がすべてのラインを表示できるようにするいくつかのオプションがあります。

  1. 幅-レイヤー間で線の幅を変更し、幅の広い線を下部に配置します。
  2. 不透明度/透明度-個々のラインレイヤーを部分的に不透明にすることができるため、個々のレイヤーを「透けて見える」ことができます。
  3. オフセット-実際のラインフィーチャを表すラインシンボルを、実際のラインジオメトリの片側にオフセットできます。個々のレイヤーは、すべてのレイヤーが見えるように、異なる量と異なる方向にオフセットできます。
  4. ラインは、シンボル間に定義されたギャップを持つ一連のポイントシンボルで表すことができます。シンボル、シンボルの色、シンボルのサイズ、異なるラインレイヤー間のギャップを変えることにより、個々のラインレイヤーを区別できるようにする必要があります。

私はGeoServerを使用していませんが、MapServerにはこれらすべてを実行する機能があることを知っています。GeoServerも同様です。


#3が必要なようですが、機能が重複している場合のみです。それは可能ですか?
mwalker

2
MapServerおよび他のWebマップサーバーとGISはラベルの競合解決を行いますが、これをオンザフライで実行できる機能については知りません。もちろん、データがかなり静的である場合は、データを前処理して、異なるレイヤーの線が交差する(または許容範囲内にある)場所を特定し、これに基づいてデータを分類できます。マップレンダリングエンジンは、データの属性に基づいて「変位」記号を適用できます。
DavidF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.