如何在dartlang中使用google.maps.geometry.encoding.decodePath?

时间:2017-05-16 02:21:25

标签: google-maps dart

如何使用该函数解码字符串?

我无法找到本机库的方式

var path = google.maps.geometry.encoding.decodePath(encodedStr);

-----解决方案----

String str = "ern[pd_cMiAa@\q@l@kAPY`Ad@hCnAr@^HOzAaClCgElBsCfBhA";
var decodedPath = encoding.decodePath(str);
var estimate_line = new Polyline(new PolylineOptions()
        ..path = decodedPath
        ..geodesic = true
        ..strokeColor = '#FF0000'
        ..strokeOpacity = 1.0
        ..strokeWeight = 2
        ..map = map
      );

3 个答案:

答案 0 :(得分:2)

使用google_maps包,您可以导入package:google_maps/google_maps_encoding.dart并使用encoding.decodePath(path)。编码是一个可选的js库,您需要在http://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=encoding中使用<script>进行操作。

请参阅the example with encoding library

答案 1 :(得分:2)

我在这里用原生飞镖实现了 供编码参考:https://developers.google.com/maps/documentation/utilities/polylinealgorithm这里说明了编码算法

import 'dart:io';

main()
{
var z="eo~fMzva{Fl|cuTgh~oU~bxjDhpptb@";
print(decode(z)); 
}

/** function to decode the string ****/
List decode(var a)
{
var list=a.codeUnits;
var lList=new List();
int index=0;
int len=a.length;
int c=0;

// repeating until all attributes are decoded
do
{   
    var shift=0;
    int result=0;

    // for decoding value of one attribute
    do
    {
        c=list[index]-63;
        result|=(c & 0x1F)<<(shift*5);
        index++;
        shift++;
    }while(c>=32);
    /* if value is negetive then bitwise not the value */
    if(result & 1==1)
    {
        result=~result;
    }
    var result1 = (result >> 1) * 0.00001;
    lList.add(result1);
}while(index<len);

/*adding to previous value as done in encoding */
for(var i=2;i<lList.length;i++)
    lList[i]+=lList[i-2];
return lList;
}

答案 2 :(得分:0)

您可以使用geo package来编码/解码路径:

import 'package:geo/geo.dart';

void main() {
  var decodedPath = const PolylineCodec().decode(str);
}