1

2つのポリゴン間の最小距離を見つけたい。しかし、私はそれを見つけるのにいくつかの問題がありました。私はグーグルマップが初めてなので、手伝ってくれませんか?使用する座標があります。

    polygonArray = [[
       new google.maps.LatLng(40.56389453066509,33.739013671875),
       new google.maps.LatLng(40.39676430557206,32.135009765625),
       new google.maps.LatLng(39.87601941962116,36.046142578125)
    ]];

前もって感謝します。

4

3 に答える 3

3

2点間の距離、ポリゴンの中心などを計算するジオメトリライブラリが必要です。この別の質問を見てください。

于 2013-02-06T14:59:47.000 に答える
3

独自のコードを作成する場合は、次のようにします。

重複しない2つのポリゴンの場合、(プログラムの観点から)最も単純なコードは1つのポリゴンのポイントを繰り返し、1つのポリゴンのすべてのポイントと2番目のポリゴンのすべてのラインの間の距離を見つけてから2番目のポリゴンに対して同じことを行います。ポリゴン(すべての線を指す)。

ポリゴンが重なっているかどうかわからない場合は、1つのポリゴンのすべての線が2番目のポリゴンの他の線と交差していないかどうかも確認する必要があります(1つのポリゴンに対してのみこれを行う必要があります)。

于 2013-02-06T15:12:21.103 に答える
0

以下のコードは問題を部分的に解決しましたが、この部分は頂点でのみ機能するため、他のポリゴンにより近いエッジ上のポイントを検出することで拡張する必要があります。

        static double solve(List<List<Integer>> p, List<List<Integer>> q) {
        double minLength = 100000000;
        for (List<Integer> qq : q) {
            for (List<Integer> pp : p) {
                double current = distanceBTWPoints(pp, qq);
                if (current < minLength) {
                    minLength = current;
                }
            }
        }
        System.out.println(minLength);
        return minLength;
    }

    static double distanceBTWPoints(List<Integer> p, List<Integer> q) {
        double xDiff = q.get(0) - p.get(0);
        double yDiff = q.get(1) - p.get(1);
//        if(xDiff==0 || yDiff==0)
//            return 0;
        System.out.println(+p.get(0) + "  " + q.get(0) + "  " + p.get(1) + "  " + q.get(1) + " x:" + xDiff + "  y: " + yDiff + " p: " + ((xDiff * xDiff) + (yDiff * yDiff)) + " VAl= " + Math.sqrt((xDiff * xDiff) + (yDiff * yDiff)));
//        System.out.println("p.get(0): "+p.get(0) +"  q.get(0) :"+q.get(0) +"  p.get(1):  "+p.get(1) +"  q.get(1): "+q.get(1) +" xDiff: " + xDiff + "  yDiff: " + yDiff + " plus: "+((xDiff * xDiff) + (yDiff * yDiff))+ " VAl= " + Math.sqrt((xDiff * xDiff) + (yDiff * yDiff)));
        System.out.println("--" + Math.hypot(xDiff, yDiff));
        System.out.println("--" + Math.sqrt((xDiff * xDiff) + (yDiff * yDiff)));
        return Math.hypot(xDiff, yDiff);
    }
于 2018-09-21T21:23:26.860 に答える