JavaScript和Java之间的PolyUtil解码差异

JavaScript和Java之间的PolyUtil解码差异,java,android,google-maps,Java,Android,Google Maps,我有多个点对应于PolyUtil编码中的路由。我在一个网络和本地android应用程序中显示了这条路线,问题是在我的网络中显示正确,但在我的android应用程序中显示有点不同。 我记录了两个PolyUtil解码和解码的点是不同的。使用PolyUtil交互式站点,我获得了正确的路线。我认为问题在于android库。 PolyUtil编码点: lvzsEhgvuI~c@HbJr@lJ`@|MrDfJlE~GxCdEvQ~IhCfDh@bIi@dGwB|D{GL{VqBqGcHcEeNGqGp

我有多个点对应于PolyUtil编码中的路由。我在一个网络和本地android应用程序中显示了这条路线,问题是在我的网络中显示正确,但在我的android应用程序中显示有点不同。

我记录了两个PolyUtil解码和解码的点是不同的。使用PolyUtil交互式站点,我获得了正确的路线。我认为问题在于android库。

PolyUtil编码点:

lvzsEhgvuI~c@HbJr@lJ`@|MrDfJlE~GxCdEvQ~IhCfDh@bIi@dGwB|D{GL{VqBqGcHcEeNGqGpGmHnQ
android points解码:

-34.88199, -56.15223
-34.883770000000005, -56.152280000000005
-34.885600000000004, -56.15254
-34.88799, -56.152710000000006
-34.889790000000005, -56.15361000000001
-34.89123, -56.15464000000001
-34.89222, -56.15541
-34.893980000000006, -56.15841
-34.89482, -56.1591
-34.896440000000005, -56.159310000000005
-34.89775, -56.1591
-34.898700000000005, -56.158500000000004
-34.898770000000006, -56.15708000000001
-34.8982, -56.15326
-34.89674, -56.15189
-34.894310000000004, -56.15091
-34.89294, -56.150870000000005
-34.89143, -56.152240000000006
-34.891290000000005, -56.15520000000001
-34.876070000000006,-56.152370000000005
-34.88199,-56.152420000000006
-34.883770000000005,-56.152680000000004
-34.885600000000004,-56.15285000000001
-34.88799,-56.15375
-34.889790000000005,-56.15478
-34.89123,-56.155550000000005
-34.89222,-56.158550000000005
-34.893980000000006,-56.159240000000004
-34.89482,-56.15945000000001
-34.896440000000005,-56.159240000000004
-34.89775,-56.158640000000005
-34.898700000000005,-56.15722
-34.898770000000006,-56.153400000000005
-34.8982,-56.15203
-34.89674,-56.151050000000005
-34.894310000000004,-56.15101000000001
-34.89294,-56.15238000000001
-34.89143,-56.15534
google.maps.geometry.encoding.decodePath(encoded_estimated_wp);
PolyUtil.decode(encoded_path);
解码的web点:

-34.88199, -56.15223
-34.883770000000005, -56.152280000000005
-34.885600000000004, -56.15254
-34.88799, -56.152710000000006
-34.889790000000005, -56.15361000000001
-34.89123, -56.15464000000001
-34.89222, -56.15541
-34.893980000000006, -56.15841
-34.89482, -56.1591
-34.896440000000005, -56.159310000000005
-34.89775, -56.1591
-34.898700000000005, -56.158500000000004
-34.898770000000006, -56.15708000000001
-34.8982, -56.15326
-34.89674, -56.15189
-34.894310000000004, -56.15091
-34.89294, -56.150870000000005
-34.89143, -56.152240000000006
-34.891290000000005, -56.15520000000001
-34.876070000000006,-56.152370000000005
-34.88199,-56.152420000000006
-34.883770000000005,-56.152680000000004
-34.885600000000004,-56.15285000000001
-34.88799,-56.15375
-34.889790000000005,-56.15478
-34.89123,-56.155550000000005
-34.89222,-56.158550000000005
-34.893980000000006,-56.159240000000004
-34.89482,-56.15945000000001
-34.896440000000005,-56.159240000000004
-34.89775,-56.158640000000005
-34.898700000000005,-56.15722
-34.898770000000006,-56.153400000000005
-34.8982,-56.15203
-34.89674,-56.151050000000005
-34.894310000000004,-56.15101000000001
-34.89294,-56.15238000000001
-34.89143,-56.15534
google.maps.geometry.encoding.decodePath(encoded_estimated_wp);
PolyUtil.decode(encoded_path);
在我的网络中,我是这样解码的:

-34.88199, -56.15223
-34.883770000000005, -56.152280000000005
-34.885600000000004, -56.15254
-34.88799, -56.152710000000006
-34.889790000000005, -56.15361000000001
-34.89123, -56.15464000000001
-34.89222, -56.15541
-34.893980000000006, -56.15841
-34.89482, -56.1591
-34.896440000000005, -56.159310000000005
-34.89775, -56.1591
-34.898700000000005, -56.158500000000004
-34.898770000000006, -56.15708000000001
-34.8982, -56.15326
-34.89674, -56.15189
-34.894310000000004, -56.15091
-34.89294, -56.150870000000005
-34.89143, -56.152240000000006
-34.891290000000005, -56.15520000000001
-34.876070000000006,-56.152370000000005
-34.88199,-56.152420000000006
-34.883770000000005,-56.152680000000004
-34.885600000000004,-56.15285000000001
-34.88799,-56.15375
-34.889790000000005,-56.15478
-34.89123,-56.155550000000005
-34.89222,-56.158550000000005
-34.893980000000006,-56.159240000000004
-34.89482,-56.15945000000001
-34.896440000000005,-56.159240000000004
-34.89775,-56.158640000000005
-34.898700000000005,-56.15722
-34.898770000000006,-56.153400000000005
-34.8982,-56.15203
-34.89674,-56.151050000000005
-34.894310000000004,-56.15101000000001
-34.89294,-56.15238000000001
-34.89143,-56.15534
google.maps.geometry.encoding.decodePath(encoded_estimated_wp);
PolyUtil.decode(encoded_path);

在android应用程序中,我解码如下:

-34.88199, -56.15223
-34.883770000000005, -56.152280000000005
-34.885600000000004, -56.15254
-34.88799, -56.152710000000006
-34.889790000000005, -56.15361000000001
-34.89123, -56.15464000000001
-34.89222, -56.15541
-34.893980000000006, -56.15841
-34.89482, -56.1591
-34.896440000000005, -56.159310000000005
-34.89775, -56.1591
-34.898700000000005, -56.158500000000004
-34.898770000000006, -56.15708000000001
-34.8982, -56.15326
-34.89674, -56.15189
-34.894310000000004, -56.15091
-34.89294, -56.150870000000005
-34.89143, -56.152240000000006
-34.891290000000005, -56.15520000000001
-34.876070000000006,-56.152370000000005
-34.88199,-56.152420000000006
-34.883770000000005,-56.152680000000004
-34.885600000000004,-56.15285000000001
-34.88799,-56.15375
-34.889790000000005,-56.15478
-34.89123,-56.155550000000005
-34.89222,-56.158550000000005
-34.893980000000006,-56.159240000000004
-34.89482,-56.15945000000001
-34.896440000000005,-56.159240000000004
-34.89775,-56.158640000000005
-34.898700000000005,-56.15722
-34.898770000000006,-56.153400000000005
-34.8982,-56.15203
-34.89674,-56.151050000000005
-34.894310000000004,-56.15101000000001
-34.89294,-56.15238000000001
-34.89143,-56.15534
google.maps.geometry.encoding.decodePath(encoded_estimated_wp);
PolyUtil.decode(encoded_path);


如何修复android路由?它显示不正确。

代码如下:

List <LatLng> pathPoints = PolyUtil.decode("lvzsEhgvuI~c@HbJr@lJ`@|MrDfJlE~GxCdEvQ~IhCfDh@bIi@dGwB|D{GL{VqBqGcHcEeNGqGpGmHnQ");
for (LatLng point : pathPoints) {
    Log.d(TAG, "" + point.latitude + "," + point.longitude);
}
PolylineOptions polylineOptions = new PolylineOptions()
        .addAll(pathPoints)
        .color(Color.RED)
        .width(20);
与您的web完全相同(
google.maps.geometry.encoding.decodePath(encoded_-estimated_-wp);
)解码:

因此,请在应用程序
buld.gradle
中检查您的
android地图UTIL
,并添加最新版本(目前为0.5+):

或者使用自定义
decodePoly()
方法,如回答(实际上是从中抓取的),并给出相同的结果:

私有列表解码多边形(字符串编码){
List poly=new ArrayList();
int index=0,len=encoded.length();
int lat=0,lng=0;
while(指数>1):(结果>>1));
lat+=dlat;
移位=0;
结果=0;
做{
b=编码的.charAt(索引++)-63;
结果|=(b&0x1f)=0x20);
int-dlng=((结果&1)!=0?~(结果>>1):(结果>>1));
液化天然气+=液化天然气;
LatLng p=新LatLng(((双)lat/1E5)),
((双)液化天然气/1E5));
poly.add(p);
}
返回多边形;
}

对我来说,一个线索是web解码列表中的第一点不在android解码列表中(暂时忽略分数差异)android解码列表中的最后一个点不在web解码列表中。两者的点数相同。这很难协调,除非有人怀疑字符串。android代码中的
编码路径如何填充并发布记录这些点的代码。谢谢你,安德里,你的回答引导我找到了解决方案。问题是json对象obj.get(“coordenadas”).toString()在字符串的开头和结尾添加了一些引号,并给出了这种奇怪的行为。我将其替换为obj.get(“coordenadas”).getAsString(),现在一切都好了。