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

我想在Android和iOS上解码多行字符串()

例如:

    _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的多段线

有关更多示例,您可以