proj4j

创建日期:2024-06-21
更新日期:2025-01-19

官网: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};
    }
}