1

私はグーグルマップで郵便番号エリアのリストを描いていて、そのエリアの上に郵便番号のラベルを書き込もうとしています. 領域の重心を使用してラベルを配置していることを除いて、これは問題なく実行できますが、一部の領域は不規則な形をしており、重心は領域自体の外側にあります。これが私が意味することの例です:

ここに画像の説明を入力

郵便番号 81151 を見てください。自分の地域ではなく、郵便番号 81123 の地域の上に表示されます。

地域の重心を使用するのではなく、不規則な地域の上に郵便番号を正しく配置するためのより良いアルゴリズムを知っている人はいますか?

4

2 に答える 2

1

google.maps.geometry.poly.containsLocation および google.maps.geometry.spherical.interpolate 関数を使用できます。

例えば。ポリゴンの境界点と中心点を取得し、関数「google.maps.geometry.spherical.interpolate ({centerpoint}, {bundaypoint}, {distance})」を使用して、結果の点がエリア内にあることを確認します' google.maps.geometry.poly.containsLocation ({resultPoint}, {polygonObject}) ' 関数によるポリゴンの

GetBounds 関数:

if (!google.maps.Polygon.prototype.getBounds) {
            google.maps.Polygon.prototype.getBounds = function (latLng) {
                var bounds = new google.maps.LatLngBounds();
                var paths = this.getPaths();
                var path;
                for (var p = 0; p < paths.getLength() ; p++) {
                    path = paths.getAt(p);
                    for (var i = 0; i < path.getLength() ; i++) {
                        bounds.extend(path.getAt(i));
                    }
                }
                return bounds;
            }
        }
于 2013-02-06T15:18:44.100 に答える
0

数週間前に同様の問題があり、アルゴリズムが見つかりませんでした(おそらく何もない)。

最後に、目的のデータを含む FusionTable を見つけました (境界を格納するために fusionTable も使用したので、テーブルを簡単にマージできました)。

おそらく同じことができます。簡単な検索で次の結果が得られました

たとえば、zip 81151 の場合、座標はさらに西側に配置されます。この表がニーズに合っている可能性があります。

于 2013-02-04T23:22:43.380 に答える