You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将经纬度转换为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:35:42