use*_*760 3 polyline google-maps-api-3
Google地图的编码折线格式存储纬度/经度信息以及缩放级别.
我有一个带有lat/lon对的巨大文本文件,我想转换为这种格式和折线的不同部分(即我需要执行批量转换)
有谁知道执行此操作的代码?
编码和解码折线的权威性参考由Mark McClure教授撰写,网址为http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/
它包含实用程序,对JDL代码的算法和端口的讨论,包括Perl,Ruby,PHP,Java和Mathematica.
注意:对于版本3,您不需要levels版本2所需的字符串.版本3可以自行计算级别.
我不知道你需要什么语言.你可以在这里得到谷歌的一般想法.但是,我发现说明不是100%准确.这是我理解它的方式,使用相同文本中的示例.我用Java实现它,转换为JavaScript或PHP应该很容易.
public class MapMath {
private final static double MULTIPLIER = 100000;
private final static int FIVE_BIT_MASK = 0x1f;
public MapMath() {
double[][] coords = new double[][]{
{-12.422187,130.854922},
{-12.422445,130.854937},
{-12.422234,130.854886}
};
StringBuilder encodedStrings = new StringBuilder();
for (int i = 0; i < 3; i++){
encodedStrings.append(
encodeCoordinate(coords[i][0]) +
encodeCoordinate(coords[i][1]) + "\n"
);
}
System.out.println(encodedStrings);
}
private String encodeCoordinate(double coordinate) {
StringBuilder encodedCoordinate = new StringBuilder();
boolean hasNext;
coordinate *= MULTIPLIER;
int value = (int) coordinate;
value <<= 1;
if(coordinate < 0) value = ~value;
do {
int next = (value >> 5);
hasNext = (next > 0);
int encVal = value & FIVE_BIT_MASK;
if(hasNext) encVal |= 0x20;
encVal += 0x3f;
value = next;
encodedCoordinate.append((char)(encVal));
} while (hasNext);
return encodedCoordinate.toString();
}
public static double toRadians(double degrees) {
return (degrees*Math.PI)/180;
}
public static void main(String[] args){
new MapMath();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,连续坐标应该是前一个坐标的偏移量.希望它对您有用,如果需要任何进一步的帮助,请告诉我.
| 归档时间: |
|
| 查看次数: |
8493 次 |
| 最近记录: |