1

我有一张地图,用户可以在其中绘制折线,对其进行编码,然后将其保存到 mySQL 数据库中。然后,还有另一个地图从数据库中查询编码字符串,解码折线并将其显示在地图上。

我正在使用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 中。

第二张地图,查询数据库以获取编码的折线字符串,这与我最初保存的完全相同。

然后我使用几何库中的解码函数解码字符串并创建折线,如下所示:

    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类型。结果相同。

我尝试通过使用编码字符串在第二个地图上声明一个字符串变量来绕过数据库。结果相同。

4

1 回答 1

0

(由 OP 在问题编辑中回答。转换为社区 wiki 答案。请参阅没有答案的问题,但问题在评论中解决(或在聊天中扩展)

OP写道:

问题是 javascript 解释(和删除)反斜杠字符。因此,当编码字符串到达​​数据库时,它不再包含反斜杠,从而使折线成为完全不同的折线。我尝试用双反斜杠替换单个反斜杠:“\”->“\”,但在我对编码函数进行替换之前我遇到了麻烦;像这样:

newRoutePathCoordsStr = google.maps.geometry.encoding.encodePath(newRoutePath).replace(/\\/g,"\\\\");
于 2015-01-29T12:57:39.590 回答