如何将经纬度转换为iOS ISO 6709:2008格式地理标签?
把
latitude,longitude转成ISO 6709:2008格式(Apple地理标签用) 一、自己写转换逻辑(不用依赖库)
其实这个转换逻辑很简单,不用特意找库,直接写几行代码就能搞定,先明确ISO 6709的格式规则:
- 纬度:带正负号(+是北纬,-是南纬),保留足够小数位即可
- 经度:带正负号(+是东经,-是西经),整数部分要补前导零到3位(比如2.295要写成002.295)
- 最后必须加个
/
直接上Go代码示例:
package main import ( "fmt" "strconv" "strings" ) // ConvertToISO6709 把"纬度,经度"字符串转成Apple要求的ISO 6709格式 func ConvertToISO6709(latLon string) (string, error) { parts := strings.Split(latLon, ",") if len(parts) != 2 { return "", fmt.Errorf("格式不对,得是 latitude,longitude 这种") } lat, err := strconv.ParseFloat(parts[0], 64) if err != nil { return "", fmt.Errorf("纬度无效:%v", err) } lon, err := strconv.ParseFloat(parts[1], 64) if err != nil { return "", fmt.Errorf("经度无效:%v", err) } // 格式化纬度,保留4位小数(可根据你原始数据精度调整) latStr := fmt.Sprintf("%+.4f", lat) // 格式化经度,整数部分补零到3位,保留3位小数(和官方示例对齐) lonStr := fmt.Sprintf("%+07.3f", lon) return fmt.Sprintf("%s%s/", latStr, lonStr), nil } func main() { // 测试示例 input := "48.8577,2.295" result, err := ConvertToISO6709(input) if err != nil { fmt.Println("出错了:", err) return } fmt.Println(result) // 输出就是 +48.8577+002.295/ }
二、可选的Go地理库
如果还需要做其他地理操作(比如坐标合法性校验、计算距离、其他格式互转),可以用这些成熟的库:
golang-geo:支持各种坐标转换、地理计算,拿到标准化的经纬度后再按上面的格式输出就行orb:专注地理空间数据处理,对WGS84坐标系支持很好,处理坐标格式化也很方便
举个golang-geo的简单例子:
package main import ( "fmt" "github.com/kellydunn/golang-geo" ) func main() { lat, lon := 48.8577, 2.295 point := geo.NewPoint(lat, lon) // 还是用之前的格式化逻辑 latStr := fmt.Sprintf("%+.4f", point.Lat()) lonStr := fmt.Sprintf("%+07.3f", point.Lng()) result := fmt.Sprintf("%s%s/", latStr, lonStr) fmt.Println(result) }
要注意的点
- Apple用的是WGS84坐标系,确保你输入的经纬度也是这个标准的
- 小数位数可以自己调整,示例里的位数是跟官方示例一致的,你可以根据原始数据精度改格式化参数
- 转换前最好校验下坐标范围:纬度得在-90到90之间,经度在-180到180之间,避免无效数据
内容的提问来源于stack exchange,提问作者themihai
相关产品推荐
相关产品推荐

