Flex 中google map 多边形的编码折线

google map中Polygon提供了一个静态方法fromEncoded来生成polygon。。最要命的就是要通过什么编码折线将经纬度换算成Base64的ASCII,http://code.google.com/intl/zh-CN/apis/maps/documentation/utilities/polylinealgorithm.html这个是官方的编码方法,其实就是将double换成字符,省掉几个字节,这时的经纬度的精度已经变了。。现在的机器应该能够承受这几个字节吧。

现在看一下AS编码算法

private function CreateEncode(point:Number):String
{
var p:int = int(point*100000);
p = p<<1;
if(p<0)
p = ~p;
var rs:String = "";  
while(p>=0x20)
{
var block:int = p & 0x1F;
block = (block | 0x20) + 63;
rs += String.fromCharCode(block);
p = p >>> 5;  
}
rs += String.fromCharCode(p+63);
return rs;
}
private function EncodeLatLng(latlng:LatLng):String
{
var lat:String = CreateEncode(latlng.lat());
var lng:String = CreateEncode(latlng.lng());
return lat+lng;
}

计算出一个经纬度的编码,

private function EncodePolygon(arr:Array,polygonopt:PolygonOptions = null):Polygon
{
var s:String = "";
var next:LatLng;
var level:String="";
for(var i:int=0;i<arr.length;i++)
{
if(i==0)
{
s += EncodeLatLng(arr[0]);
}
else
{
s += EncodeLatLng(new LatLng(arr[i].lat()-next.lat(),arr[i].lng()-next.lng()));//第一个是经纬度的编码,后面的是偏移量的编码
}
next = arr[i];
level+="P";//级别编码
}
var en:EncodedPolylineData = new EncodedPolylineData(s,2,level,18);
var polygon:Array = [];
polygon.push(en);
return Polygon.fromEncoded(polygon,polygonopt);
}

这个函数是将经纬度的数组画成一个polygon,返回一个polygon。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值