0

私はしばらくこれに頭を悩ませていたので、ついに故障して意見を求めることにしました.

座標の配列を使用して地図の輪郭を描くオブジェクトを作成する必要があります。Array of Arrays を作成した (少なくとも私はそう思った) ので、長さを反復処理して、必要な数のオブジェクトを作成できます。問題は、配列の値が文字列であることです。実際には配列を参照していません。オブジェクトは怒って、無効なパラメーターだと言います。

split() を使用してみましたが、効果がないようです。手動で path:boundaries0 を入力しましたが、問題なく動作しているようです。私はこれを長い間見てきました。私は脳細胞を失ったと思います。誰かが私を正しい道に導くことができれば、それは素晴らしいことです.

var arrays = 50; //Set this to how many arrays are created.

var boundariesAr = new Array;
var boundaries = new Array;
for(i=0;i<arrays;){
    boundariesAr.push('boundaries' + i);
    i++;
    };

for(j=0;j<boundariesAr.length;){
    var serviceArea = "serviceArea" + j;
    var currentArray = boundariesAr[j];
    var currentItem = currentArray.split(" ");

    serviceArea = new google.maps.Polygon({
        path:currentItem,
        geodesic:true,
        strokeColor:'#000',
        strokeOpacity:1.0,
        strokeWeight:2,
        fillColor: '#FF0000',
        fillOpacity: 0.35
        });
    serviceArea.setMap(map);
    j++;
    };

編集 - 更新されたコード (スニペットのみ) これは、配列がどのように見えるかを切り詰めたものです。

var boundaries0 = [
new google.maps.LatLng(65.307997,-146.130689),
new google.maps.LatLng(65.291840,-146.198712),
];
var boundaries1 = [
new google.maps.LatLng(64.703884,-147.150958),
new google.maps.LatLng(64.703189,-147.155442),
];


var arrays = 50; //boundaries0[],boundaries1[], etc

var boundariesAr = new Array;

for(var i=0;i<arrays;i++){
    boundariesAr.push(boundaries);
    };
for(var j=0;j<boundariesAr.length;j++){
    var serviceArea = "serviceArea" + j;
    var currentArray = boundariesAr[j];
    var currentItem = currentArray.split(" ");

    serviceArea = new google.maps.Polygon({
        path:currentItem,
        geodesic:true,
        strokeColor:'#000',
        strokeOpacity:1.0,
        strokeWeight:2,
        fillColor: '#FF0000',
        fillOpacity: 0.35
        });
    serviceArea.setMap(map);
    };

時間を割いて助けてくれた素晴らしい人々に感謝します。できれば飲み物を買います。

これは最終的に機能しました-(そして、そもそも配列をネストしないのはばかげていると思います)

var boundaries = [];
boundaries[0] = [
new google.maps.LatLng(65.307997,-146.130689),
new google.maps.LatLng(65.291840,-146.198712),
];
boundaries[1] = [
new google.maps.LatLng(64.703884,-147.150958),
new google.maps.LatLng(64.703189,-147.155442),
];

var arrays = 50; //Set this to how many arrays are created.

for(var j=0;j<arrays;j++){

    serviceArea = new google.maps.Polygon({
        path:boundaries[j],
    geodesic:true,
    strokeColor:'#000',
    strokeOpacity:1.0,
    strokeWeight:2,
    fillColor: '#FF0000',
        fillOpacity: 0.35
    });
serviceArea.setMap(map);
};
4

4 に答える 4

2

あなたの「更新されたコード」にはこれがあります:boundariesAr.push(boundaries);しかし、私が知る限り、boundariesですかundefined

配列の配列が必要な場合は、次のようにしないでください。

var boundaries = [
  [
    new google.maps.LatLng(65.307997,-146.130689),
    new google.maps.LatLng(65.291840,-146.198712)
  ],
  [
    new google.maps.LatLng(64.703884,-147.150958),
    new google.maps.LatLng(64.703189,-147.155442)
  ]
];

この方法で作成することもできます (インデックスで設定する方が簡単な場合)。

var boundaries = [];
boundaries[0] = [
  'map thing',
  'map thing 2'
]
boundaries[1] = [
  'more map things',
  'more map things 2',
]

これにより、あなたがそうするときにあなたboundaries[0]が得るようになります

[
  new google.maps.LatLng(65.307997,-146.130689),
  new google.maps.LatLng(65.291840,-146.198712)
]

もちろん、これにより、次のことが可能になりますboundaries[0][0]

を使用new Arrayして新しい配列を作成するのはばかげているようです。使うだけvar myThing = [];

実際の多次元配列を取得したら、次のことができるはずです。

for(var j=0;j<boundaries.length;j++){
  for( var b=0; b<boundaries[j].length;b++){
    currentItem = boundaries[j][b];
    // At this point currentItem is `new google.maps.LatLng(65.307997,-146.130689)`
    var serviceArea = new google.maps.Polygon({
      path:currentItem,
      geodesic:true,
      strokeColor:'#000',
      strokeOpacity:1.0,
      strokeWeight:2,
      fillColor: '#FF0000',
      fillOpacity: 0.35
    });
  }
  serviceArea.setMap(map); // Where does `map` come from?
}

あなたの境界が実際にはたくさんの個別の配列である場合boundaries1boundaries2...boundaries50次に、それらを変更して吸う回数を減らす必要があります(ここで述べたように、それらを配列に入れます)、またはそれを行うことができなくなりますあなたが欲しいもの。Javascriptには、変数の名前が文字列としてしかない場合に変数から値を取得する方法がありません(そして私は徹底的に調べました)。

基本的に、変数を動的に呼び出すことはできません"boundaries" + i;。適切な配列またはオブジェクト データ構造に配置しない限り、それを行う方法はありません。

于 2013-10-23T19:49:23.610 に答える
0

この行はあなたの問題です:

boundariesAr.push('boundaries' + i);

文字列を配列にプッシュしています。配列をプッシュするには、次のようにします。

boundariesAr.push([]);

[]配列リテラルのis 表記。

于 2013-10-23T17:24:45.107 に答える