日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

GeoTools坐标转换(投影转换和仿射变换)

發布時間:2023/12/13 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 GeoTools坐标转换(投影转换和仿射变换) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GeoTools是在java下的gis開源軟件,以下介紹坐標轉換的兩種方法:投影轉換和仿射變換


投影轉換

這里以xian80經緯度坐標轉xian80,3度分帶 111中央經線平面坐標為例

轉換函數如下:

1         Point pointXian80 = projectTransform(lon, lat, "EPSG:4610", "EPSG:2382");
 1     /**
 2      * 投影轉換, lon=經度,lat=緯度,ESPG格式(例):EPSG:4610
 3      */
 4     public static Point projectTransform(double lon, double lat,
 5             String epsgSource, String epsgTarget) throws FactoryException,
 6             MismatchedDimensionException, TransformException {
 7         // 原始坐標點
 8         // PS:通常邏輯上理解經度應該是橫坐標x,緯度是y,可是這里經度要填到y,緯度x,否則會報錯
 9         Point sourcePoint = JtsHelper.createPoint(lat, lon);
10 
11         // 定義轉換前和轉換后的投影,可以用ESPG或者wkt
12         // "PROJCS["Xian_1980_3_Degree_GK_CM_111E",GEOGCS["GCS_Xian_1980",DATUM["D_Xian_1980",SPHEROID["Xian_1980",6378140.0,298.257]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Gauss_Kruger"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",111.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]";
13         // CoordinateReferenceSystem mercatroCRS = CRS.parseWKT(strWKTMercator);
14         CoordinateReferenceSystem crsSource = CRS.decode(epsgSource);
15         CoordinateReferenceSystem crsTarget = CRS.decode(epsgTarget);
16         // 投影轉換
17         MathTransform transform = CRS.findMathTransform(crsSource, crsTarget);
18         Point pointTarget = (Point) JTS.transform(sourcePoint, transform);
19 
20         return pointTarget;
21     }

關于定義坐標系的說明,GeoTools中定義坐標系有兩種方法,一是坐標系的wkt,二是ESPG
坐標系的wkt可以從arcgis的prj文件中過去,用記事本打開prj文件,里面的內容就是該坐標系的wkt格式內容,例如:PROJCS["Xian_1980_3_Degree_GK_CM_111E",GEOGCS["GCS_Xian_1980",DATUM["D_Xian_1980",SPHEROID["Xian_1980",6378140.0,298.257]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Gauss_Kruger"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",111.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]

獲取到wkt后,可以通過 CoordinateReferenceSystem mercatroCRS = CRS.parseWKT(strWKTMercator); 獲取到坐標系對象

另一種方法是ESPG,意思是每一個坐標系都有一個ESPG標準的號碼,查詢坐標系的ESPG可通過以下網站 http://spatialreference.org/

PS:當轉換的兩種坐標系的datum不同,會報錯Bursa-Wolf parameters,暫時未解決


仿射變換

代碼如下:

首先是輸入三組參考點,前三個是轉換前,后三個是轉換后

最后結果是pointReuslt

 1         // 參考點坐標
 2         Coordinate s1 = new Coordinate(429275.549, 2801455.153);
 3         Coordinate s2 = new Coordinate(428110.626, 2792148.620);
 4         Coordinate s3 = new Coordinate(428966.479, 2800016.622);
 5 
 6         Coordinate t1 = new Coordinate(4628.339, 801349.338);
 7         Coordinate t2 = new Coordinate(3515.906, 792036.308);
 8         Coordinate t3 = new Coordinate(4327.381, 799909.069);
 9         // 建立仿射變換對象
10         AffineTransformationBuilder afb = new AffineTransformationBuilder(s1,
11                 s2, s3, t1, t2, t3);
12         AffineTransformation atf = afb.getTransformation();
13 
14         Point pointReuslt = JtsHelper.createPoint(x,y);
15 
16         // 坐標轉換
17         pointReuslt.apply(atf);

總結

以上是生活随笔為你收集整理的GeoTools坐标转换(投影转换和仿射变换)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。