【坐标转换】地方坐标系转CGCS2000

前言:最近大半年业务方向全面转向CIM数字孪生,发现基础的GIS问题很重要,数据处理同事每天还是会有大量的坐标转换问题。

比如规划设计院的局部CAD路网要叠到城市路网,一般设计院的CAD图纸按照规范都是地方坐标系,城市级别路网一般都是CGCS2000坐标,会存在需要坐标转换的问题。

最准确的方式是去测绘局转下,另外一种借助七参数转换原理自己进行参数估计。

在前面的一篇博文其实就是介绍的解决这个问题的一个工具,这里简单说下使用流程:

基于COORD四参数坐标转换

1、记录3个以上公共点坐标,即同一位置在地方坐标系和CGCS2000坐标系的坐标。

2、计算四参数/ 七参数

在前面一篇博文中写过坐标转换的原理,自己写代码也挺麻,推荐一个小工具叫COORD,也放在了前面博文里。

把公共坐标输入进去以后可以计算转换参数。

3、对CAD文件进行坐标转换

基于计算得到的参数,对所有坐标代入公式计算得到新坐标,代码见前一篇博文。

结语

最近刮起了三维建模的一阵风,包括建筑物、城市道路等建模,一旦模型要落到CIM底座或者3DGIS上,也会面临坐标转换投影的问题,但三维变换会导致整个模型都发生畸变,目前业内还没有太好的解决方案。

二维坐标变换相对比较简单,解决方案很成熟,三维模型的坐标变换才是真正的难题。

WSG84(World Geodetic System 1984)和CGCS2000(中国大地坐标系2000)是两种常用的地理坐标系。在Java中将WSG84换为CGCS2000可以通过使用坐标转换库来实现。 首先,我们需要确定所使用的坐标转换库。Java中有许多开源的坐标转换库可以使用,例如Geotools和Proj4j。这里以使用Geotools为例进行说明。 在使用Geotools进行坐标转换之前,我们需要先导入相关的库文件。可以在Maven项目中的pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>org.geotools</groupId> <artifactId>gt-epsg-hsql</artifactId> <version>24.1</version> </dependency> ``` 接下来,我们可以使用以下代码将WSG84坐标转换CGCS2000坐标: ```java import org.geotools.geometry.DirectPosition2D; import org.geotools.referencing.CRS; import org.opengis.referencing.FactoryException; import org.opengis.referencing.NoSuchAuthorityCodeException; import org.opengis.referencing.crs.CoordinateReferenceSystem; public class CoordinateConversion { public static void main(String[] args) { // 输入的坐标点(WSG84) double longitude = 116.3975; double latitude = 39.9085; // 设置源坐标系(WSG84) CoordinateReferenceSystem sourceCRS; try { sourceCRS = CRS.decode("EPSG:4326"); } catch (NoSuchAuthorityCodeException | FactoryException e) { e.printStackTrace(); return; } // 设置目标坐标系CGCS2000) CoordinateReferenceSystem targetCRS; try { targetCRS = CRS.decode("EPSG:4490"); } catch (NoSuchAuthorityCodeException | FactoryException e) { e.printStackTrace(); return; } // 创建源坐标点 DirectPosition2D sourcePosition = new DirectPosition2D(sourceCRS, longitude, latitude); // 坐标转换 try { DirectPosition2D targetPosition = (DirectPosition2D) CRS.transform(sourcePosition, targetCRS); double targetLongitude = targetPosition.x; double targetLatitude = targetPosition.y; System.out.println("换后的坐标(CGCS2000):"); System.out.println("经度:" + targetLongitude); System.out.println("纬度:" + targetLatitude); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码中,首先设置源坐标系为WSG84(EPSG:4326)和目标坐标系CGCS2000(EPSG:4490),然后创建源坐标点并利用`CRS.transform()`方法进行坐标转换。 运行上述代码后,将输出换后的CGCS2000坐标,包括经度和纬度。 需要注意的是,WSG84和CGCS2000坐标系定义可能因使用的地理坐标转换库而有所不同,可以根据实际情况进行相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值