利用Geotools來轉換影像的座標系

背景

若有一幅航拍的原始影像,需要自動產品化,那就必須要在後端進行座標系的統一轉換,這時用到開源的Geotools就很簡單了。

處理

使用Operations類下的resample方法(重採樣)可以解決這個問題,它的方法定義如下:

 Coverage org.geotools.coverage.processing.Operations.resample(Coverage source, CoordinateReferenceSystem crs) throws CoverageProcessingException

所以我們可以利用它實現柵格影像的座標變換,例如下面代碼將xxxx.tif的座標系轉換爲3857座標系。

File file = new File("xxxx.tif");
        	if(file.exists()){
	        	Reader br = new Reader();
	        	GridCoverage2D old2D = br.getGridCoverage2D(file);
	        	final CoordinateReferenceSystem WGS = CRS.decode("EPSG:3857");
	    		final CoordinateReferenceSystem sourceCRS = old2D.getCoordinateReferenceSystem();
	    		System.out.println(String.format("源座標系爲: %s", sourceCRS.getName()));
	    		GridCoverage2D new2D = (GridCoverage2D) Operations.DEFAULT.resample(old2D, WGS);
	        	System.err.println(String.format("目標座標系爲: %s", new2D.getCoordinateReferenceSystem().getName()));	
        	}

控制檯打印結果如下:

源座標系爲: EPSG:WGS 84 / UTM zone 48N
目標座標系爲: EPSG:WGS 84 / Pseudo-Mercator

可見resample方法切實有效。

Tips

若涉及到4326座標系的轉換,要注意座標軸的順序是不固定的,需要限制順序,否則很多後續工作會出亂子,參考Axis Order

//resample參數修改
Hints hints = new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE);
CRSAuthorityFactory factory = ReferencingFactoryFinder.getCRSAuthorityFactory("EPSG", hints);
CoordinateReferenceSystem crs = factory.createCoordinateReferenceSystem("EPSG:4326");
Operations.DEFAULT.resample(xxx,crs);


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