9

サーバー側に vb.net を使用し、Google マップの .aspx ページに JavaScript を使用して Web ページを開発しています。Web ページは、特定の郡内のジョージア州のすべてのブロック グループをマップする大きな GIS であり、.js ファイル内の約 15 MB の純粋な [緯度、経度] ポイントです。chrome/firefox では、マップが読み込まれ、次にスクリプトが読み込まれ、スクリプトが定義するポリゴンを描画するためのコールバックがトリガーされ、ポリゴンがマップ上に描画されます。IE では、マップが読み込まれ、スクリプトが読み込まれると、コンソールSCRIPT14: error -2147024882にオンライン 1 が表示されます。マップ上のポリゴン以外のすべてが正しく表示されます。.js ファイルの構造は、いくつかの変数のみの宣言です。

var allPolys = [
    [
      //poly1 points
      [x1,y1],
      [x2,y2],
      ...
    ],
    [
      //next poly
      [x1,y1],
      ...
    ]
]

^^ は、各ポリゴンが .js でどのように定義されているかです。すべてのポイントが単一の配列内にあるため、これはサイズの問題ですか?

マッピング コード:

            function drawPolys() {
                for (var i = 0; i < allTracts.length; i++) {
                    var tract = "new google.maps.Polygon({ strokeWeight: 0.7, path: [";
                    for (var j = 0; j < allTracts[i].length; j++)
                        tract += " new google.maps.LatLng(" + allTracts[i][j][0] + "," + allTracts[i][j][1] + "),";
                    tract = tract.substring(0, tract.length - 1) + "], map: map });";
                    eval(tract);
                }

                //this is all for other 'multipolygons' that are in some maps
                var colors = ['red', 'blue', 'green', 'orange', 'yellow', 'white'];

                for (var i = 0; i < multiPolys.length; i++) {
                    for (var j = 0; j < multiPolys[i].length; j++) {
                        var subTract = "new google.maps.Polygon({ strokeWeight: 1.5, strokeColor: '" + colors[i % colors.length] + "', fillColor: '" + colors[i % colors.length] + "', path: [";
                        for (var k = 0; k < multiPolys[i][j].length; k++)
                            subTract += " new google.maps.LatLng(" + multiPolys[i][j][k][0] + "," + multiPolys[i][j][k][1] + "),";
                        subTract = subTract.substring(0, subTract.length - 1) + "], map: map });";
                        eval(subTract);
                    }
                }
            }

Chrome では、ページが美しく読み込まれます。

edit : eval() のない新しいマッピング関数

            function drawPolys() {
                for (var i = 0; i < allTracts.length; i++) {
                    var path = [];
                    for (var j = 0; j < allTracts[i].length; j++)
                        path.push(new google.maps.LatLng(allTracts[i][j][0],allTracts[i][j][1]));
                    new google.maps.Polygon({ strokeWeight: 0.7, path: path, map: map });
                }

                var colors = ['red', 'blue', 'green', 'orange', 'yellow', 'white'];

                for (var i = 0; i < multiPolys.length; i++) {
                    var path = [];
                    for (var j = 0; j < multiPolys[i].length; j++) {
                        path[j] = [];
                        for (var k = 0; k < multiPolys[i][j].length; k++)
                            path[j].push(new google.maps.LatLng(multiPolys[i][j][k][0],multiPolys[i][j][k][1]));
                    }
                    new google.maps.Polygon({ strokeWeight: 1.5, strokeColor: colors[i % colors.length], fillColor: colors[i % colors.length], paths: path, map: map });
                }
            }
4

2 に答える 2

13

このエラーの正確な原因を見つけたと思います。

編集:このバグはIE 10の時点で修正されたと思います

私のテストでは、IE は 2 16 -3を超える数値を含む Javascript ファイルの実行を拒否することが示唆されています。したがって、.js ファイルに65533個の番号がある場合、IE はそれを実行します。ただし、65534個以上の数字が含まれていると、エラーが発生します−2147024882

この問題を示すテストケースをここに立てました:

http://ie-error-2147024882.s3.amazonaws.com/ie_error_-2147024882.html

私が取り組んでいるサイトでは、S3 でホストされている Javascript ファイルから大量の JSON データ セットをロードしています。最初は、これは IE の Javascript ソース ファイル サイズの制限によるものだと思いました。−2147024882しかし、少しテストした結果、IE は、この不可解なエラーを引き起こしたファイルよりもはるかに大きな .js ファイルを処理できることが明らかになりました。

私の場合の回避策は、.js ファイルを生成するときに int と float を文字列としてエンコードし、parseInt と parseFloat を使用してそれらを解釈することでした。

于 2012-08-10T21:32:04.267 に答える
2

私のグーグルが行く限り、これは「メモリ不足」の問題のようです:

「エラー -2147024882 操作を実行するのに十分なメモリがありません。 - MAPI_E_NOT_ENOUGH_MEMORY (Microsoft Exchange Server Information Store)

ループの長さを確認してください (multiPolys と allTracts)

また、string tract と subTract の長さを確認してください。長すぎる可能性があります。

于 2012-08-06T18:46:06.743 に答える