java 根据两个不同坐标系的wkt几何对象求出坐标转换参数实现坐标互相转换
要求两个不同坐标系的WKT几何对象求出坐标转换参数,可以使用开源库proj4j来实现。通过proj4j,我们可以将WKT几何对象转换为proj4j中的投影对象,然后使用投影对象的transform方法来进行坐标转换。
下面是一个Java代码示例,演示如何将一个WGS84坐标系下的点转换为中国2000坐标系下的点:
import org.locationtech.proj4j.CoordinateReferenceSystem;
import org.locationtech.proj4j.CRSFactory;
import org.locationtech.proj4j.ProjCoordinate;
import org.locationtech.proj4j.ProjProjection;
import org.locationtech.proj4j.transform.CoordinateTransform;
import org.locationtech.proj4j.transform.TransformFactory;
public class CoordinateTransformExample {
public static void main(String[] args) {
// 定义WGS84坐标系和中国2000坐标系的WKT字符串
String wgs84Wkt = "GEOGCS[\"WGS84\",DATUM[\"WGS84\",SPHEROID[\"WGS84\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]";
String china2000Wkt = "PROJCS[\"CGCS2000 / 3-degree Gauss-Kruger zone 38\",GEOGCS[\"CGCS2000\",DATUM[\"China_Geodetic_Coordinate_System_2000\",SPHEROID[\"CGCS2000\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"1024\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"4490\"]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4490\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",38500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],AUTHORITY[\"EPSG\",\"4544\"]]";
// 创建CRSFactory对象,用于解析WKT字符串
CRSFactory crsFactory = new CRSFactory();
// 解析WKT字符串,得到CoordinateReferenceSystem对象
CoordinateReferenceSystem wgs84Crs = crsFactory.createFromWKT(wgs84Wkt);
CoordinateReferenceSystem china2000Crs = crsFactory.createFromWKT(china2000Wkt);
// 创建ProjCoordinate对象,用于存放坐标点
ProjCoordinate wgs84Coord = new ProjCoordinate(116.3975, 39.9086);
// 创建ProjProjection对象,用于坐标转换
ProjProjection wgs84Proj = new ProjProjection(wgs84Crs);
ProjProjection china2000Proj = new ProjProjection(china2000Crs);
// 创建CoordinateTransform对象,用于坐标转换
TransformFactory transformFactory = new TransformFactory();
CoordinateTransform transform = transformFactory.createTransform(wgs84Proj, china2000Proj);
// 进行坐标转换
ProjCoordinate china2000Coord = new ProjCoordinate();
transform.transform(wgs84Coord, china2000Coord);
// 输出转换后的坐标点
System.out.println(china2000Coord.x + ", " + china2000Coord.y);
}
}
在上面的示例中,我们首先定义了WGS84坐标系和中国2000坐标系的WKT字符串,然后通过CRSFactory对象将它们解析为CoordinateReferenceSystem对象。
接着,我们创建了一个ProjCoordinate对象,用于存放WGS84坐标系下的点的经纬度信息。然后分别创建了WGS84坐标系和中国2000坐标系的ProjProjection对象,用于坐标转换。最后,使用TransformFactory对象创建了CoordinateTransform对象,将WGS84坐标系下的点转换为中国2000坐标系下的点。
最终,我们通过ProjCoordinate对象获取了转换后的坐标点,并将其输出到控制台
原文地址: https://www.cveoy.top/t/topic/fItv 著作权归作者所有。请勿转载和采集!