Skip to main content
经度与纬度:GPS坐标的工作原理详解
Guides

经度与纬度:GPS坐标的工作原理详解

纬度表示南北位置,经度表示东西位置。本文解析GPS坐标的原理、生产环境中常见的格式规范,以及导致大量地图bug的坐标顺序混淆问题。

Brent van der Heiden10 min read
#纬度#经度#GPS坐标#wgs84#地理编码#地图API

地球上的每个点都由纬度和经度这两个数字确定。纬度告诉你位置偏南还是偏北,经度告诉你偏东还是偏西。两者组成一对坐标,任何地图、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 公式。

觉得有用?分享给他人吧。

关于作者

Brent van der Heiden

作者

Brent van der Heiden

Co-Founder & CEO at MapAtlas

Brent built MapAtlas out of a conviction that developers deserve location APIs with fair pricing and genuine end-user privacy. Before that he co-founded MapMetrics, a community mapping and navigation app. He writes about geospatial infrastructure, map data, AI search visibility, and how location data powers the products people rely on every day.

查看所有文章 →
返回博客