-1

私はopenstretmapにいくつかのポリゴンを表示するためにleafletjsを使用しています。

ポリゴンの座標を提供する外部データ リソースがあります。残念ながら、この配列の座標の順序が間違っています。

例: 私は得る:

[[10.5254913,52.2734311],[10.5258872,52.2734632]]

私は欲しい:

[[52.2734311,10.5254913],[52.2734632,10.5258872]]

そこで、配列を反復処理してエントリを反転する小さな関数を自分で作成しました。

var polCoords = [];
$.each(value.polygon[0], function(key,value){
polCoords[key] = [value[1],value[0]]; 
});

これはうまくいきます。しかし今、ポリゴンのいくつかの配列が多次元であることを発見しました! だから私はこのような配列を持っています:

[[[10.5261828,52.2726556],[10.5263222,52.2726767],[10.5263578,52.2726821],[10.5263637,52.2726677],[10.5263738,52.2726428],[10.5264042,52.2725678],[10.526186,52.2725346],[10.5261395,52.272649],[10.5261828,52.2726556]],[[10.5261828,52.2726556],[10.5261713,52.2726821],[10.5261621,52.2727047],[10.5259248,52.2726687],[10.5257879,52.2726479],[10.5257435,52.2727573],[10.5258014,52.2727661],[10.5257967,52.2727777],[10.5260173,52.2728113],[10.5261107,52.2728254],[10.5260641,52.2729403],[10.5259711,52.2729262],[10.5259526,52.2729234],[10.5258101,52.2732746],[10.5258697,52.2732837],[10.5260636,52.2733132],[10.5261371,52.2733243],[10.5262746,52.2729854],[10.5262888,52.2729876],[10.526312,52.2729304],[10.5262636,52.2729231],[10.5262239,52.272917],[10.5263222,52.2726767],[10.5261828,52.2726556]],[[10.5260636,52.2733132],[10.5260595,52.2733365],[10.5260575,52.2733486],[10.5258607,52.2733326],[10.5258631,52.2733195],[10.5258697,52.2732837],[10.5260636,52.2733132]]]

複数のポリゴンで構成されているようです。

この多次元配列のすべてのエントリを元に戻すにはどうすればよいですか?

4

3 に答える 3

2

arrayあなたのデータであると仮定して、次のようなものを試してください:

var reversed = array.map(function reverse(item) {
    return Array.isArray(item) && Array.isArray(item[0]) 
               ? item.map(reverse) 
               : item.reverse();
});

これはバニラ JavaScript です。jqueryでは次のようになると思います:

var reversed = $.map(array, function reverse(item) {
    return $.isArray(item) && $.isArray(item[0])
               ? $.map(item, reverse)
               : item.reverse();
});

私は試しませんでしたが、両方とも動作するはずです。お知らせ下さい。

于 2013-10-29T08:25:55.733 に答える
0
<script type="text/javascript">
        //given array
        var arr = [
                    [
                        [10.5261828, 52.2726556],
                        [10.5263222, 52.2726767],
                        [10.5263578, 52.2726821],
                        [10.5263637, 52.2726677],
                        [10.5263738, 52.2726428],
                        [10.5264042, 52.2725678],
                        [10.526186, 52.2725346],
                        [10.5261395, 52.272649],
                        [10.5261828, 52.2726556]
                    ],
                    [
                        [10.5261828, 52.2726556],
                        [10.5261713, 52.2726821],
                        [10.5261621, 52.2727047],
                        [10.5259248, 52.2726687],
                        [10.5257879, 52.2726479],
                        [10.5257435, 52.2727573],
                        [10.5258014, 52.2727661],
                        [10.5257967, 52.2727777],
                        [10.5260173, 52.2728113],
                        [10.5261107, 52.2728254],
                        [10.5260641, 52.2729403],
                        [10.5259711, 52.2729262],
                        [10.5259526, 52.2729234],
                        [10.5258101, 52.2732746],
                        [10.5258697, 52.2732837],
                        [10.5260636, 52.2733132],
                        [10.5261371, 52.2733243],
                        [10.5262746, 52.2729854],
                        [10.5262888, 52.2729876],
                        [10.526312, 52.2729304],
                        [10.5262636, 52.2729231],
                        [10.5262239, 52.272917],
                        [10.5263222, 52.2726767],
                        [10.5261828, 52.2726556]
                    ],
                    [
                        [10.5260636, 52.2733132],
                        [10.5260595, 52.2733365],
                        [10.5260575, 52.2733486],
                        [10.5258607, 52.2733326],
                        [10.5258631, 52.2733195],
                        [10.5258697, 52.2732837],
                        [10.5260636, 52.2733132]
                    ]
                ];        

        var arrModified = new Array();
        var intDepth = 0;

        //array depth calculation
        function arrayDepth(arr) {
            for(item in arr) {
                if (Object.prototype.toString.call(arr) === '[object Array]') {
                    intDepth++;
                    arrayDepth(item);
                }
            }
        }
        arrayDepth(arr);

        //for depth 1
        if (intDepth == 1) {            
                arrModified = arr.reverse();
        }

        //for depth 2
        if (intDepth == 2) {
            for (item in arr) {
                arrModified[item] = arr[item].reverse();
            }
        }

        //for depth 3
        if (intDepth == 3) {
            for (i in arr) {
                var arrTemp = arr[i];
                var arrTemp1 = new Array();
                for (j in arrTemp) {
                    arrTemp1[j] = arrTemp[j].reverse();
                }
                arrModified[i] = arrTemp1;                
            }            
        }

        //so on for other depths
        //arrModified is the required array

    </script>
于 2013-10-29T10:14:30.907 に答える