我想在Android和iOS上解码多线字符串(reference)。
示例:
_p~iF~ps|U_ulLnnqC_mqNvxq`@
我知道有可能使用google-maps-utils,但由于我使用的是Mapbox,我不想在我的项目中使用任何Google依赖项(此外,我不允许使用)。
Map-box是否为移动SDK提供相同的功能?我看到他们为JavaScript
提供了一些内容,但我希望本机化,以减少来自服务器的JSON
响应的大小。
或者我唯一的选择是实现我自己的解码算法?
答案 0 :(得分:3)
Mapbox提供的功能与Mapbox Android Services的一部分相同。例如,您可以在没有Google依赖项的情况下执行以下操作:
List<Position> path = PolylineUtils.decode(
"_p~iF~ps|U_ulLnnqC_mqNvxq`@", Constants.GOOGLE_PRECISION);
此外,由于精度是可配置的,您也可以将相同的方法应用于其他编码折线,例如来自OpenStreetMap的折线。
有关更多示例,您可以check the tests。
答案 1 :(得分:0)
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;
}
您可以使用此功能解码折线并创建LatLng列表