ユーザーがポリラインを描画してエンコードし、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 をバイパスしようとしました。同じ結果です。