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


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