美文网首页
Android 解析谷歌地图的折线编码

Android 解析谷歌地图的折线编码

作者: itfitness | 来源:发表于2022-07-04 16:16 被阅读0次

    目录

    折线编码算法格式

    Google官网是这么说明的


    实现代码

    使用Java代码对其解析如下所示

    /**
         * 解析成坐标点
         * @param encoded 折线编码
         * @return
         */
    private List<LatLng> getPoints(String encoded){
            List<LatLng> points=new ArrayList<LatLng>();
            List<Barcode.GeoPoint> geoPoints = decodePoly(encoded);
            LatLng ll;
            for(Iterator<Barcode.GeoPoint> gpit=geoPoints.iterator();gpit.hasNext();){
                Barcode.GeoPoint gp=gpit.next();
                double latitude=gp.lat;
                latitude=latitude/1000000;
                double longitude=gp.lng;
                longitude=longitude/1000000;
                ll=new LatLng(latitude, longitude);
                points.add(ll);
            }
            return points;
        }
    
        private List<Barcode.GeoPoint> decodePoly(String encoded) {
            List<Barcode.GeoPoint> poly = new ArrayList<Barcode.GeoPoint>();
            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;
    
                Barcode.GeoPoint p = new Barcode.GeoPoint(1,((double) lat / 1E5) * 1E6,
                        ((double) lng / 1E5) * 1E6);
                poly.add(p);
            }
            return poly;
        }
    

    这里我用的折线编码为:

    "kay~E{w|iUAWAY?GCc@?GIw@Mi@GSEM"
    

    解析后的结果为:


    相关文章

      网友评论

          本文标题:Android 解析谷歌地图的折线编码

          本文链接:https://www.haomeiwen.com/subject/zmidbrtx.html