欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java利用Geotools實(shí)現(xiàn)不同坐標(biāo)系之間坐標(biāo)轉(zhuǎn)換

 更新時(shí)間:2022年08月01日 10:50:38   作者:洛陽(yáng)泰山  
GeoTools 是一個(gè)開(kāi)源的 Java GIS 工具包,可利用它來(lái)開(kāi)發(fā)符合標(biāo)準(zhǔn)的地理信息系統(tǒng)。本文將利用工具包Geotools實(shí)現(xiàn)不同坐標(biāo)系之間坐標(biāo)轉(zhuǎn)換,感興趣的可以了解一下

Geotools

GeoTools 是一個(gè)開(kāi)源的 Java GIS 工具包,可利用它來(lái)開(kāi)發(fā)符合標(biāo)準(zhǔn)的地理信息系統(tǒng)。GeoTools 提供了 OGC (Open Geospatial Consortium) 規(guī)范的一個(gè)實(shí)現(xiàn)來(lái)作為他們的開(kāi)發(fā)。

GeoTools 被許多項(xiàng)目使用,包括 Web 服務(wù),命令行工具和桌面應(yīng)用程序。

核心功能

1.定義關(guān)鍵空間概念和數(shù)據(jù)結(jié)構(gòu)的接口

  • Java 拓?fù)涮准↗TS)提供的集成幾何支持
  • 使用 OGC 過(guò)濾器編碼規(guī)范的屬性和空間過(guò)濾器

2.干凈的數(shù)據(jù)訪問(wèn) API,支持功能訪問(wèn),事務(wù)支持和線程之間的鎖定

  • 以多種文件格式和空間數(shù)據(jù)庫(kù)訪問(wèn) GIS 數(shù)據(jù)
  • 坐標(biāo)參考系統(tǒng)和轉(zhuǎn)換支持
  • 處理廣泛的地圖投影
  • 根據(jù)空間和非空間屬性過(guò)濾和分析數(shù)據(jù)

4.無(wú)狀態(tài)的低內(nèi)存渲染器,在服務(wù)器端環(huán)境中特別有用。

  • 撰寫(xiě)和顯示樣式復(fù)雜的地圖
  • 供應(yīng)商擴(kuò)展,可以更好地控制文本標(biāo)簽和顏色混合

5.使用 XML 模式綁定到 GML 內(nèi)容的強(qiáng)大模式輔助解析技術(shù)

解析 / 編碼技術(shù)提供了許多 OGC 標(biāo)準(zhǔn)的綁定,包括 GML,F(xiàn)ilter,KML,SLD 和 SE。

6.GeoTools 插件:開(kāi)放式插件系統(tǒng),可讓您教授庫(kù)其他格式

用于 ImageIO-EXT 項(xiàng)目的插件,允許 GeoTools 從 GDAL 讀取其他柵格格式

7.GeoTools 擴(kuò)展

提供使用核心庫(kù)的空間設(shè)施構(gòu)建的其他功能。

擴(kuò)展提供圖形和網(wǎng)絡(luò)支持(用于查找最短路徑),驗(yàn)證,Web 地圖服務(wù)器客戶端,用于 XML 解析和編碼的綁定以及顏色調(diào)制器!

8.不支持 GeoTools

GeoTools 也是更廣泛的社區(qū)的一部分,其工作區(qū)用于培養(yǎng)新人才和促進(jìn)實(shí)驗(yàn)。

一些重點(diǎn)包括搖擺支持(在我們的教程中使用?。琒WT,本地和 Web 流程支持,附加符號(hào),附加數(shù)據(jù)格式,網(wǎng)格的生成以及 ISO Geometry 的一些實(shí)現(xiàn)。

maven配置

我們將首先定義我們希望使用的 GeoTools 的版本號(hào)。本工作手冊(cè)是為 28-SNAPSHOT 編寫(xiě)的,盡管您可能希望嘗試不同的版本。

對(duì)于生產(chǎn), geotools.version應(yīng)該使用 28 的穩(wěn)定版本:

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <geotools.version>28-SNAPSHOT</geotools.version>
    <maven.deploy.skip>true</maven.deploy.skip>
  </properties>

我們指定以下依賴項(xiàng)(您的應(yīng)用程序需要的 GeoTools 模塊):

        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-main</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-epsg-hsql</artifactId>
            <version>${geotools.version}</version>
        </dependency>

我們告訴 maven 從哪些存儲(chǔ)庫(kù)下載 jars:

  <repositories>
    <repository>
    <id>osgeo</id>
    <name>OSGeo Release Repository</name>
    <url>https://repo.osgeo.org/repository/release/</url>
    <snapshots><enabled>false</enabled></snapshots>
    <releases><enabled>true</enabled></releases>
    </repository>
    <repository>
    <id>osgeo-snapshot</id>
    <name>OSGeo Snapshot Repository</name>
    <url>https://repo.osgeo.org/repository/snapshot/</url>
    <snapshots><enabled>true</enabled></snapshots>
    <releases><enabled>false</enabled></releases>
    </repository>
  </repositories>

代碼工具

import lombok.extern.slf4j.Slf4j;
import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.locationtech.jts.geom.Coordinate;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
 
import java.math.BigDecimal;
 
@Slf4j
public class GisUtil {
 
    public static void main(String[] args) throws FactoryException, TransformException {
        bjz54ToCgcs2000( 39440999.301,3631381.649);
    //    bjz54ToCgcs2000( 39446227.146,3626791.679);
    }
 
    /**
     * @param x 源坐標(biāo)x
     * @param y 源坐標(biāo)y
     * @Description: 坐標(biāo)系轉(zhuǎn)換-北京54投影轉(zhuǎn)國(guó)家2000投影
     */
    public static Coordinate bjz54ToCgcs2000(double x ,double y){
        Coordinate tgtCoordinate= coordinateTransform(2415,4527, y, x);
        double tx=new BigDecimal(tgtCoordinate.x).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
        double ty=new BigDecimal(tgtCoordinate.y).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
        log.info(ty+","+tx);
        tgtCoordinate.setX(ty);
        tgtCoordinate.setY(tx);
        return tgtCoordinate;
    }
 
    public static Coordinate bjz54ToCgcs2000(Coordinate p){
        return bjz54ToCgcs2000(p.x, p.y);
    }
 
    /**
     * @param srcNo 源坐標(biāo)系EPSG代號(hào)
     * @param targetNo 目標(biāo)坐標(biāo)系EPSG代號(hào)
     * @param x 源坐標(biāo)x
     * @param y 源坐標(biāo)y
     * @Description: 坐標(biāo)系轉(zhuǎn)換 
     */
    public static Coordinate coordinateTransform(int srcNo, int targetNo, double x , double y){
        Coordinate tar=new Coordinate();
        try {
            CoordinateReferenceSystem src = CRS.decode("EPSG:"+srcNo);
            CoordinateReferenceSystem target = CRS.decode("EPSG:"+targetNo);
            MathTransform transform = CRS.findMathTransform(src, target, true);
            Coordinate sour= new Coordinate(x, y);
           return JTS.transform(sour, tar, transform);
        } catch (FactoryException | TransformException  e) {
            log.error(e.getMessage());
        }
        return tar;
 
    }
}

注:計(jì)算結(jié)果和測(cè)量軟件的結(jié)果有2米的誤差,用org.locationtech.proj4j工具包 計(jì)算的結(jié)果誤差更大,有幾十米。后續(xù)突出用pgis轉(zhuǎn)換的辦法誤差在1毫米之間。

使用示例

    @ApiOperation(value = "坐標(biāo)系轉(zhuǎn)換北京54-國(guó)家2000")
    @GetMapping(value = "/bjz54ToCgcs2000")
    public ResponseDTO<Coordinate> bjz54ToCgcs2000(@RequestBody Coordinate dto){
        return ResponseDTO.succData(GisUtil.bjz54ToCgcs2000(dto));
    }

到此這篇關(guān)于Java利用Geotools實(shí)現(xiàn)不同坐標(biāo)系之間坐標(biāo)轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Java Geotools坐標(biāo)轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論