gpt4 book ai didi

java - 将纬度和经度的折线编码为ascii值

转载 作者:行者123 更新时间:2023-11-30 04:59:46 25 4
gpt4 key购买 nike

任何人都可以使用代码将折线(数组)纬度和经度值编码为 java 中的 ascii 字符串

例如

我的数组是用java编写的

latlng{
{22296401,70797251},
{22296401,70797451},
{22296401,70797851}
}

上面的值以 GeoPoint 类型存储到 List 对象中

List<GeoPoint> polyline

并且想像这样转换成ascii字符串

a~l~Fjk~uOwHJy@P

我需要接受 latlng 值数组并返回 ascii 字符串的方法任何帮助将不胜感激提前致谢

最佳答案

我从 this post 得到了答案

需要这两个函数将折线数组编码为 ascii 字符串

private static String encodeSignedNumber(int num) {
int sgn_num = num << 1;
if (num < 0) {
sgn_num = ~(sgn_num);
}
return(encodeNumber(sgn_num));
}

private static String encodeNumber(int num) {

StringBuffer encodeString = new StringBuffer();

while (num >= 0x20) {
encodeString.append((char)((0x20 | (num & 0x1f)) + 63));
num >>= 5;
}

encodeString.append((char)(num + 63));

return encodeString.toString();

}

为了进行测试,请尝试使用 this 中的坐标站点并比较输出

这是片段

StringBuffer encodeString = new StringBuffer();

String encode = Geo_Class.encodeSignedNumber(3850000)+""+Geo_Class.encodeSignedNumber(-12020000);
encodeString.append(encode);
encode = Geo_Class.encodeSignedNumber(220000)+""+Geo_Class.encodeSignedNumber(-75000);
encodeString.append(encode);
encode = Geo_Class.encodeSignedNumber(255200)+""+Geo_Class.encodeSignedNumber(-550300);
encodeString.append(encode);

Log.v("encode string", encodeString.toString());

从坐标链接中您可以得到这一点

Points: (38.5, -120.2), (40.7, -120.95), (43.252, -126.453)

好吧,现在你认为坐标是为什么当你得到新坐标时看到的不同然后你从前一个坐标中减去

1. 3850000,-12020000 => 3850000,-12020000
2. 4070000,-12095000 => (4070000 - 3850000),(-12095000 - -12020000) => +220000, -75000

您必须将该值传递给encodeSignedNumber() 方法,然后您将获得该坐标的ascii 值

等等......

关于java - 将纬度和经度的折线编码为ascii值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7228379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com