我有一张地图,用户可以在其中绘制折线,对其进行编码,然后将其保存到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数据库中。
第二张地图,查询数据库以获取编码的折线字符串,这与我最初保存的字符串完全相同。
然后我使用几何库中的decode函数解码字符串并创建折线,如下所示:
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 类型。结果相同。
我试过通过在第二个地图上用编码的字符串声明一个字符串变量来绕过数据库。结果相同。
答案 0 :(得分:0)
(在问题编辑中由OP回答。转换为社区维基答案。请参阅Question with no answers, but issue solved in the comments (or extended in chat))
OP写道:问题是javascript会解释(并删除)反斜杠字符。因此,当编码的字符串到达DB时,它不再包含反斜杠,使折线成为完全不同的折线。我尝试用双反斜杠替换单个反斜杠:" \" - > " \",但我遇到了麻烦,直到我对编码功能进行了替换;像这样:
newRoutePathCoordsStr = google.maps.geometry.encoding.encodePath(newRoutePath).replace(/\\/g,"\\\\");