知识大全 Google MAP编码折线算法的Java实现
Posted 知
篇首语:黄沙百战穿金甲,不破楼兰终不还。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Google MAP编码折线算法的Java实现相关的知识,希望对你有一定的参考价值。
Google MAP编码折线算法的Java实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
首先 在Google API上所描述的算法如下
下面说明了对此类有符号值进行编码的步骤
取初始有符号值
将其取十进制值乘以 e 并取整
将十进制值转换为二进制值 请注意负值必须求反 并以值填充字节边界
变换二进制值
如果原来的十进制值是负数 则对以下编码求反
将该二进制值分为 位一组的块(从右侧开始):
将这些 位一组的块倒序放置
如果后面还有一个位块 则将每个值与 x 进行 或 操作 (OR)
将每个值转换为十进制
将每个值加上
将每个值转换为其对应的 ASCII 字符
`~oia@
下表显示了编码点的一些示例 将编码显示为距离原来点的一系列偏移值
示例
点 ( ) ( ) ( )
纬度 经度 E 表示的纬度 E 表示的经度 纬度变化 经度变化 编码后的纬度 编码后的经度 编码点
+ _p~iF ~ps|U _p~iF~ps|U
+ _ulL nnqC _ulLnnqC
+ _mqN vxq`@ _mqNvxq`@
编码折线 _p~iF~ps|U_ulLnnqC_mqNvxq`@
自己写的Java代码如下(参考了一个网上流传的C语言版本 但是那个版本里面对第 条描述的理解有误 即encode(double)这个函数里的while的退出条件)
private String encode(double point)
//取十进制乘以 e
int _point_int = (int) (point* e );
//对二进制低位补
_point_int = _point_int<< ;
//如果原来的数是负数则求反
if( point < )
_point_int = ~_point_int;
String resultString = ;
while ( _point_int>>> > ) //如果位块后面还有一个位块
int _block = _point_int& x F;//将二进制数分为 位一组的块 倒序处理
_block = (_block| x )+ ;
char _result = (char) _block;
resultString +=_result;
_point_int = _point_int>>> ;
resultString += (char)(_point_int+ );
return resultString;
private String encodeLatLng(double lat double lng)
String _lat = this encode(lat);
String _lng = this encode(lng);
return _lat+_lng;
private String encodeLatLng(String lat String lng)
double _lat = Double parseDouble(lat);
double _lng = Double parseDouble(lng);
return this encodeLatLng(_lat _lng);
private String encodeLine(String line)
String [] _points = null;
String _result = ;
BigDecimal _lat_temp = new BigDecimal( );
BigDecimal _lng_temp = new BigDecimal( );
_points = line split( ; );
for (String _point : _points)
String [] _latlng = _point split( );
BigDecimal _lat = BigDecimal valueOf(Double parseDouble(_latlng[ ]));
BigDecimal _lng = BigDecimal valueOf(Double parseDouble(_latlng[ ]));
double _lat_disp = _lat subtract(_lat_temp) doubleValue();
double _lng_disp = _lng subtract(_lng_temp) doubleValue();
_result += this encodeLatLng(_lat_disp _lng_disp);
_lat_temp = _lat;
_lng_temp = _lng;
return _result;
cha138/Article/program/Java/hx/201311/25720
相关参考
JavaMap遍历方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java代码 Mapma
javascript实现的java里的Map对象 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java中怎样遍历Map的所有的元素 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JDK中
Java中的Set,List,Map的区别 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对JA
Java中怎么遍历map中value值 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! //两种方
对Java提供的两个Map进行的性能测试 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对jav
对Java提供的两个Map进行了性能测试 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对jav
知识大全 Java.until.Map,Set,List的资料整理
Java.until.Map,Set,List的资料整理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 JAVA中的容器 list vector set map
JAVA中的容器listvectorsetmap 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Java那些事儿 - JavaOne 2011、CDI和Google Dart语言
Java那些事儿-JavaOne2011、CDI和GoogleDart语言 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我