android 使用proj4j库(Java版本)

proj4j库在在业界很出名的。有开源的c代码,这个如果要编译到android 的so完整调用就好了。不过有很多问题。我在Java上找到纯Java写的proj4j库。使用这个库跟epsg就可以很好对应起来。就是每个投影都是有世界通用的编号。

1、库

把epsg定义都放在jar包下面,就是打包进行了。


可以查看,查找你想要的epsg代号,以及里面内容


epsg:2345 大概是广州用的范围。你可以做找到你想要的。

2、看代码转换

第一种创建座标投影对象,直接使用完整文本进行解析。目标投影

        String proj4 ="+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs";
        CRSFactory targetFactory = new CRSFactory();
        CoordinateReferenceSystem target = targetFactory.createFromParameters("target", proj4);

第二种直接用代码调用jar下面的epsg文件。然后输入编号,就能找到具体的参数。

        Proj4FileReader proj4FileReader = new Proj4FileReader();
        String[] paramStr = new String[0];
        try {
            paramStr = proj4FileReader.readParametersFromFile("epsg","2435");
        } catch (IOException e) {
            e.printStackTrace();
        }

        CRSFactory targetFactory = new CRSFactory();
        //目标座标系统
        CoordinateReferenceSystem target = targetFactory.createFromParameters("2435", paramStr);

一般来说是转WGS84经纬度转换到地方座标。或者反过来,地方座标转到WGS84经纬度。

示例WGS84经纬度转换到2435地方座标

        Proj4FileReader proj4FileReader = new Proj4FileReader();
        String[] paramStr = new String[0];
        try {
            paramStr = proj4FileReader.readParametersFromFile("epsg","2435");
        } catch (IOException e) {
            e.printStackTrace();
        }

        CRSFactory targetFactory = new CRSFactory();
        //目标座标系统
        CoordinateReferenceSystem target = targetFactory.createFromParameters("2435", paramStr);

        //源座标系统
        String wgs84_param = "+title=long/lat:WGS84 +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degress";
        CoordinateReferenceSystem wgs84 = crsFactory.createFromParameters("WGS84", wgs84_param);

        CoordinateTransformFactory ctf = new CoordinateTransformFactory();
        transform = ctf.createTransform(wgs84, target);

3、使用

    public void transform(double x, double y, double z) {
        if (transform != null) {
            ProjCoordinate projCoordinate = new ProjCoordinate(x, y);
            transform.transform(projCoordinate, projCoordinate);
            dNorth = projCoordinate.y;
            dEast = projCoordinate.x;
            dHight = z;
        }
    }


使用这个库,也可以把.prj文件读取转换成上面那种格式,进行使用。

转换结果在图上了。

欢迎推荐gis行业的开源库。或者idea


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章