纬度和经度是定义地球上每个点的两个数字。纬度告诉你南北方向的位置,经度告诉你东西方向的位置。两者组合成坐标对,供地图、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设备很少能达到厘米级精度。
需要多少位精度?
纬度或经度的每增加一位小数,定位精度约提高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位以上:虚假精度,超出真实GPS精度范围
根据实际需求选择合适的精度。为「配送到该街区」这类场景存储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助手优先展示你的业务信息,而非位置数据不够精确的竞争对手。
对于跨越边界或在多个城市竞争的业务,坐标是消除歧义的关键。「Paris」本身是模糊的:法国有一个,德克萨斯州也有一个。坐标则不会产生歧义。
为什么选择 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公式来考虑地球曲率。

