国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2016-01-29 05:02:55魏峰遠
測繪通報 2015年9期
關(guān)鍵詞:矢量化等高線

盧 偉,魏峰遠

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

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

LU Wei,WEI Fengyuan

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

盧偉1,2,魏峰遠1

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

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

Elevation Values Batch Assigning Automatically Based on Geotools

LU Wei,WEI Fengyuan

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

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

關(guān)鍵詞:等高線;矢量化;批量賦值;Geotools;幾何查詢

中圖分類號:P208

文獻標識碼:B

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

收稿日期:2014-07-18

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

一、前言

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

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

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

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

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

二、Geotools簡介

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

1. Geotools中的空間查詢

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

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

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

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

這里有兩種方式可以選擇,分別為FilterFactory與FilterFactory2,它們都可以直接創(chuàng)建查詢,其主要差別為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實現(xiàn)了OGC規(guī)范,主要利用JTS包進行幾何運算。Geotools中的幾何運算有7種,分別為:Buffer、Distance、ConvexHull、Intersection、Union、Difference、SymDifference。其中運算對象為幾何對象,運算結(jié)果為另一個幾何對象或數(shù)值。本文中用到的是線(Line)與折線(Polyline)的Intersection運算。其結(jié)果應(yīng)該為一個多點(MultiPoint)(在本文中MultiPoint中的點數(shù)多于1個,則說明有重復(fù)選擇的情況,則需要重新進行選擇):

Geometry intersection=

polyline.intersection(line);

MultiPoin tmp=(MultiPoint)intersection;

三、等高線批量賦值

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

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

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

Layer rasterLayer=

newGridReaderLayer(reader,rasterStyle);

map.addLayer(rasterLayer);

Layer

shpLayer=newFeatureLayer(shapefileSource,shpStyle);

map.addLayer(shpLayer);

加載數(shù)據(jù)后利用Geotools提供的Swing組件進行數(shù)據(jù)顯示。

2. 賦值等高線的選擇

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

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);

}

在利用線要素對數(shù)據(jù)源進行查詢時,為了提高查詢效率,本文利用了包圍盒與線要素聯(lián)合查詢。

3. 等高線的排序與賦值

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

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函數(shù),得到的infoIDs集合就是按照交點與線要素起點的距離進行的排序。在得到排序后的等高線后,只需要逐條取出各條等高線,然后根據(jù)它的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. 系統(tǒng)實現(xiàn)

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

圖1 等高線賦值前

圖2 等高線賦值后

四、結(jié)論

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

參考文獻:

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

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

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

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

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

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

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

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

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

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

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

徠卡測量新技術(shù)應(yīng)用專欄

猜你喜歡
矢量化等高線
制作等高線立體模型學(xué)習(xí)等高線地形圖
地形圖的閱讀
一種基于Fréchet距離的斷裂等高線內(nèi)插算法
測繪通報(2019年1期)2019-02-15 04:56:06
DEM的建立及其在林業(yè)上的應(yīng)用
“等高線地形圖的判讀”專題測試
地理教育(2016年10期)2016-11-09 00:32:53
基于南方CASS的等高線內(nèi)插功能的改進*1
地礦測繪(2016年2期)2016-07-16 03:03:43
交互式矢量化技術(shù)在水文站網(wǎng)分布圖編繪中的應(yīng)用
科技視界(2016年10期)2016-04-26 21:12:24
基于VP Studio和CASS的柵格地形圖矢量化方法
試析表演驅(qū)動的矢量化二維表情動畫
遙感圖像多尺度分割算法與矢量化算法的集成
計算機工程(2014年6期)2014-02-28 01:27:29
高邑县| 汉源县| 北票市| 颍上县| 晋江市| 股票| 嘉祥县| 南投县| 思茅市| 靖州| 潜山县| 贞丰县| 保亭| 吉水县| 荥经县| 玉溪市| 康定县| 榕江县| 永德县| 保靖县| 北碚区| 潮州市| 福鼎市| 开原市| 社会| 蓝山县| 客服| 崇阳县| 福海县| 高青县| 永宁县| 盐津县| 富锦市| 九龙县| 中西区| 雷州市| 宁强县| 同德县| 那曲县| 喜德县| 沅江市|