经纬度转化为xy坐标系_CGCS2000坐标系如何在TransCAD/TransModeler中添加

     TransCAD/TransModeler软件的地图(map)希望以标准的地理坐标经纬度来表示空间位置。如果遇到不同坐标系存储的数据,需要整合到同一个地图上,就需要支持各种坐标系统和地图投影。TransCAD/TransModeler包括百余种坐标系统,支持多种地图投影,可以将不同的坐标系统存储的空间数据的整合。当你拿到一张城市和交通规划CAD图纸时,你肯定会寻思使用什么坐标系和投影导入。很不幸,国内很多城市的坐标系和投影参数是保密的,而且都不一样,会造成一些困惑:一方面无法使用精准的坐标系和投影导入(一般我们可以用Gauss -Kruger高斯-克吕格即横轴墨卡托投影、UTM通用横轴卡托投影导入近似地使用),另一方面现在做区域规划的时候,不同城市的图很难无缝地拼起来。

 国家推出了最新的2000国家大地坐标系,英文名称为China Geodetic Coordinate System 2000,英文缩写为CGCS2000(有关参数等详细信息可网上查看)。例如第三次全国土地调查的成果,就要求用全国统一的CGCS2000坐标系提供。采用2000国家大地坐标系具有科学意义,随着经济发展和社会的进步,我国航天、海洋、地震、气象、水利、建设、规划、地质调查、国土资源管理等领域的科学研究需要一个以全球参考基准为背景的、全国统一的、协调一致的坐标系统,来处理国家、区域、海洋与全球化的资源、环境、社会和信息等问题,需要采用定义更加科学、原点位于地球质量中心的三维国家大地坐标系。

 关于地理坐标系(GeographicCoordinate System)、投影坐标系(Projected Coordinate System)等一些基础知识,在这里就不详细介绍

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java代码示例如下: ```java import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; public class CoordinateConverter { private static final double a = 6378137; // 长半轴 private static final double b = 6356752.3142; // 短半轴 private static final double f = (a - b) / a; // 扁率 private static final double e1 = Math.sqrt(2 * f - f * f); // 第一偏心率 private static final double e2 = Math.sqrt((a * a - b * b) / (b * b)); // 第二偏心率 public static Vector3D convertXYToLatLon(double x, double y) { // 投影坐标转换为大地坐标 double Bf0 = x / a; double Nf0 = (Math.pow(a, 2) / b) / Math.sqrt(1 + Math.pow(e2, 2) * Math.pow(Math.cos(Bf0), 2)); double Mf0 = a * (1 - Math.pow(e1, 2)) / Math.pow(Math.sqrt(1 - Math.pow(e1, 2) * Math.pow(Math.sin(Bf0), 2)), 3); double nf = Math.sqrt(1 + Math.pow(e2, 2) * Math.pow(Math.cos(Bf0), 2)); double etaf = e2 * Math.cos(Bf0); double T1f = Math.pow(Math.tan(Bf0), 2); double C1f = Math.pow(e1, 2) * Math.pow(Math.cos(Bf0), 2); double R = a * (1 - Math.pow(e1, 2)) / Math.pow(Math.sqrt(1 - Math.pow(e1, 2) * Math.pow(Math.sin(Bf0), 2)), 2); double latitude = Bf0 - (Nf0 * Math.tan(Bf0) / Mf0) * (Math.pow(x, 2) / (2 * R)) + (Nf0 * Math.tan(Bf0) / (24 * Mf0 * Mf0 * Mf0)) * ((5 + 3 * T1f + 10 * C1f - 4 * C1f * C1f - 9 * etaf * etaf) * Math.pow(x, 4) / 24 - (61 + 90 * T1f + 298 * C1f + 45 * T1f * T1f - 252 * etaf * etaf - 3 * C1f * C1f) * Math.pow(x, 6) / 720); double longitude = (x / (nf * Mf0 * Math.cos(Bf0)) - (1 + 2 * T1f + C1f) * Math.pow(x, 3) / (6 * nf * nf * nf * Mf0 * Math.pow(Math.cos(Bf0), 3)) + (5 + 28 * T1f + 24 * T1f * T1f + 6 * C1f + 8 * etaf * etaf) * Math.pow(x, 5) / (120 * Math.pow(nf, 5) * Mf0 * Math.pow(Math.cos(Bf0), 5))) / Math.cos(Bf0); return new Vector3D(Math.toDegrees(latitude), Math.toDegrees(longitude), y); } public static void main(String[] args) { double x = 1000000; // x坐标 double y = 2000000; // y坐标 Vector3D latLon = convertXYToLatLon(x, y); System.out.printf("经度:%f, 纬度:%f, 高程:%f", latLon.getY(), latLon.getX(), latLon.getZ()); } } ``` 该代码实现了cgcs2000大地坐标系xy转化为对应经纬度。在代码,首先定义了大地坐标系相关参数,如长半轴、短半轴、扁率、偏心率等。然后通过投影坐标转换为大地坐标的公式,计算出经度、纬度和高程,并将结果返回。在main方法,我们可以指定xy坐标,然后调用转换函数,将结果输出为经度、纬度和高程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值