1

ユーザーがポリラインを描画してエンコードし、mySQL データベースに保存できるマップが 1 つあります。次に、DB からエンコードされた文字列をクエリし、ポリラインをデコードしてマップに表示する別のマップがあります。

encodePath()次のようにジオメトリ ライブラリの関数を使用しています。

    if(overlayType == 'POLYGON'){
        newPolygonOverlay = overlaysArray[0];   //only one overlay
        newPolygonPath = newPolygonOverlay.getPath();    //get the path
        newPolygonPathCoordsStr = google.maps.geometry.encoding.encodePath(newPolygonPath);    //encode it

このコードは、次のような文字列を生成します。

    wwzhBz~|gP~mhMygvCt`cDjgiH{ohIf{fA

次に、 mediumtextタイプを使用して、この文字列を mySQL DB に格納します。

2 番目のマップは、DB にクエリを実行して、エンコードされたポリライン文字列を取得します。これは、最初に保存したものとまったく同じです。

次に、ジオメトリ ライブラリのデコード関数を使用して文字列をデコードし、次のようにポリラインを作成します。

    var array = google.maps.geometry.encoding.decodePath(str);  //str contains the encoded string from the db
    var levels = decodeLevels("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");

    var Poly = new google.maps.Polyline({
      path: array,
      levels: levels,
      strokeColor: '66FF00',
      strokeOpacity: 1.0,
      strokeWeight: 2
    });

    flightPath.setMap(map);

私の問題は、途中でポリライン ポイントの一部が台無しになり、結果のポリラインが元のポリラインと同じではないことです。

mySQLでblob型を使用してみました。同じ結果です。

エンコードされた文字列を使用して 2 番目のマップで文字列変数を宣言することにより、DB をバイパスしようとしました。同じ結果です。

4

1 に答える 1