zoukankan      html  css  js  c++  java
  • 坐标系之前的数据转换(比如3857转4326)

    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;
        }
    
    
    }
    

      

  • 相关阅读:
    万兆铜缆--七类双绞线--光纤等内容
    [51CTO]反客为主 ,Linux 成为微软 Azure 上最流行的操作系统
    [知乎]超线程对游戏来说真的没用吗?
    SQLSERVER2017 最新补丁发布方式
    MSTSC 修改端口的简单方法 3389
    使用WinSW 将 exe 创建成Windows下面 service的方法 (将nginx创建成 services)
    [时政]在美国,是参议院议长的权力大,还是众议院议长的权力大
    内网内使用https 和 使用http 建立连接的速度对比
    Windows下 OpenSSL的安装与简单使用
    [转发]VMware厚置备延迟置零 、 厚置备置零、精简置备 区别
  • 原文地址:https://www.cnblogs.com/james-roger/p/14962462.html
Copyright © 2011-2022 走看看