UTM和经纬度坐标的转换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
位置服务 —— 包括基于 GPS 的导航系统和地图站点(如 Google Maps 和 Yahoo! Maps)—— 现在深受客户 欢迎。很多企业已经利用了某些位置感知服务,而更多的用户将加入到这个行列中来,因为他们已认识到该 服务带来的优势和潜能。在 2006 年,Garter 就曾表示,“位置感知服务在未来两到五年内将成为主流”,并且 已经有 “越来越多的组织部署了位置感知移动业务应用程序。”(请参阅 参考资料,获得该报告的链接)。
一共有 20 个 UTM 纬度区,每个区的南北跨度为 8°;使用字母 C 到 X 标识(其中没有字母 I 和 O)。A、B、Y、Z 区不在系统范围以内;它们覆盖了南极和北极区。两个非标准的经度区:32V 区被扩展为 覆盖整个挪威的南部,而 31V 区被缩小,所以只覆盖了一片汪洋大海。
UTM 坐标的表示格式为:经度区纬度区以东以北,其中以东 表示从经度区的中心子午线的投影距离,而以北 表示距离赤道的投影距离。这个两个值的单位均为米。举例来说,使用 UTM 表示经/纬度坐标 61.44,25.40 的结果就是 35 V 414668 6812844;而经/纬度坐标 -47.04,-73.48 的表示结果为 18 G 615471 4789269。
private class LatZones { //include methods to determine latitude zones //..implementation omitted }
下一节将进一步探讨经纬度与 UTM 之间的转换。
将经纬度转换为 UTM
将经纬度坐标转换为 UTM 坐标需要使用 String latLon2UTM(double latitude, double longitude) 方法。该方法 的实现创建了一个新的内部类 LatLon2UTM c = new LatLon2UTM(); 实例,并将 UTM 坐标返回为由 15 个字 符组成的字符串(即精度为 1 米)。LatLon2UTM 方法的实现如清单 2 所示:
private class LatLon2MGRUTM extends LatLon2UTM { public String convertLatLonToMGRUTM(double latitude, double longitude) { //..implementation omitted } //..implementation omitted }
转换后的 DD 格式的坐标为 -47.04 和 -73.48。
在经纬度和 UTM 坐标之间进行转换
十进制坐标可通过一个六分仪和一个记时计确定,与此不同的是,必须通过计算才能确定 UTM 坐标。虽然这 些计算无非是最基本的三角形和代数计算,但是所使用的公式非常复杂。如果您阅读了 “The Universal Grids: Universal Transverse Mercator (UTM) and Universal Polar Stereographic (UPS)”(参阅 参考资料 获得链 接),就知道它有多复杂了。
lat dd=61 lat mm.gg=60*0.44=26.4 lat ss=60*0.4=24
以及: lon dd=25 lon mm.gg=60*0.40=24.0 lon ss=60*0.0=0
因此,转换为 DMS 格式的坐标变成了 61°26'24''N 25°24'00''E。
将 DMS 转换为 DD 格式的公式如下所示:
在十进制角度和度/分/秒格式之间进行转换
DD 和 DMS 坐标格式之间的转换非常简单。下面给出了 DD 到 DMS 的转换公式:
DD: dd.ff DMS: dd mm ss
dd=dd mm.gg=60*ff ss=60*gg
这里的 gg 代表计算的小数部分。负纬度表示位于南半球(S)的位置而负经度表示西半球(W)的位置。例 如,假设您具有一个 DD 格式的坐标 61.44,25.40。按照下面的公式将其转换:
private class MGRUTM2LatLon extends UTM2LatLon { public double[] convertMGRUTMToLatLong(String mgrutm) { //..implementation omitted } //..implementation omitted }
统一横轴墨卡托投影
UTM 坐标系统使用基于网格的方法表示坐标。UTM 系统将地球分为 60 个区,每个区基于横轴墨卡托投影。 绘图法中的地图投影方法可以在平面中表示一个两维的曲面,例如一个标准地图。
UTM 经度区范围为 1 到 60;其中 58 个区的东西跨度为 6°(稍后详细讨论另外两个区)。经度区涵盖了地 球中纬度范围从 80°S 到 84°N 之间的所有区域。
轻松实现坐标转换(UTM和经纬度坐标的转换) 2008-01-16 19:15 来源:developerWorks 中国
很多流行的应用程序可以提供基于位置的服务,但是计算机如何识别真实世界中的位置呢?很多方法都涉及 到地理坐标系统,并且在实际应用中存在不同的此类系统。在本文中,应用程序架构师 Sami Salkosuo 演示 了使用 Java™ 代码在两种流行的系统之间转换位置数据:人们较为熟悉的经纬度系统和统一横轴墨卡托投影 (Universal Transverse Mercator)系统。
当企业决定实现某种位置感知应用程序时,编写此类应用程序的任务最终都落在开发人员的身上。构建位置 感知服务涉及多种任务,或大或小,其中一项任务(相对较小)可能要将一种系统坐标转换为另一种系统坐 标。本文将演示执行此类转换的代码,从而帮助您节省大量的工作。
两种不同的坐标系统
在详细研究本文代码之前,首先需要讨论即将处理的代码所属的坐标系统:较为熟悉的经纬度系统和统一横 轴墨卡托投影系统(Universal Transverse Mercator,UTM)。我们还要提到以 UTM 为基础的军事格网参考 系 (MGRS)。
本文没有给出 UTM 转换公式,但是可从下面一节中给出的源代码中窥探一二,更多信息请参阅 参考资料 提 供的链接。
使用 Java 代码转换坐标
本节介绍了执行坐标转换(十进制角度和 UTM)的库类的源代码。该 Java 类名为 com.ibm.util.CoordinateConversion;其思想是构建一个提供转换方法的类。该类包含实际执行转换的内部 类;如果需要的话,可以从 CoordinateConversion 类中重构内部类,从而创建一个库包或向现有包添加类。 该类执行的转换精度低于 1 米。
private class LatLon2UTM { public String convertLatLonToUTM(double latitude, double longitude) { //..implementation omitted } //..implementation omitted }
DD: dd.ff DMS: dd mm ss
dd.ffwk.baidu.comdd + mm/60 + ss/3600
注意,南半球(S)的位置为负纬度,西半球(W)位置为负经度。
现在将 DMS 格式坐标 47°02'24''S 和 73°28'48''W 转换为 DD 格式的坐标:
lat dd.ff= - (47 + 2/60 + 24/3600 )=-47.04 lon dd.ff= - (73 + 28/60 + 48/3600)=-73.48
军事格网参考系
MGRS 是北约(NATO)军事组织使用的标准坐标系统。MGRS 以 UTM 为基础并进一步将每个区划分为 100 km × 100 km 的小方块。这些方块使用两个相连的字母标识:第一个字母表示经度区的东西位置,而第二个 字母表示南北位置。
例如,UTM 点 35 V 414668 6812844 等价于 MGRS 点 35VMJ1466812844。该 MGRS 点精度为米,使用 15 个字符表示,其中最后 10 个字符表示指定网格中的以东和以北的值。可以使用 15 个字符表示 MGRS 值(如 前例),也可表示为 13、11、9 或 7 个字符;因此,所表示的值的精度分别为 1 米、10 米、100 米、1,000 米或 10,000 米。
清单 1. CoordinateConversion
public class CoordinateConversion {
public CoordinateConversion() {
}
public double[] utm2LatLon(String UTM) { UTM2LatLon c = new UTM2LatLon(); return c.convertUTMToLatLong(UTM); }
经纬度系统
经纬度系统可能是最为人熟知的地理坐标设计方法。它使用两个数值表示位置。纬度 表示从地球中心到地球 表面东西方向线之间的角度。经度 指从地球中心到地球表面南北方向线之间的角度。经纬度可以表示为十进 制角度(DD),或表示为度、分、和秒(DMS);后者的格式可表示为诸如 49°30'00" S 12°30'00" E。这是 GPS 设备使用的典型格式。
public String latLon2UTM(double latitude, double longitude) { LatLon2UTM c = new LatLon2UTM(); return c.convertLatLonToUTM(latitude, longitude);
}
//..implementation omitted
CoordinateConversion 的源代码包含大约 750 行代码,因此本文没有全部显示。以下小节描述了有关方法, 本文的 下载 小节中附带了完整的源代码。
CoordinateConversion
CoordinateConversion 是主类,它被实例化为在需要是执行坐标转换。清单 1 展示了相关的公共方法,以及 CoordinateConversion 类中包含的私有内部类:
private class UTM2LatLon { public double[] convertUTMToLatLong(String UTM) { //..implementation omitted } //..implementation omitted }
private class Digraphs { //used to get digraphs when doing conversion between //lat/long and MGRS //..implementation omitted }
地球以赤道(0° 纬线)为界,分为南半球和北半球,又以 0° 经线(从南极到北极的假想线,通过英国的格 林威治市)为界分为东西半球。北半球的纬度从 0 度到 90 度,而南半球的纬度从 0 度到 -90 度。东半球的 经度范围从 0 度到 180 度,西半球的经度范围为 0 度到 -180 度。
举例说明,坐标 61.44,25.40(使用 DD 单位)或 61°26'24''N,25°23'60''E(使用 DMS 单位)位于芬兰南 部。坐标 -47.04, -73.48(使用 DD 单位)或 47°02'24''S,73°28'48''W(使用 DMS 单位)位于智利南部。
本文并未对 MGRS 进行详细说明,但是本文的下载代码包含了经纬度坐标和 MGRS 坐标之间的转换。
坐标转换
确定地球上某个位置的经度和纬度坐标的最低需求是,你至少能够看到星星和太阳,并具备一个六分仪和能 够显示 GMT 时间的时钟 T。根据空中某个物体与地平线之间的角度可以确定纬度,然后根据地球旋转计算出 经度。本文并未详细讨论这些细节(想要了解更多请参阅 参考资料),相反,我们假设您已经具有 DD、DMS 或 UTM 格式的坐标。
相关文档
最新文档