Android/iOs:解码多段线字符串
我想在Android和iOS上解码多行字符串() 例如:Android/iOs:解码多段线字符串,android,ios,mapbox,polyline,Android,Ios,Mapbox,Polyline,我想在Android和iOS上解码多行字符串() 例如: _p~iF~ps|U_ulLnnqC_mqNvxq`@ 我知道有可能使用,但由于我使用的是Mapbox,我不希望在我的项目中有任何Google依赖项(此外,我不允许这样做) 地图盒是否为移动SDK提供相同的功能?我看到他们为JavaScript提供了一些功能,但我希望以本机方式实现,以减少来自服务器的JSON响应的大小 还是我实现自己解码算法的唯一选择?公共静态列表解码多段线(字符串多边形){ public static Lis
_p~iF~ps|U_ulLnnqC_mqNvxq`@
我知道有可能使用,但由于我使用的是Mapbox,我不希望在我的项目中有任何Google依赖项(此外,我不允许这样做)
地图盒是否为移动SDK提供相同的功能?我看到他们为JavaScript
提供了一些功能,但我希望以本机方式实现,以减少来自服务器的JSON
响应的大小
还是我实现自己解码算法的唯一选择?公共静态列表解码多段线(字符串多边形){
public static List<LatLng> decodePolyLines(String poly){
int len = poly.length();
int index = 0;
List<LatLng> decoded = new ArrayList<LatLng>();
int lat = 0;
int lng = 0;
while (index < len){
int b;
int shift = 0;
int result = 0;
do{
b = poly.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = poly.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
}while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >>1));
lng += dlng;
decoded.add(new LatLng(
lat / 100000d,
lng / 100000d
));
}
return decoded;
}
int len=多边形长度();
int指数=0;
已解码列表=新建ArrayList();
int-lat=0;
int lng=0;
while(指数>1):(结果>>1));
lat+=dlat;
移位=0;
结果=0;
做{
b=多边形字符(索引++)-63;
结果|=(b&0x1f)=0x20);
int-dlng=((结果&1)!=0?~(结果>>1):(结果>>1));
液化天然气+=液化天然气;
已解码。添加(新板条)(
lat/100000d,
液化天然气/100000天
));
}
返回解码;
}
您可以使用此功能解码多段线并创建板条列表。Mapbox提供与的一部分相同的功能。例如,您可以在不依赖Google的情况下执行以下操作:
List<Position> path = PolylineUtils.decode(
"_p~iF~ps|U_ulLnnqC_mqNvxq`@", Constants.GOOGLE_PRECISION);
List path=PolylineUtils.decode(
“_p~iF~ps|U ullnqc_mqNvxq`@”,常量。谷歌精度);
此外,由于精度是可配置的,因此也可以将相同的方法应用于其他编码多段线,例如来自OpenStreetMap的多段线
有关更多示例,您可以