999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

利用Geotools開源庫對等高線進行批量賦值的方法研究

2016-01-29 05:02:55魏峰遠
測繪通報 2015年9期

盧 偉,魏峰遠

(1. 河南理工大學測繪與國土信息工程學院,河南 焦作 454003; 2. 北京博陽世通

信息技術有限公司,北京 100101)

LU Wei,WEI Fengyuan

利用Geotools開源庫對等高線進行批量賦值的方法研究

盧偉1,2,魏峰遠1

(1. 河南理工大學測繪與國土信息工程學院,河南 焦作 454003; 2. 北京博陽世通

信息技術有限公司,北京 100101)

Elevation Values Batch Assigning Automatically Based on Geotools

LU Wei,WEI Fengyuan

摘要:等高線是表達地形起伏最為常用的一種方式,是GIS的基礎數據模型,如果利用彩色和陰影渲染,其直觀性可進一步提高。隨著計算機及遙感、航空攝影的發展,很多軟件(如ArcMap)都具備了地形圖矢量化功能,但是通常待處理的等高線量較大,若逐條賦值,其效率與正確性必然受到影響。本文首先對Geotools進行了基本介紹,然后結合代碼,詳細闡述了利用Geotools實現對已經矢量化完畢的等高線進行批量賦值的過程。

引文格式: 盧偉,魏峰遠. 利用Geotools開源庫對等高線進行批量賦值的方法研究[J].測繪通報,2015(9):125-127.DOI:10.13474/j.cnki.11-2246.2015.0297

關鍵詞:等高線;矢量化;批量賦值;Geotools;幾何查詢

中圖分類號:P208

文獻標識碼:B

文章編號:0494-0911(2015)09-0125-03

收稿日期:2014-07-18

作者簡介:盧偉(1988—),女,碩士,主要研究方向為基礎數據庫建設、室內定位等。E-mail:13261583834@163.com

一、前言

隨著空間和網絡技術的發展,GIS技術越來越為人們所重視,而數字化地面要素是GIS應用的基礎資料,其中等高線更是GIS中最重要的要素之一[1]。等高線是一組具有空間關系的曲線,是表達地形起伏最為常用的方式,如果利用彩色和陰影渲染[2],其直觀性可進一步提高。利用現有的測量手段并通過計算機處理,有多種方式也可以達到相同或類似的效果,如DEM、TIN、GRID等。只要獲得這些數據中的其中一種,就可以得到其他表達地表起伏的數據格式。目前,在獲得數字化的等高線方面有以下幾種方式:

1) 利用合成孔徑雷達(SAR)衛星、航空攝影等方式獲取地表的高程影像,通過計算機生成數字高程模型(DEM),然后由DEM生成等高線[3]。

2) 利用其他表達地形的模型(如TIN、GRID等)進行轉換。

3) 利用以往測量得到的紙質地形圖進行矢量化,并對矢量化后的等高線進行高程賦值[4]。

以往的地質測量都是以紙質地圖進行存檔的[5]。隨著計算機及遙感、航空攝影的發展,人們獲取地形地貌的方式越來越多,老式的紙質地圖在分析與表達時逐漸顯露出其局限性,但在獲取等高線方面,它仍是一個重要來源。目前很多軟件(如ArcMap)都具備了地形圖矢量化功能,但是通常待處理的等高線量較大,若逐條賦值,其效率與正確性必然受到影響。因此,如何快速地對紙質地形圖進行矢量化并進行批量賦值是一個很重要的問題。矢量化是數字圖像處理的內容[6],本文主要論述使用Geotools開源包對矢量化后的等高線進行批量賦值的方法與實現。

二、Geotools簡介

Geotools是使用Java語言編寫的開源GIS工具包[6-7]。它起源于1996年英國利茲大學的一個碩士研究項目,到目前最新版本Geotools 10.1已經發展了17年之久。它最初的目的是提供一個可以創造交互式的地理可視化客戶端,現在它作為開放地理基金會(OSGeo)最初支持的項目之一,已經發展成為一個實現標準OGC規范接口的功能完善的GIS工具包。它主要提供各種GIS算法,并對各種空間數據格式進行讀寫與顯示[8]。

1. Geotools中的空間查詢

Geotools使用gt-opengis包中的Filter與Expression接口表達約束,使用它們從數據源中提取特定的要素以創建查詢(Query)。空間查詢按查詢方式主要分為兩類:根據屬性條件查詢要素和根據幾何要素查詢。在查詢要素之前首先要定義好查詢條件。

(1) 使用CQL(common query manguage)進行屬性查詢

Filter filter=CQL.toFilter(“contour=0”);

(2) 使用FilterFactory進行幾何查詢

這里有兩種方式可以選擇,分別為FilterFactory與FilterFactory2,它們都可以直接創建查詢,其主要差別為FilterFactory2比FilterFactory在使用JTS操作幾何方式具備更多的方法。下面為使用FilterFactory2進行幾何查詢的代碼:

FilterFactory2 ff=

CommonFactoryFinder.getFilterFactory2(GeoTools.getDefaultHints);

Filter filter=ff.contains(ff.property("THE_GEOM"),ff.literal(geometry));

其中,“THE_GEOM”通常是Shapefile幾何字段名;geometry為空間查詢的幾何范圍。

2. Geotools中的幾何運算

Geotools實現了OGC規范,主要利用JTS包進行幾何運算。Geotools中的幾何運算有7種,分別為:Buffer、Distance、ConvexHull、Intersection、Union、Difference、SymDifference。其中運算對象為幾何對象,運算結果為另一個幾何對象或數值。本文中用到的是線(Line)與折線(Polyline)的Intersection運算。其結果應該為一個多點(MultiPoint)(在本文中MultiPoint中的點數多于1個,則說明有重復選擇的情況,則需要重新進行選擇):

Geometry intersection=

polyline.intersection(line);

MultiPoin tmp=(MultiPoint)intersection;

三、等高線批量賦值

等高線批量賦值的基本思想是每次以一條直線選擇一系列相鄰的未賦值等高線(這些等高線高程值遞增或遞減),然后求出這些等高線與直線的交點。按直線的方向求出后面各條等高線與首個相交等高線的距離,并以此距離對這些交點進行排序。最后根據首條等高線遞增或遞減的順序對等高線進行賦值。

1. 加載底圖與等高線矢量文件

在Geotools中使用FileDataStore與GridCoverage2DReader分別對Shapefile與柵格數據進行讀取,對柵格數據的要求是已經經過空間校正,并具有正確的坐標系。代碼如下:

Layer rasterLayer=

newGridReaderLayer(reader,rasterStyle);

map.addLayer(rasterLayer);

Layer

shpLayer=newFeatureLayer(shapefileSource,shpStyle);

map.addLayer(shpLayer);

加載數據后利用Geotools提供的Swing組件進行數據顯示。

2. 賦值等高線的選擇

在批量賦值之前,首先對一批需要賦值的相鄰等高線進行選擇,在進行選擇時根據底圖柵格確定所選對象遞增或遞減。具體代碼如下:

SimpleFeatureCollection grabFeaturesFromPolyline(LineStringlineString)

throws Exception

{

FilterFactory2 ff=CommonFactoryFinder.getFilterFactory2();

FeatureType schema=shapefileSource.getSchema();

String geometryPropertyName=schema.getGeometryDescriptor().getLocalName();

CoordinateReferenceSystem targetCRS=schema.getGeometryDescriptor()

.getCoordinateReferenceSystem();

CoordinateReferenceSystem defaultCRS=ProjectionUtils.getDefaultCRS();

MathTransform transform=CRS.findMathTransform(defaultCRS,targetCRS);

LineString targetLineString=(LineString) JTS.transform(lineString,transform);

ReferencedEnvelope bbox=JTS.toEnvelope(targetLineString);

Filter filter1=ff.bbox(ff.property(geometryPropertyName),bbox);

Filter filter2=ff.intersects(ff.property(geometryPropertyName),ff.literal(targetLineString));

Filter filter=ff.and(filter1,filter2);

return shapefileSource.getFeatures(filter);

}

在利用線要素對數據源進行查詢時,為了提高查詢效率,本文利用了包圍盒與線要素聯合查詢。

3. 等高線的排序與賦值

上一步所得到的是一個要素集,也就是與線要素相交的所有等高線的集合。在得到這些線要素后,需要根據與線要素相交的順序進行排序,以按等高線遞增或遞減進行批量賦值。本文采取的方式是首先求出線要素與各要素等高線的交點,然后根據這些交點與線要素起點的距離對要素選擇集中的等高線進行排序。具體代碼如下:

Coordinate firstPt=lineString.getCoordinateN(0);

SimpleFeatureIterator iterator=collection.features();

Mapmap=new

HashMap();

while(iterator.hasNext()){

SimpleFeature feature=iterator.next();

Geometry geometry=(Geometry)

feature.getDefaultGeometry();

Geometry points=

geometry.intersection(lineString);

Coordinate pt=points.getCoordinate();

map.put(pt.distance(firstPt),feature);

}

List>infoIds=

newArrayList

SimpleFeature>>(map.entrySet());

Collections.sort(infoIds,new

Comparator>(){

publicint compare(Entry

SimpleFeature>o1,

Entryo2){

double cha=o2.getKey()-o1.getKey();

if (cha>0)

return 1;

else

return -1;

}

});

在對等高線進行排序時,使用了Java中HashMap中的自定義Sort函數,得到的infoIDs集合就是按照交點與線要素起點的距離進行的排序。在得到排序后的等高線后,只需要逐條取出各條等高線,然后根據它的FeatureID,對要素源進行查詢更新。具體代碼如下:

public void updateSimpleFeature(FeatureId fid,String name,Object value)

throwsIOException{

Transaction transaction=new

DefaultTransaction("Example1");

String typeName=

shpDataStore.getTypeNames()[0];

FeatureSource

SimpleFeature>featureSource=null;

SimpleFeatureStore store=

(SimpleFeatureStore)shpDataStore

.getFeatureSource(typeName);

store.setTransaction(transaction);

FilterFactory2 ff=

CommonFactoryFinder.getFilterFactory2(GeoTools

.getDefaultHints());

Filter filter=ff.id(fid);

SimpleFeatureTypefeatureType=

store.getSchema();

try{

store.modifyFeatures(name,value,filter);

transaction.commit();

} catch(Exception eek){

try {

transaction.rollback();

}catch(IOException e){

e.printstackTrace();

}

}

}

4. 系統實現

等高線批量賦值工具界面由3部分組成:菜單欄、工具欄、地圖顯示區。主要功能包括添加底圖、添加Shapefile、編輯Shapefile、系統設置及地圖基本操作等。等高線批量賦值的基本流程為:將圖層縮放到未賦值的等高線處,使用賦值工具畫出一條線,選擇相鄰的一組等高線。確定初始等高線的值及高差,即可為該組等高線賦值。在利用ArcGIS軟件對1989年出版的焦作市修武縣1∶5萬地形圖等高線進行矢量化后,利用本文實現的等高線批量賦值工具進行賦值操作。對等高線賦值前后的變化效果如圖1、圖2所示。

圖1 等高線賦值前

圖2 等高線賦值后

四、結論

本文中所使用的根據等高線順序進行賦值的方法并不是很難實現,如果使用ArcMap中內嵌的VB開發[9]或ArcEngine進行二次開發,開發效率也許會進一步提高。但是這些都需要依托龐大的二次開發組件,并且沒有許可也不能單獨運行。本文提出的基于Geotools的等高線批量賦值方法,在開發方式上使用的是免費的開源工具包,依托其完善的GIS功能可以方便開發出相應功能,軟件可以方便傳播與使用。在本文中使用了Geotools的Swing可視化組件、查詢包、更新包及Java中HashMap的Sort函數,實現了等高線的批量賦值。相比以往逐條等高線進行人工賦值,等高線批量賦值可以極大地提高工作效率,并降低失誤率。

參考文獻:

[1]曹寧,張曉煜,李劍萍,等. 基于ArcView的等高線批賦值[J]. 農業網絡信息,2007(9):61-63.

[2]胡耀鋒,胡曙光. 坐標轉換中地貌重構算法研究[J]. 測繪通報,2008(1):62-65.

[3]張堯,樊紅,黃旺. 基于Delaunay三角網的等高線樹生成方法[J]. 測繪學報,2012,41(3):461-467.

[4]朱蕊. 多源空間矢量數據一致性處理技術研究[D].鄭州:信息工程大學,2012.

[5]王東華,劉建軍,商瑤玲,等. 國家1∶50000基礎地理信息數據庫動態更新[J]. 測繪通報,2013(7):1-4.

[6]王太寧. 基于GeoTools的開源GIS應用的研究與實踐[D].大連:大連理工大學,2010.

[7]馮亦參. 基于Geotools實現WebGIS應用軟件[J]. 微計算機信息,2006(31):260-261.

[8]雷兵. 地理信息查詢工具Geotools的設計與實現[J]. 測繪科技動態,1998(3):20-24.

[9]鄧世學. VBA編程實現批量對等高線賦值[J]. 電腦編程技巧與維護,2012(6):14-15.

[10]紀洋,武文波,楊曉偉. 等高線自動矢量化的后處理[J]. 遼寧工程技術大學學報:自然科學版,2008(S1):37-39.

[11]李國輝, 許文帥, 龍毅,等.面向等高線與河流沖突處理的多約束移位方法[J].測繪學報, 2014, 43 (11): 1204-1210.

徠卡測量新技術應用專欄

主站蜘蛛池模板: 国产无码精品在线| 国产高清免费午夜在线视频| 99九九成人免费视频精品| 四虎影视国产精品| 日韩福利在线观看| 一本大道东京热无码av| 在线a视频免费观看| 97精品伊人久久大香线蕉| 国产一级在线播放| 欧美性久久久久| 欧美日本在线播放| 91视频首页| 99热这里只有精品免费| 国产精品尤物在线| 欧美日本视频在线观看| 国产成人综合亚洲欧洲色就色| 成人综合在线观看| 国产91小视频| 亚洲综合极品香蕉久久网| 福利在线不卡| 成人在线综合| 亚洲AV成人一区二区三区AV| 国产小视频a在线观看| 91在线日韩在线播放| 久久亚洲天堂| 国产黑丝视频在线观看| 综合人妻久久一区二区精品 | 成人福利在线看| 久久国产精品娇妻素人| 狼友av永久网站免费观看| 国产精品青青| 在线观看免费国产| 精品欧美一区二区三区在线| 亚洲国产成人久久精品软件| 人与鲁专区| 欧美一区二区精品久久久| 国产精品色婷婷在线观看| 天天色天天操综合网| 无码AV动漫| 国产福利在线观看精品| 免费国产高清视频| 99热最新在线| 波多野结衣在线一区二区| 专干老肥熟女视频网站| 亚洲欧洲日韩国产综合在线二区| 国产日韩丝袜一二三区| 91po国产在线精品免费观看| 国产一二三区在线| 亚洲欧洲国产成人综合不卡| 国产成人精品高清不卡在线| 国产小视频在线高清播放 | 国产一区亚洲一区| 国产微拍精品| 国产一级做美女做受视频| 亚洲欧美激情另类| 亚洲V日韩V无码一区二区| 99精品热视频这里只有精品7| 国产在线精品网址你懂的| 国产 在线视频无码| 久久精品一卡日本电影| 色偷偷一区二区三区| 日本高清免费不卡视频| 色屁屁一区二区三区视频国产| 日韩欧美亚洲国产成人综合| 美女内射视频WWW网站午夜| 五月激情婷婷综合| 亚洲精品人成网线在线 | 欧美一级视频免费| 午夜一区二区三区| 久久频这里精品99香蕉久网址| 日韩在线2020专区| 午夜福利在线观看成人| 亚洲欧美成aⅴ人在线观看| 国产男人的天堂| 狠狠色狠狠色综合久久第一次| 成人在线观看不卡| 国产成人凹凸视频在线| 99精品免费欧美成人小视频| 国产免费自拍视频| AⅤ色综合久久天堂AV色综合| 国产欧美另类| 国产99视频免费精品是看6|