亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇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的基礎數據模型,如果利用彩色和陰影渲染,其直觀性可進一步提高。隨著計算機及遙感、航空攝影的發(fā)展,很多軟件(如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

        一、前言

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

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

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

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

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

        二、Geotools簡介

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

        1. Geotools中的空間查詢

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

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

        圖1 等高線賦值前

        圖2 等高線賦值后

        四、結論

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

        參考文獻:

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

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

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

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

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

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

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

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

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

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

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

        徠卡測量新技術應用專欄

        猜你喜歡
        矢量化等高線
        制作等高線立體模型學習等高線地形圖
        地形圖的閱讀
        一種基于Fréchet距離的斷裂等高線內插算法
        測繪通報(2019年1期)2019-02-15 04:56:06
        DEM的建立及其在林業(yè)上的應用
        “等高線地形圖的判讀”專題測試
        地理教育(2016年10期)2016-11-09 00:32:53
        基于南方CASS的等高線內插功能的改進*1
        地礦測繪(2016年2期)2016-07-16 03:03:43
        交互式矢量化技術在水文站網分布圖編繪中的應用
        科技視界(2016年10期)2016-04-26 21:12:24
        基于VP Studio和CASS的柵格地形圖矢量化方法
        試析表演驅動的矢量化二維表情動畫
        藝術科技(2014年7期)2014-09-17 20:49:20
        遙感圖像多尺度分割算法與矢量化算法的集成
        計算機工程(2014年6期)2014-02-28 01:27:29
        亚洲欧美国产双大乳头| 丰满少妇被啪啪到高潮迷轩| 综合色免费在线精品视频| 日本久久久久亚洲中字幕| 在线高清理伦片a| 婷婷四房播播| 国产一区二区精品网站看黄| 久久2020精品免费网站| av天堂最新在线播放| 成年女人a级毛片免费观看| 少妇人妻偷人精品免费视频| 超碰Av一区=区三区| 日本最新一区二区三区视频| 日本人妻97中文字幕| 欧美丰满少妇xxxx性| 亚洲精品乱码久久久久久日本蜜臀| 极品粉嫩嫩模大尺度无码| 国产精品国产三级国产在线观 | 亚洲AV无码专区国产H小说| 亚洲精品一区二区三区蜜臀| 狠狠爱婷婷网五月天久久| 免费无码精品黄av电影| 99久久人人爽亚洲精品美女| 亚洲国产成人精品激情资源9| 国产三级三级精品久久| 日本伊人精品一区二区三区| 轻点好疼好大好爽视频| 又硬又粗又大一区二区三区视频 | 国产一区二区高清不卡在线| 99久久精品人妻少妇一| 中国美女a级毛片| 色偷偷av亚洲男人的天堂| 人妻少妇精品视中文字幕国语| 在线观看亚洲视频一区二区| 丰满人妻熟妇乱又仑精品| 青青草视频网站在线观看| 国产激情视频在线观看的| 理论片午午伦夜理片影院| 色哟哟av网站在线观看| 亚洲精品中文字幕乱码无线| 欧美国产激情二区三区|