首先
下面說明了對此類有符號值進行編碼的步驟
取初始有符號值
將其取十進制值乘以
將十進制值轉換為二進制值
變換二進制值
如果原來的十進制值是負數
將該二進制值分為
將這些
如果後面還有一個位塊
將每個值轉換為十進制
將每個值加上
將每個值轉換為其對應的 ASCII 字符
`~oia@
下表顯示了編碼點的一些示例
示例
點
緯度 經度 E
編碼折線
自己寫的Java代碼如下(參考了一個網上流傳的C語言版本
private String encode(double point) {
//取十進制乘以
int _point_int = (int) (point*
//對二進制低位補
_point_int = _point_int<<
//如果原來的數是負數則求反
if( point <
_point_int = ~_point_int;
}
String resultString =
while ( _point_int>>>
int _block = _point_int&
_block = (_block|
char _result = (char) _block;
resultString +=_result;
_point_int = _point_int>>>
}
resultString += (char)(_point_int+
return resultString;
}
private String encodeLatLng(double lat
String _lat = this
String _lng = this
return _lat+_lng;
}
private String encodeLatLng(String lat
double _lat = Double
double _lng = Double
return this
}
private String encodeLine(String line) {
String [] _points = null;
String _result =
BigDecimal _lat_temp = new BigDecimal(
BigDecimal _lng_temp = new BigDecimal(
_points = line
for (String _point : _points) {
String [] _latlng = _point
BigDecimal _lat = BigDecimal
BigDecimal _lng = BigDecimal
double _lat_disp = _lat
double _lng_disp = _lng
_result += this
_lat_temp = _lat;
_lng_temp = _lng;
}
return _result;
}
其中encode(double)這個函數是實現的折線編碼算法
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25720.html