最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java利用Geotools從DEM數(shù)據(jù)中讀取指定位置的高程信息全過(guò)程

 更新時(shí)間:2025年03月27日 11:01:13   作者:夜郎king  
Geotools作為一款功能強(qiáng)大且開(kāi)源的地理工具庫(kù),為地理數(shù)據(jù)的處理和分析提供了豐富的類庫(kù)和便捷的接口,能夠很好地滿足從DEM數(shù)據(jù)中讀取高程信息這一實(shí)戰(zhàn)需求,本文將深入講解如何利用Geotools從獲取DEM數(shù)據(jù)到成功讀取指定位置高程信息的全過(guò)程,需要的朋友可以參考下

前言

在地理信息科學(xué)領(lǐng)域,高程數(shù)據(jù)是至關(guān)重要的基礎(chǔ)信息之一。它廣泛應(yīng)用于地形分析、城市規(guī)劃、土地管理、災(zāi)害預(yù)警與評(píng)估等多個(gè)重要方面。而數(shù)字高程模型(Digital Elevation Model,簡(jiǎn)稱DEM)作為高程數(shù)據(jù)的主要載體,以數(shù)字化的形式精確記錄了地表的高程信息,為我們理解和研究地球表面形態(tài)提供了有力支持。

隨著地理信息系統(tǒng)的不斷發(fā)展與普及,對(duì)DEM數(shù)據(jù)的高效處理和應(yīng)用成為了眾多科研工作者和工程技術(shù)人員關(guān)注的焦點(diǎn)。在實(shí)際項(xiàng)目中,常常需要從龐大的DEM數(shù)據(jù)集中快速準(zhǔn)確地讀取指定位置的高程值,以滿足諸如地形剖面分析、建筑選址評(píng)估、洪水模擬等多樣化的需求。在城市跑步或者騎行過(guò)程中,需要對(duì)路線進(jìn)行高程變化的提取,用于規(guī)劃路線的難易程度。在城市燃?xì)獾墓艿涝O(shè)計(jì)工作當(dāng)中,根據(jù)城市的輸氣管道建設(shè)時(shí),選擇一條合理的路線,可以利用自然高程和重力的作用來(lái)實(shí)現(xiàn)能耗的降低。

Geotools作為一款功能強(qiáng)大且開(kāi)源的地理工具庫(kù),為地理數(shù)據(jù)的處理和分析提供了豐富的類庫(kù)和便捷的接口。它支持多種地理數(shù)據(jù)格式的讀取與寫(xiě)入,具備完善的坐標(biāo)轉(zhuǎn)換功能以及空間分析能力,能夠很好地滿足從DEM數(shù)據(jù)中讀取高程信息這一實(shí)戰(zhàn)需求。通過(guò)運(yùn)用Geotools,可以高效地實(shí)現(xiàn)對(duì)DEM數(shù)據(jù)的解析,精準(zhǔn)定位到用戶所需的地理坐標(biāo)點(diǎn),并快速獲取該點(diǎn)的高程數(shù)據(jù),為后續(xù)的地理信息分析和決策提供堅(jiān)實(shí)的數(shù)據(jù)基礎(chǔ)。

本實(shí)戰(zhàn)內(nèi)容將深入講解如何利用Geotools這一強(qiáng)大工具,詳細(xì)闡述從獲取DEM數(shù)據(jù)到成功讀取指定位置高程信息的全過(guò)程。包括對(duì)DEM數(shù)據(jù)格式的解析、Geotools環(huán)境的搭建與配置,以及核心代碼的編寫(xiě)與調(diào)試等關(guān)鍵環(huán)節(jié)。通過(guò)本實(shí)戰(zhàn),讀者將能夠掌握使用Geotools處理DEM數(shù)據(jù)的實(shí)用技能,為在地理信息領(lǐng)域的深入研究和實(shí)際應(yīng)用奠定堅(jiān)實(shí)的基礎(chǔ)。

一、GridCoverage2D對(duì)象介紹

GridCoverage2D是Geotools庫(kù)中用于表示二維柵格覆蓋數(shù)據(jù)的核心類,廣泛應(yīng)用于地理信息系統(tǒng)(GIS)開(kāi)發(fā)中,特別是在處理遙感影像、數(shù)字高程模型(DEM)等柵格數(shù)據(jù)時(shí)發(fā)揮著關(guān)鍵作用。以下是關(guān)于GridCoverage2D的詳細(xì)介紹,包括其屬性和方法。

1、GridCoverage2D的屬性

GridCoverage2D是繼承自AbstractGridCoverage的一個(gè)子類,GridCoverage2D子類定義的屬性不多,分別是:

  • image:表示柵格數(shù)據(jù)的PlanarImage對(duì)象,包含了柵格的像素?cái)?shù)據(jù)。

  • gridGeometry:表示柵格幾何信息的GridGeometry2D對(duì)象,包括網(wǎng)格坐標(biāo)的有效范圍和地理參考。

2、GridCoverage2D核心方法

  • 獲取坐標(biāo)參考系(CRS)

    • getCoordinateReferenceSystem2D():返回柵格覆蓋的二維坐標(biāo)參考系。

  • 獲取范圍

    • getEnvelope():返回柵格覆蓋在坐標(biāo)參考系中的邊界范圍。

    • getEnvelope2D():返回柵格覆蓋在坐標(biāo)參考系中的二維邊界范圍。

  • 獲取幾何信息

    • getGridGeometry():返回柵格覆蓋的幾何信息。

  • 獲取柵格數(shù)據(jù)

    • getRenderedImage():將柵格覆蓋數(shù)據(jù)作為RenderedImage獲取。

  • 評(píng)估指定位置的值

    • evaluate(Position point):在指定的地理坐標(biāo)處獲取柵格值。

    • evaluate(Point2D coord, double[] dest):在指定的地理坐標(biāo)處獲取double類型的柵格值。

    • evaluate(Point2D coord, float[] dest):在指定的地理坐標(biāo)處獲取float類型的柵格值。

    • evaluate(Point2D coord, int[] dest):在指定的地理坐標(biāo)處獲取int類型的柵格值。

    • evaluate(GridCoordinates2D coord, double[] dest):在指定的網(wǎng)格坐標(biāo)處獲取double類型的柵格值。

    • evaluate(GridCoordinates2D coord, float[] dest):在指定的網(wǎng)格坐標(biāo)處獲取float類型的柵格值。

    • evaluate(GridCoordinates2D coord, int[] dest):在指定的網(wǎng)格坐標(biāo)處獲取int類型的柵格值。

  • 獲取樣本維度信息

    • getNumSampleDimensions():獲取柵格覆蓋的樣本維度(波段)數(shù)量。

    • getSampleDimension(int index):獲取指定索引的樣本維度信息。

    • getSampleDimensions():獲取柵格覆蓋的所有樣本維度信息。

  • 獲取插值方法

    • getInterpolation():獲取用于所有evaluate(...)方法的插值方法

3、GridCoverage2D中的高級(jí)操作

  • 重采樣

    • Operations.DEFAULT.resample():將柵格覆蓋重采樣到新的網(wǎng)格幾何或坐標(biāo)參考系中。

  • 插值

    • Operations.DEFAULT.interpolate():對(duì)柵格覆蓋進(jìn)行插值操作,指定插值方法如雙線性插值。

  • 裁剪

    • 使用裁剪操作來(lái)獲取柵格覆蓋的子區(qū)域,通過(guò)指定一個(gè)Envelope來(lái)定義裁剪范圍。

  • isDataEditable():判斷柵格數(shù)據(jù)是否可編輯。

  • getOptimalDataBlockSizes():獲取訪問(wèn)柵格值時(shí)每個(gè)維度的最佳塊大小。

  • getDebugString(Position coord):獲取指定坐標(biāo)的調(diào)試字符串。

以上是GridCoverage2D類的主要屬性和方法的詳細(xì)介紹,這些功能使其成為處理和分析柵格數(shù)據(jù)的強(qiáng)大工具,無(wú)論是基礎(chǔ)的數(shù)據(jù)讀取和查詢,還是復(fù)雜的幾何變換和數(shù)據(jù)處理,都能滿足地理信息開(kāi)發(fā)中的多樣化需求。

二、指定位置的高程獲取

在前面一節(jié)中重點(diǎn)介紹了GridCoverage2D的相關(guān)屬性和方法,在了解了這些基本知識(shí)以后再來(lái)進(jìn)行相關(guān)屬性的具體獲取實(shí)例以及根據(jù)一個(gè)經(jīng)緯度位置獲取其對(duì)應(yīng)的高程(類似于海拔)信息。本節(jié)重點(diǎn)是相關(guān)代碼的展示。

1、存儲(chǔ)原理

在GeoTIFF格式的DEM中,高程值通常以規(guī)則格網(wǎng)(Regular Grid)的形式存儲(chǔ)。具體來(lái)說(shuō),高程值被組織成一個(gè)二維的像素矩陣,每個(gè)像素代表一個(gè)特定地理坐標(biāo)點(diǎn)的高程值。按行或列存儲(chǔ):高程值按行或列逐一記錄,形成一個(gè)矩陣結(jié)構(gòu)。每一行或列對(duì)應(yīng)地理空間中的一個(gè)緯度或經(jīng)度范圍。數(shù)據(jù)類型:高程值可以是整數(shù)或浮點(diǎn)數(shù)格式,支持不同的位深度。例如,常見(jiàn)的有16位整數(shù)、32位浮點(diǎn)數(shù)等。

2、相關(guān)屬性的獲取

這里以GridCoverage2D中,我們來(lái)讀取GridCoverage2D的相關(guān)屬性信息,讀取屬性信息的關(guān)鍵方法如下:

// DEM 文件路徑
File demFile = new File("C:/BaiduDownload/湖南省_DEM_30m分辨率_NASA數(shù)據(jù).tif");
// 創(chuàng)建 GeoTiffReader
GeoTiffReader reader = new GeoTiffReader(demFile);
System.out.println("************************解析coverage對(duì)象開(kāi)始*******************");
// 讀取 GridCoverage2D
GridCoverage2D coverage = reader.read(null);
System.out.println("名稱:"+coverage.getName());
for(String propertyName : coverage.getPropertyNames()) {
     System.out.println(propertyName + "<===>" + coverage.getProperty(propertyName));
}
 System.out.println("************************解析coverage對(duì)象結(jié)束*******************");

運(yùn)行以上的代碼后,得到的屬性信息如下:

************************解析coverage對(duì)象開(kāi)始*******************
名稱:湖南省_DEM_30m分辨率_NASA數(shù)據(jù)
tile_cache_key<===>PlanarImage[minX=0 minY=0 width=19695 height=19750 tileGridXOffset=0 tileGridYOffset=0 tileWidth=19695 tileHeight=1 sampleModel=java.awt.image.PixelInterleavedSampleModel@14def00 colorModel=ColorModel: #pixelBits = 16 numComponents = 1 color space = java.awt.color.ICC_ColorSpace@6c2d4cc6 transparency = 1 has alpha = false isAlphaPre = false]
GC_NODATA<===>NoDataContainer [nodataR=RangeDouble[0.0, 0.0], array=[0.0], singleValue=0.0]
JAI.ImageReader<===>it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReader@30865a90
image_height<===>19750
JAI.ImageReadParam<===>it.geosolutions.imageio.plugins.tiff.TIFFImageReadParam@6134ac4a
image_min_x_coord<===>0
PamDataset<===>it.geosolutions.imageio.pam.PAMDataset@777c9dc9
tile_cache<===>com.sun.media.jai.util.SunTileCache@71b1a49c: memoryCapacity = 1000000 memoryUsage = 0 #tilesInCache = 0
image_width<===>19695
image_min_y_coord<===>0
************************解析coverage對(duì)象結(jié)束*******************

在屬性信息中,可以獲取到tif文件的高度和寬度等信息。 

3、獲取高程的方法

從Dem中獲取指定位置經(jīng)緯度的高程的方法如下:

/**
* -根據(jù)coverage求解對(duì)應(yīng)經(jīng)緯度的高程值
* @param coverage
* @param lon 經(jīng)度
* @param lat 緯度
* @return 高程值
*/
public double getHeightValue(GridCoverage2D coverage,double lon,double lat) {
	// 獲取 DEM 的坐標(biāo)參考系統(tǒng)
    CoordinateReferenceSystem crs = coverage.getCoordinateReferenceSystem2D();
    DirectPosition position = new DirectPosition2D(crs, lon, lat);
    // 評(píng)估高程值
    double[] elevation = (double[]) coverage.evaluate(position, new double[1]);
    System.out.println("Elevation at (" + lon + ", " + lat + "): " + elevation[0]);
    return elevation[0];
}

然后使用Junit方法來(lái)進(jìn)行對(duì)應(yīng)的位置的測(cè)試。本例中所采用的是湖南省30米的DEM數(shù)據(jù),因此這里可以讀取的高程位置范圍僅限于湖南省內(nèi)。為了驗(yàn)證這種情況,我們使用貴州省銅仁的一個(gè)經(jīng)緯度,在此情況下無(wú)法獲取相應(yīng)的高程信息。

System.out.println("老屋背高程:" + getHeightValue(coverage,109.281998D,27.204116D));
System.out.println("岳麓山高程:" + getHeightValue(coverage,112.927952D,28.188622D));
System.out.println("楠木寺高程:" + getHeightValue(coverage,112.859802D,28.169707D));
System.out.println("武陵源高程:" + getHeightValue(coverage,110.484695D,29.342379D));
System.out.println("貴州省銅仁高程:" + getHeightValue(coverage,109.160156D,27.683528D));
System.out.println("----------------------從dem獲取高程-----------------------------");

運(yùn)行之后可以在控制臺(tái)看到以下高程輸出:

與我們的預(yù)期一致,成功的通過(guò)經(jīng)緯度位置獲取位置信息。 同時(shí)針對(duì)省外的銅仁地區(qū),我們無(wú)法獲取指定區(qū)域的高程信息。

三、總結(jié)

本實(shí)戰(zhàn)內(nèi)容深入講解如何利用Geotools這一強(qiáng)大工具,詳細(xì)闡述從獲取DEM數(shù)據(jù)到成功讀取指定位置高程信息的全過(guò)程。包括對(duì)DEM數(shù)據(jù)格式的解析、Geotools環(huán)境的搭建與配置,以及核心代碼的編寫(xiě)與調(diào)試等關(guān)鍵環(huán)節(jié)。通過(guò)本實(shí)戰(zhàn),讀者將能夠掌握使用Geotools處理DEM數(shù)據(jù)的實(shí)用技能,為在地理信息領(lǐng)域的深入研究和實(shí)際應(yīng)用奠定堅(jiān)實(shí)的基礎(chǔ)。通過(guò)本文的講解,相信你一定掌握了GridCoverage2D的相關(guān)知識(shí),同時(shí)掌握了如何讀取GridCoverage2D的屬性信息以及如何從DEM中獲取我們需要的高程信息。通過(guò)一個(gè)位置點(diǎn)的高程獲取可以讓您掌握一條線的高程信息如何獲取,也就是循環(huán)坐標(biāo)點(diǎn),然后依次來(lái)獲取相應(yīng)的高程信息,從而可以得到一條路線的連續(xù)高程信息。有了數(shù)據(jù)之后,相信您一定可以快速的獲取相關(guān)信息。

以上就是Java利用Geotools從DEM數(shù)據(jù)中讀取指定位置的高程信息全過(guò)程的詳細(xì)內(nèi)容,更多關(guān)于Java Geotools從DEM中讀取位置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 教你如何使用JAVA POI

    教你如何使用JAVA POI

    今天教大家怎么學(xué)習(xí)JAVA POI的用法,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • SpringBoot獲取客戶端的IP地址的實(shí)現(xiàn)示例

    SpringBoot獲取客戶端的IP地址的實(shí)現(xiàn)示例

    在Web應(yīng)用程序中,獲取客戶端的IP地址是一項(xiàng)非常常見(jiàn)的需求,本文主要介紹了SpringBoot獲取客戶端的IP地址的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java實(shí)現(xiàn)餐廳點(diǎn)餐系統(tǒng)的實(shí)例代碼

    Java實(shí)現(xiàn)餐廳點(diǎn)餐系統(tǒng)的實(shí)例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)餐廳點(diǎn)餐系統(tǒng),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • struts2開(kāi)發(fā)流程及詳細(xì)配置

    struts2開(kāi)發(fā)流程及詳細(xì)配置

    這篇文章主要介紹了struts2開(kāi)發(fā)流程及詳細(xì)配置,步驟比較詳細(xì),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • 詳解java中的阻塞隊(duì)列

    詳解java中的阻塞隊(duì)列

    這篇文章主要介紹了java中的阻塞隊(duì)列的相關(guān)知識(shí),文中代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之KMP算法的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之KMP算法的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)中KMP算法的原理與實(shí)現(xiàn),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-11-11
  • 別在Java代碼里亂打日志了,這才是正確的打日志姿勢(shì)

    別在Java代碼里亂打日志了,這才是正確的打日志姿勢(shì)

    這篇文章主要介紹了別在Java代碼里亂打日志了,這才是正確的打日志姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 無(wú)感NullPointerException的值相等判斷方法

    無(wú)感NullPointerException的值相等判斷方法

    當(dāng)我們需要去判斷一個(gè)?入?yún)?查庫(kù)?返回的開(kāi)關(guān)變量(通常是個(gè)Integer類型的)時(shí),常常會(huì)寫(xiě)如下的if-else判斷語(yǔ)句。但又會(huì)為在生產(chǎn)環(huán)境看到的「NullPointerException」感到困擾,遇到這個(gè)問(wèn)題如何處理呢,下面小編通過(guò)本文給大家詳細(xì)講解,需要的朋友參考下吧
    2023-02-02
  • 關(guān)于mybatis mapper類注入失敗的解決方案

    關(guān)于mybatis mapper類注入失敗的解決方案

    這篇文章主要介紹了關(guān)于mybatis mapper類注入失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能的實(shí)現(xiàn)

    基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能的實(shí)現(xiàn)

    本篇教程給大家分享基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能的實(shí)現(xiàn),驗(yàn)證碼功能的實(shí)現(xiàn)是采用Zuul網(wǎng)關(guān)的Filter過(guò)濾器進(jìn)行校驗(yàn)驗(yàn)證碼,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧
    2021-05-05

最新評(píng)論

太原市| 通州市| 东兴市| 衡水市| 宿松县| 钦州市| 自治县| 海丰县| 大关县| 邵阳市| 娄烦县| 右玉县| 内黄县| 吕梁市| 屏边| 三亚市| 宜君县| 奉贤区| 叙永县| 廊坊市| 通许县| 通海县| 固阳县| 平度市| 旌德县| 辽中县| 故城县| 香格里拉县| 新龙县| 宁城县| 阳西县| 汽车| 永嘉县| 洪洞县| 平江县| 拜泉县| 屏东市| 盐源县| 达孜县| 法库县| 万安县|