Java 如何将地理坐标系转换为投影坐标系
时间: 2023-09-27 22:06:22 浏览: 62
Java 中可以使用 Proj4J 库来进行地理坐标系和投影坐标系的转换。以下是一个简单的示例代码:
```java
import org.osgeo.proj4j.CoordinateReferenceSystem;
import org.osgeo.proj4j.LatLng;
import org.osgeo.proj4j.ProjCoordinate;
import org.osgeo.proj4j.Proj4jException;
import org.osgeo.proj4j.Proj4jInitException;
import org.osgeo.proj4j.io.Proj4FileReader;
import org.osgeo.proj4j.units.Unit;
public class CoordinateConversion {
public static void main(String[] args) {
// 定义原始的地理坐标系
CoordinateReferenceSystem sourceCRS = getCRS("EPSG:4326");
// 定义目标投影坐标系
CoordinateReferenceSystem targetCRS = getCRS("EPSG:3857");
// 定义原始坐标点
LatLng sourcePoint = new LatLng(Math.toRadians(39.9), Math.toRadians(116.4));
// 将地理坐标系坐标转换为投影坐标系坐标
ProjCoordinate targetPoint = new ProjCoordinate();
try {
sourceCRS.getProjection().project(sourcePoint.toProj4j(), targetPoint);
} catch (Proj4jException e) {
e.printStackTrace();
}
// 将投影坐标系坐标转换回地理坐标系坐标
LatLng targetLatLng = new LatLng(targetPoint.y, targetPoint.x);
try {
targetCRS.getProjection().inverseProject(targetLatLng.toProj4j(), targetPoint);
} catch (Proj4jException e) {
e.printStackTrace();
}
// 输出结果
System.out.println(targetPoint.x + "," + targetPoint.y);
}
// 获取坐标系
public static CoordinateReferenceSystem getCRS(String crsStr) {
Proj4FileReader reader = new Proj4FileReader();
try {
// 从 EPSG 数据库中获取坐标系
CoordinateReferenceSystem crs = reader.getCoordinateReferenceSystem(crsStr);
// 设置坐标系的单位为米
crs.getProjection().getUnit().setValue(1.0);
return crs;
} catch (Proj4jInitException e) {
e.printStackTrace();
}
return null;
}
}
```
其中,`sourceCRS` 和 `targetCRS` 分别表示原始的地理坐标系和目标投影坐标系,`sourcePoint` 表示原始坐标点,`targetPoint` 表示转换后的投影坐标系坐标。在代码中,首先调用 `sourceCRS.getProjection().project()` 方法将地理坐标系坐标转换为投影坐标系坐标,然后调用 `targetCRS.getProjection().inverseProject()` 方法将投影坐标系坐标转换回地理坐标系坐标。最后,输出转换后的结果。