私は Dundas Maps を使用して、ビジネスの実装に固有の地域に国がグループ化された世界地図を描こうとしています。
世界各国の形状データ (ポイントとセグメント) があります。リージョン内の国のすべてのポイントとセグメントを新しいリージョン シェイプに追加することで、国をリージョンに結合できます。
foreach(var region in GetAllRegions()){
var regionShape = new Shape { Name = region.Name };
foreach(var country in GetCountriesInRegion(region.Id)){
var countryShape = GetCountryShape(country.Id);
regionShape.AddSegments(countryShape.ShapeData.Points, countryShape.ShapeData.Segments);
}
map.Shapes.Add(regionShape);
}
問題は、国の境界線がまだ地域内に表示されていることです。地域の境界線のみが表示されるように、それらを削除したいと考えています。
Dundas ポリゴンは、同じポイントで開始および終了する必要があります。これは、すべての国の形状に当てはまります。次に、次のことができるアルゴリズムが必要です。
- 地域の境界セグメントに参加できるように、地域の境界で国境が交差する場所を特定します。
- どの国境が地域の境界ではないかを判断して、それらを破棄できるようにします。
- 結果の地域ポイントを並べ替えて、形状の境界を順番に記述します。
以下は、私がこれまで地図でたどり着いた場所です。国境はまだ削除する必要があることがわかります。たとえば、モンゴルと中国の国境は破棄する必要がありますが、モンゴルとロシアの国境は維持する必要があります。
地域の境界を保持する必要がある理由は、地域の色は情報を伝える上で重要ですが、隣接する地域は同じ色である可能性があるためです。地域は、国を含めたり除外したりするために変更できます。これが、地域の形成が動的でなければならない理由です。
編集: 私が探しているのはポリゴンのUNIONであることを今知っています。David Leanが SQL Server 2008 の空間関数を使用してそれを行う方法を説明していますが、これはオプションかもしれませんが、結果として得られるポリゴン ユニオンが非常に複雑であるため、SQL が 43,680 文字で切り捨てるため、私の努力は停止しました。私は現在、その回避策を見つけるか、コードでユニオンを実行する方法を見つけようとしています。