官网:https://trac.osgeo.org/proj4j/
maven仓库:https://mvnrepository.com/artifact/org.locationtech.proj4j/proj4j
依赖
<!-- https://mvnrepository.com/artifact/org.locationtech.proj4j/proj4j -->
<dependency>
<groupId>org.locationtech.proj4j</groupId>
<artifactId>proj4j</artifactId>
<version>1.1.5</version>
</dependency>
常用功能
1、WGS84转Web墨卡托投影。
import org.locationtech.proj4j.*;
public class Application {
public static void main(String[] args) {
CRSFactory crsFactory = new CRSFactory();
CoordinateReferenceSystem source = crsFactory.createFromParameters("wgs84", "+proj=longlat +datum=WGS84 +no_defs ");
CoordinateReferenceSystem target = crsFactory.createFromParameters("webmercator", "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=degree +nadgrids=@null +wktext +no_defs");
CoordinateTransformFactory transformFactory = new CoordinateTransformFactory();
CoordinateTransform transform = transformFactory.createTransform(source, target);
ProjCoordinate coord = new ProjCoordinate(117, 36);
transform.transform(coord, coord);
System.out.printf("x = %f, y = %f\n", coord.x, coord.y);
}
}
2、 WGS84转高斯-克吕格投影。
package com.hylab.dap.gis.service;
import org.locationtech.proj4j.*;
/**
* 坐标转换工具类
*/
public class CoordTransformUtils {
private static final CRSFactory crsFactory = new CRSFactory();
private static final CoordinateTransformFactory ctFactory = new CoordinateTransformFactory();
// https://epsg.io/4326
private static final String proj4326 = "+proj=longlat +datum=WGS84 +no_defs";
// https://epsg.io/4499
private static final String proj4499 =
"+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +units=m +no_defs";
private static final CoordinateReferenceSystem crs4326 = crsFactory.createFromParameters(null, proj4326);
private static final CoordinateReferenceSystem crs4499 = crsFactory.createFromParameters(null, proj4499);
private static final CoordinateTransform transform4326to4544 = ctFactory.createTransform(crs4326, crs4499);
/**
* WGS84经纬度转高斯投影(120.0,24.64,126.0,53.56)
*
* @param lon 经度
* @param lat 纬度
* @return 投影坐标
*/
public static double[] convert4326To4499(double lon, double lat) {
ProjCoordinate src = new ProjCoordinate();
ProjCoordinate dst = new ProjCoordinate();
src.setValue(lon, lat);
transform4326to4544.transform(src, dst);
return new double[]{dst.x, dst.y};
}
}