3

Google Maps API でマップごとに 1000 個のフィーチャしか許可されないという問題があります。

データベースには、の記録を保持していますareas。各エリアには、XML 文字列として格納された KML ポリゴン情報のヒープが関連付けられています。各エリアは、1 つ以上のポリゴンで構成されています。

ユーザー入力が与えられると、これらの領域の一部が 1 つに結合され<Placemark>ます。<MultiGeometry>連結されたポリゴン情報をタグでラップすることにより、結合されたジオメトリを取得します。

<Placemark>
    <name>My combined area</name>
    <MultiGeometry>
        <Polygon> (area 1 info) </Polygon>
        <Polygon> (area 2 info) </Polygon>
        <Polygon> (area 2 info) </Polygon>
        <Polygon> (area 3 info) </Polygon>
    </MultiGeometry>
</Placemark>

問題は、これらの領域の多くが非常に複雑であるため、任意の Placemark に 100 を超えるポリゴンが含まれる可能性があり、ドキュメントごとに 1000 の制限をすぐに超えてしまうことです。

さて、組み合わされた領域の大部分が単一の連続領域を形成することを考えると、連続領域の内側には非常に役に立たない多くの線と多角形があります。ポリゴンをループして 1 つ (または少なくとも少数) のポリゴンにマージすることは可能ですか?

4

1 に答える 1

1

保存方法は、これを解決するのが非常に困難な問題にします。隣接するポリゴンをプログラムでマージすると、時間がかかり複雑になります。

XML フラグメントを保存するのではなく、PostGISを使用して PostgreSQL などの GIS 対応データベースにプッシュします。これにより、形状情報を XML フラグメントではなく既知のバイナリ (WKB) オブジェクトとして保存でき、GIS 処理および書式設定ツールの完全なスイートが提供されます。

そのフォーマットがあれば、この問題は非常に簡単に解決できます。たとえば、ジオメトリ列が「the_geom」と呼ばれると仮定すると、次のようなクエリを使用できます。

SELECT ST_ASKML(ST_Union(the_geom)) AS area_union_askml
FROM areas 
WHERE (some_filter_expression)
GROUP BY (optional_group_by_expression)

これは単純に集計関数 ST_UNION を使用して、一致したジオメトリを 1 つのオブジェクトに結合し、結果の列を KML フラグメントとして出力します。

KML が Google マップにとって複雑すぎるために形状を単純化する必要がある場合は、ST_Simplify または ST_SimplifyPreserveTopology を追加できます。ST_NPoints を使用して、結果のジオメトリ内のポイントの数をカウントすることもできるため、結果を簡略化する必要がある場合を検出できます。

于 2010-11-06T23:19:41.257 に答える