GIS服务中编写纬度和经度元组的首选顺序

181

3
您可以查看一组案例,而不是首选顺序:http://www.macwright.org/lonlat/ - golimar
3
顺序应为纬度,经度 - onmyway133
2
我投票关闭此问题,因为它与编程无关,而是与地理有关。这也是一个基于观点的问题。 - TylerH
3
感谢您的投票@TylerH - 如果您阅读答案,您会发现有几个技术规格回答了这个问题。因此,虽然每个人都有自己的观点,但软件行业应该遵循标准,这些标准有其选择某种方法或另一种方法的理由。事实上,过去让这个东西变成有争议的或不关乎编程已经导致了很多错误,这就是为什么坚持遵循标准更好的原因。 - Mikko Ohtamaa
1
@MikkoOhtamaa 的问题与要求特定技术规范所需的顺序无关(这很可能和请求离线文档信息一样不适合讨论),而是询问“通常”应该使用哪种方法。偏好因所问之人以及用途或背景的不同而异。正如此处的答案所显示的那样,两种排序均有大量支持者。因此,程序关系问题仍未得到完全解决。 - TylerH
显示剩余7条评论
9个回答

260

EPSG:4326明确规定了坐标顺序应该是纬度、经度。许多软件包仍在使用经度、纬度的排序方式。这种情况对项目截止日期和程序员的精神状态造成了难以想象的破坏。

最好的建议是要充分了解您软件堆栈中每个组件的预期轴序。PostGIS使用lng/lat。WFS 1.0使用lng/lat,但WFS 1.3.0遵循标准使用lat/lng。GeoTools默认为lat/lng,但可以通过系统属性进行覆盖。

关于这个问题的历史和说明,GeoTools文档值得一读: http://docs.geotools.org/latest/userguide/library/referencing/order.html


8
在SO.com上我很少看到像这样解释清楚的答案,说明了为什么会这样。这比那些“因为MongoDB使用它”之类的回答好多了。 - Mikko Ohtamaa
3
您的链接与您的观点不符。在EPSG数据库中,4326映射到具有(纬度、经度)轴顺序的地理CRS。然而,在该领域中,大多数软件将EPSG:4326解释为具有(经度、纬度)轴顺序的地理CRS,因为传统OGC规范是按照这种方式设计的。 - Aaron McIver
7
"EPSG:4326明确规定坐标顺序应为纬度、经度。许多软件包仍使用经度、纬度的顺序。" 这两句话不完全相同,但意思是一致的。 - Shane
5
如果有人在使用谷歌地图并向其提供KML文件时出现问题,请注意顺序是经度/纬度!没有任何关于KML文件的文档会说明这一点! - Turnerj
2
“KML文件没有文档说明”是不正确的。https://developers.google.com/kml/documentation/kmlreference#point “一个由浮点值组成的单个元组,按顺序包括经度、纬度和高度。” - tmcw
显示剩余4条评论

35
首选顺序按照惯例为纬度、经度。据报道,这可能是由国际海事组织标准化的,详情请见此处。Google在其MapsEarth中也使用此顺序。我记得这个顺序是按照纬度、经度的字母顺序来思考的。

18
除了KML文件外,在其他文件中,坐标是以lat,lng的形式存储的;而在KML文件中,则以lng,lat,alt的形式存储。这可能是因为后者可以转换为x,y,z坐标。 - Wouter van Nifterick

30

在几乎所有专业的GIS应用程序中,以及传统数学中(即 f(x, y, z)),正确的顺序是经度、纬度。GeoJSON标准相当典型和简洁:

The order of elements must follow x, y, z order
(easting, northing, altitude for coordinates in a 
projected coordinate reference system, or longitude,
latitude, altitude for coordinates in a geographic
coordinate reference system).

同样适用于主要的Open Geospatial Consortium标准(WKT和WKB,以及像EWKB这样的扩展)。类似地,Google可能会输出纬度/经度的顺序,以使那些习惯于此种定制的用户更加熟悉(例如从IMO等导航标准而非计算标准中成长的用户)。但KML标准本身就像几乎所有其他GIS系统一样:

The KML encoding of every kml:Location and coordinate
tuple uses geodetic longitude, geodetic latitude, and
altitude (in that order).

有一个很好的经验法则:如果你知道什么是元组并且正在编程,那么应该使用lonlat。我甚至会说,如果你的最终用户(比如飞行员或船长)更喜欢以latlon的形式查看输出结果,那么仍然应该使用这种顺序。如果必要的话,可以在用户界面中切换顺序,但是绝大多数数据(如shapefiles、geojson等)都遵循正常的笛卡尔顺序。


5
我看到这里有一些分歧:我需要做出两个选择,可供选择的选项太多了! - Mikko Ohtamaa
9
读者应该注意,ISO 6709 明确指出在任何 UI 中都应始终使用 [纬度,经度] 格式,这不仅仅是个人喜好的问题。 - Iain Collins
ISO标准仅适用于表单输入,而不适用于存储机制、软件或格式。这是一个方便的摘要:https://macwright.com/lonlat/。 - geira
简单要素、GeoSPARQL和GML规范在这方面非常清晰:几何图形是使用CRS声明的轴顺序进行编码的。虽然存在一些例外,但大多数软件都遵守这些规范。 - Luís de Sousa

10
ISO 6709标准化了经纬度的顺序,将纬度放在经度之前是为了安全考虑。Graham的解释听起来也很正确。有人认为这个答案与问题无关,但它绝对相关,解释了为什么通常按纬度、经度的顺序给出。自从航海家开始使用这个系统以来,就一直这样列出来;现在改变这种方式会很困惑,并且如ISO所建议的那样,可能很危险。像ArcMap这样的GIS软件将它们列在另一种顺序,因为那是x,y坐标对的典型约定。纬度是y,经度是x,这就是Arc列出它们的方式。

https://en.wikipedia.org/wiki/ISO_6709 表示,如果未指定顺序,则应假定为纬度,经度。文档本身表示这在用户界面中非常重要。“坐标序列至关重要。历史传统用法是在经度值之前给出纬度值。海上和航空导航领域以及紧急响应领域的用户习惯于看到以此顺序给出的纬度和经度。如果还提供高度或深度,则跟随经度。以其他顺序呈现坐标值会影响生命安全。” - Dave X
标准的好处在于有很多种...... OP询问了“首选顺序”。ISO 6709字符串甚至不是OP所疑惑的元组(我过去必须解析和生成ISO 6709字符串,而元组更容易)。 - mheyman

9

在“现实生活”中,给定位置时,纬度(即南/北)总是首先给出,例如20°N 56°W(尽管如果考虑标准的笛卡尔坐标系,这不符合通常惯例);同样,维基百科上所有的坐标都遵循这个惯例(例如查看南安普敦的位置:http://en.wikipedia.org/wiki/Southampton)。为了避免混淆,特别是当单位未包含在内时,我建议在元组中始终首先给出纬度。


9

因此,首选顺序取决于个人偏好!

纬度首先出现;春分和秋分作为“太阳穿过赤道的日子”已经被人们知晓了数千年。唯一的问题可能是赤道应该是0度还是90度。通过将其设为0度,赤道上午太阳天顶角与垂直线之间的夹角就是一个地点的纬度,在全球各地都适用。主纬度或主平行线实际上定义了自己。

经度只能通过协议确定。英国提出了经度奖。英国需要知道船在哪里,并需要更好的地图。哈里森(http://www.youtube.com/watch?v=T-g27KS0yiY)制造了精确的海洋钟;他们进行了制图航行旅程,例如詹姆斯·库克在1770年代。因此,英国利用格林威治作为000度的基准线,宣称了本初子午线。在使用了100年后,本初子午线被国际公认于1884年。

在克里斯托弗·哥伦布的时代,纬度是他们唯一拥有的数字。策略是在转向目的地之前穿越一个平行线;观察云或鸟类。每小时用节测量速度很常见,但没有考虑到洋流。也许哥伦布最伟大的成就是四次从西印度群岛回家。如果没有这一点,他发现的土地就不能被添加到地图上。
阅读《经度》(作者:达瓦·索贝尔,ISBN:9780007214228)。

1
我认为他的意思是通过编程和技术参考来实现(但我可能错了)。不过,历史课也很有趣。 - jww
1
这与问题无关,但绝对有趣。谢谢 :) - Mikko Ohtamaa
但这是有道理的,因为如果只使用地图坐标,那么毫无疑问顺序将是经度、纬度,就像X、Y一样;混淆只存在于数百年来在各处说(和听到)纬度、经度的先例。 - Antti Haapala -- Слава Україні
轴的顺序不是个人偏好的问题,它是CRS的一个特征。OGC/ISO的规范非常清晰,只是并非所有软件包都遵循它们。关于冒号,您也有误解,不仅加勒比海的回归与当时其他海上旅行相比不算什么大事,而且15世纪的经度测量精度在坎蒂诺地图中得到了很好的展示。 - Luís de Sousa

8

就我个人而言,我从未见过除了纬度后面跟着经度之外的其他东西。

当使用 + 和 - 代替 N 和 S 时,+ 总是表示 N,- 则表示 S。

在使用 + 和 - 表示 E 和 W 时,我观察到有所变化。通常情况下,+ 表示 E,- 表示 W。然而,在旧应用程序中,它们主要处理 W 经度时,我看到 + 表示 W,- 表示 E。

希望您不必处理那么老的应用程序。


当你使用全球应用程序时,很容易观察到这一点。 - Cayan
1
只需在Google地图中键入任何经度和纬度坐标对,您将看到它将其解释为(long, lat),而不是相反。这是一个非常广泛使用的系统的例子。 - cazort
2
@cazort 由于某种原因,在这里不会发生这种情况。例如,我故乡俄勒冈州尤金市位于北纬44.1度,西经123.1度左右。如果在maps.google.com中输入44.1 -123.1,它会跳转到尤金市。如果我输入-123.1 44,它会告诉我找不到。有趣的是,如果我输入123.1 W 44 N,它会找到尤金市,所以有一定的灵活性。此外,https://www.reference.com/technology/enter-gps-coordinates-google-maps-3de6c79239e4ce0d#似乎表明纬度/经度是首选顺序。另外值得一提的是,Google Earth使用纬度/经度。 - Terry

5
除了已经提到的GeoJSON规范外,还有其他实际情况下建议使用经度和纬度的顺序,甚至是强制性的,例如:MongoDB中的地理空间索引。如果你在那里顺序出错,你的查询将返回错误的结果,就像对一个转置数据集执行的一样。

许多其他示例:WMS、WKT、OpenLayers、Mapbox、Shapefile、Redis,甚至是Google KML(尽管在其地图API中使用lat/lon)。 - geira

1

经度先,纬度后 (lon, lat)。

当投影到墨卡托投影时,经度定义x方向,纬度定义y方向。大多数几何库严格使用(lon, lat)这种格式,因为这是在二维平面中考虑地理坐标最直观的方式。


3
如果这是最直观的想法,那么为什么Google Earth博客叫做“纬度-经度博客”,而在KML中他们使用经度-纬度? - theta
1
基本上,传统上导航器使用纬度-经度的顺序,因此如果您更改了该顺序,可能会破坏您的导航。因此,谷歌正在为博客使用传统方式,并为其数据结构使用二维平面排序。@mkennedy在回答同一问题时给出了最佳答案:http://gis.stackexchange.com/questions/6037/latlon-or-lonlat-whats-the-right-way-to-display-coordinates-and-inputs/6048#6048 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接