在Android Google地图中将多段线与道路边缘对齐

在Android Google地图中将多段线与道路边缘对齐,android,google-maps,google-polyline,Android,Google Maps,Google Polyline,我在网上看到了这个 因此,我确认在谷歌地图中,在一条路径中的两条不同的多段线中填充两条线是可能的 为了验证这一点,我首先尝试使用以下代码仅添加一条多段线: public static void drawEncodedPolyOnMap(String encoded, GoogleMap map) { List<LatLng> points = new ArrayList<>(); int index = 0, len = encoded.length();

我在网上看到了这个 因此,我确认在谷歌地图中,在一条路径中的两条不同的多段线中填充两条线是可能的

为了验证这一点,我首先尝试使用以下代码仅添加一条多段线:

public static void drawEncodedPolyOnMap(String encoded, GoogleMap map) {
    List<LatLng> points = new ArrayList<>();
    int index = 0, len = encoded.length();
    int lat = 0, lng = 0;
    while (index < len) {
        int b, shift = 0, result = 0;
        do {
            b = encoded.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 = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lng += dlng;
        LatLng p = new LatLng((((double) lat / 1E5)),
            (((double) lng / 1E5)));
        points.add(p);
    }

    map.addPolyline(new PolylineOptions().width(7).color(Color.RED).geodesic(true).addAll(points));
}
publicstaticvoid-drapencodeploynmap(字符串编码,谷歌地图){
列表点=新的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));
增加(p);
}
addPolyline(新的PolylineOptions().width(7).color(color.RED).测地线(true).addAll(points));
}
但它并没有给我我所期望的展示

基本上,在我的例子中,即使标记位于道路边缘,多段线也会居中对齐,这种情况我不喜欢发生


有可能在Android中将多段线与标记对齐吗?如何对齐?

似乎没有人回答,我刚刚找到了一种方法

基本上,我只是更新了我的DrawencodePolyNMAP,将填充添加到由
位移位返回的原始
LatLng
。下面是代码

public static void drawEncodedPolyOnMap(String encoded, GoogleMap map, boolean type) {
    List<LatLng> points = new ArrayList<>();
    int index = 0, len = encoded.length();
    int lat = 0, lng = 0;
    while (index < len) {
        int b, shift = 0, result = 0;
        do {
            b = encoded.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 = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lng += dlng;
        double newLat = (((double) lat / 1E5));
        double newLng = (((double) lng / 1E5));

        if(type){
            points.add(new LatLng(newLat+PADDING_LAT, newLng+PADDING_LNG));
        }else{
            points.add(new LatLng(newLat-PADDING_LAT, newLng-PADDING_LNG));
        }
    }

    map.addPolyline(new PolylineOptions().width(7).color((type)?Color.RED:Color.GREEN).geodesic(true).addAll(points));
}
publicstaticvoid-drapencodeploynmap(字符串编码,GoogleMap映射,布尔类型){
列表点=新的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));
液化天然气+=液化天然气;
双新纬度=((双)纬度/1E5));
双新液化天然气=((双)液化天然气/1E5));
如果(类型){
添加(新板条(新板条+填充板条,新板条+填充板条));
}否则{
添加(新板条(新板条-填料板条,新板条-填料板条));
}
}
addPolyline(新的PolylineOptions().width(7).color((type)→color.RED:color.GREEN).测地线(true).addAll(points));
}
就这样,问题解决了