Java GIS 坐标类






3.40/5 (3投票s)
这是一个 JAVA 类,可以在您的程序中表示 GIS 坐标,并允许您根据给定的距离和方向“移动”或转换坐标。
引言
本文介绍 GISCoordinate.java
- 一个类,允许您以十进制度数 (例如 38.4443, 122.33433)、分度数 (33 44 22E, 122 33 44N) 或弧度度数在您的 JAVA 代码中表示 GIS 坐标。 此外,您可以使用此类来操作坐标,通过给定英尺为单位的距离和行进方向来将其在地球上移动。 然后,您可以提取行进后计算出的新坐标。
背景
在我的一个应用程序中,我必须能够将位图地图上绘制的数据导出到 GIS 软件。 我意识到我需要一些类来表示 GIS 坐标并允许我操作(移动)它。 这里的复杂之处在于,要使用现有坐标、行进方向和行进距离生成新坐标,需要考虑到地球是圆的,而不是平的,并且它的圆形度没有由任何标准几何形状定义。 因此,您可以为此计算使用各种公式,具体取决于您认为地球的形状是什么。 通用方法包括
- 球体
- WGS84/NAD83/GRS80
- Clarke (1866)/NAD27
- 国际
- 克拉索夫斯基
- 贝塞尔 (1841)
- WGS72
- WGS66
- FAI 球体
此处提供的类允许您
根据以度分格式或十进制度数(例如 37:55:15N , 122:20:59W 或它们的十进制等效值)给出的一组坐标来构造自身。
将坐标移动任意英尺数并向任何方向(0-360 度)移动,并使新的纬度和经度自动更新到新位置。 移动的计算将使用从上述 9 种方法中选择的方法来完成。
以十进制度数或度分秒打印纬度和经度。
致谢:我的代码基于 Ed Williams 提供的 JavaScript 代码:http://williams.best.vwh.net/gccalc.htm,当然,必须在 Java 中完全重写并包装在一个漂亮的面向对象的包装器中。
Using the Code
GISCoordinate.java
确实有一个 main
方法,用于举例说明该类的用法。 基本上,这里有一些指针
您通常按如下方式实例化该类
GISCoordinate g = new GISCoordinate("37:55:15","N","122:20:59","W");
这为您提供了一个表示 GIS 坐标的对象
- 经度:北纬 37 度 55 分 15 秒
- 纬度:西经 122 度 20 分 59 秒
要查看它在十进制度数中的表示
g.printDEGDEC(System.out);
然后,您可以将坐标移动到任何方向和任何距离
double movedist=2640;//5280.0;
double movedeg=167;
System.out.println("Moving "+movedist+" Feet, in a direction of "+movedeg+" degrees...");
g.move(movedist, movedeg, NAD83);
请注意,movedist
是要移动的距离(以英尺为单位)(在本例中为半英里),而 movedeg
是移动的角度(从 0-360,因此这将是东南方向)。 另请注意,选择了 NAD83 方法,该方法假定地球具有某种形状。 当然,也可以使用上述 9 种方法中的另一种。 查看类实现开始时声明的常量,以查看您可以选择的不同变量的名称。
可以再次打印新位置
g.printDEGDEC(System.out);
演示程序包含在实际类中。 要编译和运行演示程序
- 将 zip 文件(附加到本文)内容解压到 c:\temp 中,同时保留 zip 目录结构。
- 打开 cmd 并 cd 到 temp 中。 然后在命令行上发出
javac com\ha\common\gis\*.java
- 然后,要运行演示,请在命令行上发出
java -classpath c:\temp\ com.ha.common.gis.GISCoordinate
要在您的代码中使用此类,您可以修改包名称以适合您的包方案,并按照 main()
方法中的示例调用它。
历史
- 初始版本:2004 年 6 月 24 日