implementation("org.osgeo:proj4j:0.1.0")
import org.osgeo.proj4j.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class CoordinateSystemUtils {
public static double[] translateExtent(Integer sourceEPSG, Integer targetEPSG, double xmin, double ymin) {
CoordinateTransformFactory transformFactory = new CoordinateTransformFactory();
CRSFactory crsFactory = new CRSFactory();
CoordinateReferenceSystem source = crsFactory.createFromName("EPSG:" + sourceEPSG);
CoordinateReferenceSystem target = crsFactory.createFromName("EPSG:" + targetEPSG);
CoordinateTransform transform = transformFactory.createTransform(source, target);
ProjCoordinate minCoordinate = new ProjCoordinate(xmin, ymin);
transform.transform(minCoordinate, minCoordinate);
double[] box = new double[]{minCoordinate.x, minCoordinate.y};
return box;
}
public static void main(String[] args) {
// List<Double> list = new ArrayList<>();
// list.add(13369378.41490000D);
// list.add(4072485.38040000D);
// System.out.println(JSON.toJSONString(translateExtent(4490, 3857, list)));
double[] a = translateExtent(3857, 4490, 13369378.41490000D, 4072485.38040000D);
System.out.println(a);
}
public static List<Double> translateExtent(Integer sourceEPSG, Integer targetEPSG, List<BigDecimal> data){
if(data == null || data.size() < 2){
return null;
}
List<Double> list = new ArrayList<>();
CoordinateTransformFactory transformFactory = new CoordinateTransformFactory();
CRSFactory crsFactory = new CRSFactory();
CoordinateReferenceSystem source = crsFactory.createFromName("EPSG:" + sourceEPSG);
CoordinateReferenceSystem target = crsFactory.createFromName("EPSG:" + targetEPSG);
CoordinateTransform transform = transformFactory.createTransform(source, target);
if(data.size() == 2){
ProjCoordinate minCoordinate = new ProjCoordinate(data.get(0).doubleValue(), data.get(1).doubleValue());
transform.transform(minCoordinate, minCoordinate);
list.add(minCoordinate.x);
list.add(minCoordinate.y);
return list;
}else if(data.size() == 3){
ProjCoordinate minCoordinate = new ProjCoordinate(data.get(0).doubleValue(), data.get(1).doubleValue(), data.get(2).doubleValue());
transform.transform(minCoordinate, minCoordinate);
list.add(minCoordinate.x);
list.add(minCoordinate.y);
list.add(minCoordinate.z);
return list;
}
return list;
}
public static List<Double> translateExtentByDouble(Integer sourceEPSG, Integer targetEPSG, List<Double> data){
if(data == null || data.size() < 2){
return null;
}
List<Double> list = new ArrayList<>();
CoordinateTransformFactory transformFactory = new CoordinateTransformFactory();
CRSFactory crsFactory = new CRSFactory();
CoordinateReferenceSystem source = crsFactory.createFromName("EPSG:" + sourceEPSG);
CoordinateReferenceSystem target = crsFactory.createFromName("EPSG:" + targetEPSG);
CoordinateTransform transform = transformFactory.createTransform(source, target);
if(data.size() == 2){
ProjCoordinate minCoordinate = new ProjCoordinate(data.get(0), data.get(1));
transform.transform(minCoordinate, minCoordinate);
list.add(minCoordinate.x);
list.add(minCoordinate.y);
return list;
}else if(data.size() == 3){
ProjCoordinate minCoordinate = new ProjCoordinate(data.get(0), data.get(1), data.get(2));
transform.transform(minCoordinate, minCoordinate);
list.add(minCoordinate.x);
list.add(minCoordinate.y);
list.add(minCoordinate.z);
return list;
}
return list;
}
}