地球上的每个点都由纬度和经度这两个数字确定。纬度告诉你位置偏南还是偏北,经度告诉你偏东还是偏西。两者组成一对坐标,任何地图、GPS 设备、地理编码 API 或 AI 助手都能据此判断位置。
大多数开发者用坐标时不会多想,直到出了 bug。本文解释这两个值各自测量什么、生产环境中常见的格式约定,以及引发地图 bug 最多的那个错误:经纬度顺序颠倒。
纬度测量什么
纬度是地球表面某点与赤道平面之间的夹角(以度为单位)。赤道为0度,北极点为+90度,南极点为-90度。纬线(也叫纬圈)水平环绕地球,彼此之间的间距处处相同。
无论在地球上什么位置,1 度纬度对应的地面距离始终接近 111 千米。正因为这么稳定,从航线规划到气候科学,纬度都很好用。
经度测量什么
经度是某点与本初子午线之间的夹角,本初子午线即穿过英国伦敦格林威治的0度经线。经度从-180度(西)到+180度(东)。这两个值在地球另一侧的反子午线上相遇,国际日期变更线大部分就沿着这条线。
与纬度不同,1度经度对应的地面距离因位置而异。在赤道处约为111千米,与纬度相同;在赫尔辛基约为56千米;在两极则缩减为零,因为所有经线在此汇聚。
正因为经线会汇聚,在平面地图上计算长距离路线或极地附近的点时才会出错。正确的距离函数使用 Haversine 公式或 Vincenty 公式,把地球曲率考虑在内。
最常见的错误:经纬度顺序颠倒,以及怎样避免
生产环境的地理空间代码里,最常见的错误之一就是把纬度和经度写反。原因是不同格式的约定不同:
- 给人看的显示、地址、GPS 应用:纬度在前。
48.8584, 2.2945表示纬度48.8584、经度2.2945。 - GeoJSON、WKT及大多数地理空间标准:经度在前。
[2.2945, 48.8584]表示同一个点。 - MapAtlas Geocoding API及大多数「v1」REST API:JSON键名中纬度在前(
lat、lng),但各端点的约定不完全一样,请查看对应端点的文档。
如果你从GeoJSON中读取一个要素,然后传给一个期望 [lat, lng] 格式的地图库,就必须调换顺序。忘了这一步,你的点就会落到错误的半球,接下来两天的调试都会耗在「为什么巴黎跑到了非洲海岸外」上。
一条稳妥的规则:凡是接收坐标的函数,参数都要写清楚名字。function distance(latA, lngA, latB, lngB) 比 function distance(a, b)(其中 a 和 b 是模糊的数组)更难用错。
十进制度数与度分秒
代码中最常见的格式是十进制度数(DD):48.8584, 2.2945。所有现代 API 和库都要求这种格式。
你偶尔会遇到度分秒(DMS)格式:48° 51′ 30″ N, 2° 17′ 40″ E。DMS 来自较早的航海和航空传统,至今仍用在官方纸质地图和部分 GPS 硬件上。DMS 转 DD 很简单:DD = 度 + (分 / 60) + (秒 / 3600),南纬或西经取负值。
存储时,保留 5 到 6 位小数的十进制度数就能覆盖所有实际场景。超过 6 位只是看起来精确,因为智能手机GPS在开阔天空下的精度通常在约4.9米以内,只有配合差分改正服务的测量级接收机才能接近厘米级。
需要多少位精度?
纬度或经度每多一位小数,位置精度大约提高 10 倍:
- 0位小数(
48):约111千米,国家级 - 1位(
48.8):约11千米,城市级 - 2位(
48.86):约1.1千米,街区级 - 3位(
48.858):约110米,街道级 - 4位(
48.8584):约11米,建筑级 - 5位(
48.85844):约1米,门口级 - 6位(
48.858445):约11厘米,远超消费级GPS的精度 - 7位以上:对几乎任何真实数据源而言都是虚假精度
按你的实际用途选择精度。为「配送到这个街区」这类场景存 8 位小数,既浪费空间,又会让用户误以为数据非常精确。
坐标与地图投影
坐标本身是地球表面上的角度,但屏幕是平的。每种地图投影都是一个数学函数,把纬度和经度转换成屏幕上显示用的像素 x、y 坐标。
Web Mercator(EPSG:3857)是Google Maps、OpenStreetMap及几乎所有交互式网络地图使用的投影。它保持形状和方向,但会让面积失真:格陵兰岛在地图上看起来与非洲差不多大,但实际上非洲是它的14倍。对生产环境的地图来说,只要用户认得出地点,这种失真就无关紧要。但如果是比较面积的专题地图(人口、选举结果、气候),请改用等面积投影。
你存储的坐标值始终是 WGS84 纬度和经度,投影在渲染时才应用。在数据库里把投影坐标和 WGS84 坐标混在一起,是另一个经典的 bug 来源。
坐标的存储与索引
在大多数数据库中,把纬度和经度存成两个数值列(如果使用PostGIS则用 geometry(point, 4326))。查询边界框内的点,每列建一个 B-tree 索引就够了。做「最近邻」查询则需要空间索引:PostGIS GIST、MySQL SPATIAL或geohash分桶。
把坐标存成字符串(如「48.8584,2.2945」),一到需要过滤、排序或计算距离时就会后患无穷。不要这样做。
AI助手如何使用坐标
现代 AI 助手(ChatGPT、Perplexity、Gemini)和普通应用一样,也通过坐标理解地点。用户问「帮我找附近的咖啡店」时,助手先把用户位置解析成坐标,再查询地点 API,然后按 Haversine 距离给结果排序。在结构化数据里正确标注坐标(JSON-LD 的 geo 属性、GeoCoordinates schema),AI 助手就能拿到明确的位置,不必从文本里猜。
如果你的业务跨越国界,或在多个城市同时竞争,坐标就是消除歧义的关键。「巴黎」有歧义:法国有一个,得克萨斯州也有一个。坐标没有歧义。
为什么选择 MapAtlas
MapAtlas 是面向AI搜索时代构建的欧洲地图平台。每一次地理编码、逆地理编码、等时圈和路线规划调用,都返回顺序一致、干净的 WGS84 坐标,符合 GDPR,并托管在欧盟。试试坐标工具,把任意地址立即转换成经纬度;或者阅读什么是地理编码,深入了解地理编码 API 在生产环境中怎样工作。
常见问题
经度和纬度有什么区别?
纬度表示地球上某点的南北位置(范围从南极点的-90度到北极点的+90度),经度表示东西位置(范围从-180度到+180度,0度为格林威治子午线)。纬线是水平方向延伸的平行圆,彼此保持等距。经线是垂直方向延伸的大圆,向两极汇聚。两个数字组成唯一的一对坐标,可以精确定位地球上的任意位置。
经度和纬度哪个在前?
取决于使用的格式。在给人看的形式(Google Maps、GPS 应用、地址)中,纬度写在前面:48.8584, 2.2945 表示纬度48.8584、经度2.2945。而在GeoJSON等机器可读格式及大多数地理空间标准中,经度在前:[2.2945, 48.8584]。这种顺序差异是生产环境中地图 bug 最常见的来源之一。用之前一定要确认所用格式的约定。
GPS坐标的精度如何?
六位小数(如 48.858444)在赤道上精确到约 11 厘米。五位小数(48.85844)约1米。四位小数(48.8584)约11米,足以满足街道级地图需求。对大多数生产场景来说,6 位已经过头,5 位就足够。存储超出需要的精度,既浪费字节,又会让人误以为数据很精确。
为什么经线在两极汇聚?
纬线彼此平行,因为它们都以地球自转轴为参考。经线则是大圆,全部经过南北两极。向极点移动时,两条经线之间的东西方向距离逐渐缩小:在赤道处,1度经度约为111千米,而在极点处缩减为零。所以在高纬度地区,直接用平面坐标算距离会出错。正确的距离计算要用 Haversine 公式或 Vincenty 公式。

