![基于.NET2.0的GIS開源項目SharpMap分析手記_第1頁](http://file4.renrendoc.com/view/1ff11160b56d668256c46b80cd84186e/1ff11160b56d668256c46b80cd84186e1.gif)
![基于.NET2.0的GIS開源項目SharpMap分析手記_第2頁](http://file4.renrendoc.com/view/1ff11160b56d668256c46b80cd84186e/1ff11160b56d668256c46b80cd84186e2.gif)
![基于.NET2.0的GIS開源項目SharpMap分析手記_第3頁](http://file4.renrendoc.com/view/1ff11160b56d668256c46b80cd84186e/1ff11160b56d668256c46b80cd84186e3.gif)
![基于.NET2.0的GIS開源項目SharpMap分析手記_第4頁](http://file4.renrendoc.com/view/1ff11160b56d668256c46b80cd84186e/1ff11160b56d668256c46b80cd84186e4.gif)
![基于.NET2.0的GIS開源項目SharpMap分析手記_第5頁](http://file4.renrendoc.com/view/1ff11160b56d668256c46b80cd84186e/1ff11160b56d668256c46b80cd84186e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于.NET 2.0的GIS開源項目SharpMap分析手記(一)SharpMap介紹: SharpMap是一個“小巧可愛”的基于.net 2.0使用C#開發(fā)的Map渲染類庫,可以渲染各類GIS數(shù)據(jù)(目前支持ESRI Shape和PostGIS格式),可應(yīng)用于桌面和Web程序。 其網(wǎng)址為: HYPERLINK http:/sharpmap.iter.dk/ http:/sharpmap.iter.dk/ 和 HYPERLINK /SharpMap /SharpMapSharpMap的發(fā)布許可(License)為GNU General Public License,開發(fā)者為Morten Niel
2、sen( HYPERLINK http:/www.iter.dk/ http:/www.iter.dk/)。目前的穩(wěn)定版本為0.8(9.0beta已發(fā)布),代碼行數(shù)近10000行,實現(xiàn)了以下功能:支持的數(shù)據(jù)格式:PostGreSQL/PostGIS,ESRI Shapefile支持WMS layers支持ECW 和JPEG2000 柵格數(shù)據(jù)格式Windows Forms 控件,可以移動和縮放通過HttpHandler支持ASP.net程序點、線、多邊形、多點、多線和多多邊形等幾何類型和幾何集合(GeometryCollections)等OpenGIS Simple Features Speci
3、fication可通過Data Providers(增加數(shù)據(jù)類型支持)、Layer Types(增加層類型)和Geometry Types等擴(kuò)展圖形使用GDI+渲染,支持anti-aliased等專題圖上面這段話是根據(jù) HYPERLINK /archive/2006/02/24/337181.html 馬兄的BLOG整理的,如果不希望我引用請馬兄告知我刪除。下面就是實用的STEP BY STEP。(1)下載VS .NET 2005由于SharpMap基于.NET 2.0,為了分析SharpMap,首先要作的就是下載一個VS .NET 2005,這個比較大,估計有1.6G,所以建議找個速度快點的
4、網(wǎng)站或者(2)安裝VS .NET 2005還算比較好裝,我裝的時候沒碰到什么問題,一次成功;(3)設(shè)置IIS ASP.NET為2.0這點必須注意,因為默認(rèn)的IIS ASP.NET為1.1(我安裝操作系統(tǒng)的是Windows Server 2003);做法是打開IIS信息服務(wù)管理器,在“默認(rèn)網(wǎng)站”上單擊右鍵選擇“屬性”,彈出如下對話框,在ASP.NET頁設(shè)置ASP.NET的版本為2.0.50727;(4)下載SharpMap到 HYPERLINK /SharpMap /SharpMap去下載一個SharpMap,我下載的是0.9版;(5)解壓和試運行解壓后可以看到一個demo文件夾,在VS 200
5、5中打開Simple.aspx,在VS 2005中單擊右鍵,選擇“在瀏覽器中查看基于.NET 2.0的GIS開源項目SharpMap分析手記(二):源代碼解壓下載的0.9版源代碼,有兩個文件夾:SharpMap和SharpMap.UI。其中SharpMap.UI是用戶界面相關(guān)命名空間,如窗體Forms、Ajax等。SharpMap工程是主體,包括數(shù)據(jù)轉(zhuǎn)換、坐標(biāo)、數(shù)據(jù)、幾何體、圖層等命名空間,下面分別介紹:SharpMap命名空間,包括Map類,通過創(chuàng)建Map對象的實例來生成地圖。Map對象由包含Layer對象組成Layers集合,通過GetMap方法來Render地圖。Converts命名空間
6、,提供數(shù)據(jù)轉(zhuǎn)換服務(wù)。CoordinateSystems命名空間,提供坐標(biāo)系統(tǒng)及其投影和轉(zhuǎn)換。Data命名空間,提供對各種數(shù)據(jù)支持,現(xiàn)在包括MSSQL和ShapeFile支持。Providers名稱空間,包括了IProvider接口和Shape文件、PostGIS數(shù)據(jù)的讀取實現(xiàn)。該名稱空間為SharpMap提供數(shù)據(jù)讀(寫)支持,通過面向接口的設(shè)計,可以比較容易的增加各類數(shù)據(jù)格式。Geometries命名空間,包括了SharpMap要使用到的各種幾何類及其接口類,例 如點、線、面等類。是SharpMap的基礎(chǔ)之一,所有幾何對象都繼承自Geometry這個抽象類,其中定義了幾何對象應(yīng)該具備的公共操作
7、,例如大小、 ID、外接矩陣、幾何運算等等。Layers命名空間,提供各種圖層支持,包括注記層、矢量層等。Layer是一個抽象類,實現(xiàn)了ILayer接口,Layer目前有3個子類,分別是VectorLayer、LabelLayer和WmsLayer,分別代3種不同數(shù)據(jù)類型的圖層。Rendering命名空間,目前包括矢量渲染器類和幾個專題圖渲染器類,該類可以將幾何對象根據(jù)其Style設(shè)置渲染為一個System.Drawing.Graphics對象。Styles命名空間,該命名空間主要提供了圖層的樣式設(shè)置類,例如線樣式、點樣式、填充樣式等。Utilities名稱空間包括Algorithms類(目前
8、僅實現(xiàn)了一個方法);Providers類,是Provider的一個Helper,應(yīng)用了反射機(jī)制;Surrogates主要用于系統(tǒng)的Pen和Brush的序列化;Transform提供了從圖片坐標(biāo)到地理坐標(biāo)的互相變換,也即桌面GIS的二次開發(fā)中經(jīng)常使用的屏幕坐標(biāo)和地理坐標(biāo)的轉(zhuǎn)換,主要用于地圖的渲染、交互操作等。Utilities.SpatialIndexing用于對象的空間索引。Web名稱空間實現(xiàn)了HttpHandler和Caching類,用于網(wǎng)絡(luò)環(huán)境。Web命名空間,包括對網(wǎng)絡(luò)支持如HTTP等,Web.Wms提供對WMS的支持。SharpMap.UI工程包括:Forms名稱空間,包含MapIma
9、ge控件,一個簡單的User Control(用戶控件),封裝了Map類,用于Windows Form編程。Web.UI.Ajax提供對Ajax支持。基于.NET 2.0的GIS開源項目SharpMap分析手記(三):地圖渲染分析1 運行過程 我們通過實例來講述SharpMap的運行過程和渲染(繪制)機(jī)制。首先打開Simple.aspx,可知此頁面有一組單選框(3個,分別是放大、縮小和漫游)和一個圖像按鈕,用于顯示地圖。它的代碼在Simple.aspx.cs中。打開Simple.aspx.cs,在Page_Load函數(shù)中是頁面初始化代碼。可知地圖生成分兩步:1.1 初始化地圖myMap = M
10、apHelper.InitializeMap(newSystem.Drawing.Size(int)imgMap.Width.Value,(int)imgMap.Height.Value);我們找到MapHelper.InitializeMap函數(shù),發(fā)現(xiàn)地圖的初始化分為以下幾步:(1)創(chuàng)建地圖,創(chuàng)建圖層/Initialize a new map of size imagesizeSharpMap.Map map = new SharpMap.Map(size);/Set up the countries layerSharpMap.Layers.VectorLayer layCountries
11、 = new SharpMap.Layers.VectorLayer(Countries);/Set the datasource to a shapefile in the App_data folderlayCountries.DataSource = newSharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(App_datacountries.shp), true);(2)基本的圖層顯示設(shè)置/Set fill-style to greenlayCountries.Style.Fill = new Sol
12、idBrush(Color.Green);/Set the polygons to have a black outlinelayCountries.Style.Outline = System.Drawing.Pens.Black;layCountries.Style.EnableOutline = true;layCountries.SRID = 4326;(3)加入圖層到地圖/Add the layers to the map object./The order we add them in are the order they are drawn, so we add the rive
13、rs last to put them on topmap.Layers.Add(layCountries);map.Layers.Add(layRivers);map.Layers.Add(layCities);map.Layers.Add(layLabel);map.Layers.Add(layCityLabel);(4)地圖放縮、背景、中心等設(shè)置/limit the zoom to 360 degrees widthmap.MaximumZoom = 360;map.BackColor = Color.LightBlue;map.Zoom = 360;map.Center = new S
14、harpMap.Geometries.Point(0,0);1.2 繪制并生成地圖我們回到Simple.aspx.cs的Page_Load函數(shù),發(fā)現(xiàn)下一步調(diào)用GenerateMap();/This is the initial view of the map. Zoom to the extents of the map:/myMap.ZoomToExtents();/or center on 0,0 and zoom to full earth (360 degrees)/myMap.Center = new SharpMap.Geometries.Point(0,0);/myMap.Zoo
15、m = 360;/Create the mapGenerateMap();在同一文件中,GenerateMap()包含以下兩步:(1)保存當(dāng)前地圖狀態(tài)/Save the current mapcenter and zoom in the viewstateViewState.Add(mapCenter, myMap.Center);ViewState.Add(mapZoom, myMap.Zoom);(2)渲染地圖/Render mapSystem.Drawing.Image img = myMap.GetMap();string imgID = SharpMap.Web.Caching.In
16、sertIntoCache(1, img);imgMap.ImageUrl = getmap.aspx?ID= + HttpUtility.UrlEncode(imgID);它的核心就是通過myMap.GetMap()創(chuàng)建了一個地圖圖片。我們來看看這個GetMap()函數(shù)。在Map.cs文件中找到GetMap()函數(shù),它分為以下幾步:創(chuàng)建圖像,得到圖像繪制環(huán)境參數(shù)System.Drawing.Image img = new System.Drawing.Bitmap(this.Size.Width, this.Size.Height);System.Drawing.Graphics g = S
17、ystem.Drawing.Graphics.FromImage(img);g.Transform = this.MapTransform;g.Clear(this.BackColor);g.PageUnit = System.Drawing.GraphicsUnit.Pixel;繪制圖層int SRID = (Layers.Count 0 ? Layers0.SRID : -1); /Get the SRID of the first layerfor (int i = 0; i = this.Zoom & _Layers.MinVisible this.Zoom)_Layers.Rende
18、r(g, this);關(guān)鍵在于_Layers.Render(g, this),它是ILayer接口的一個函數(shù),我們找VectorLayer的實現(xiàn)來看看,它分為兩種,一種是專題地圖,一種是非專題地圖繪制。對于專題地圖,它針對SharpMap.Data.FeatureDataTable的每一 個feature進(jìn)行繪制,先繪制其外框,再繪制內(nèi)部幾何體。對于非專題地圖,它針對 this.DataSource.GetGeometriesInView(envelope)得到的幾何體進(jìn)行繪制,也是先繪制其外框,再繪制內(nèi)部幾何體。最后的繪制工作都調(diào)用SharpMap.Rendering.VectorRende
19、rer類的函數(shù)完成。 SharpMap.Rendering.VectorRenderer類包含繪制注記、線串、多線串、多點、多多邊形、點、多邊形等。繪制好圖層后將激發(fā)LayerRendered事件:if(LayerRendered!=null) LayerRendered(this, g); /Fire event繪制好地圖后將激發(fā)Map類的MapRendered 事件:if (MapRendered != null) MapRendered(g); /Fire render event2SharpMap.Rendering.VectorRenderer的各個函數(shù)具體分析現(xiàn)在我們對渲染地圖的全
20、過程已經(jīng)有了個總體概念和初步理解,下面來具體看一下SharpMap.Rendering.VectorRenderer的各個函數(shù):2.1 DrawLabel / / Renders a label to the map. / / Graphics reference / Label placement / Offset of label in screen coordinates / Font used for rendering/ Font forecolor / Background color / Color of halo / Text rotation in degrees / Tex
21、t to render / Map referencepublic static void DrawLabel(System.Drawing.Graphics g, System.Drawing.PointF LabelPoint, System.Drawing.PointF Offset, System.Drawing.Font font, System.Drawing.Color forecolor, System.Drawing.Brush backcolor, System.Drawing.Pen halo, float rotation, string text, SharpMap.
22、Map map)這里面要注意的是這是繪制使用的函數(shù)是DrawPath和FillPath,而且是作者從DrawString改進(jìn)的,可能是為了繪制過程的統(tǒng)一,因為其它幾何體的具體繪制也使用DrawPath。if (halo != null)g.DrawPath(halo, path);g.FillPath(new System.Drawing.SolidBrush(forecolor), path);/g.DrawString(text, font, new System.Drawing.SolidBrush(forecolor), LabelPoint.X, LabelPoint.Y);2.2
23、DrawLineString/ / Renders a LineString to the map./ / Graphics reference/ LineString to render/ Pen style used for rendering/ Map referencepublic static void DrawLineString(System.Drawing.Graphics g, Geometries.LineString line, System.Drawing.Pen pen, SharpMap.Map map)這個函數(shù)很簡單,也是采用DrawPath進(jìn)行具體繪制。2.3
24、DrawMultiLineString/ / Renders a MultiLineString to the map./ / Graphics reference/ MultiLineString to be rendered/ Pen style used for rendering/ Map referencepublic static void DrawMultiLineString(System.Drawing.Graphics g,Geometries.MultiLineString lines, System.Drawing.Pen pen,SharpMap.Map map)它通
25、過循環(huán)調(diào)用DrawLineString來進(jìn)行繪制。2.4 DrawMultiPoint/ / Renders a to the map./ / Graphics reference/ MultiPoint to render/ Symbol to place over point/ The amount that the symbol should be scaled. A scale of 1 equals to no scaling/ Symbol offset af scale=1/ Symbol rotation in degrees/ Map referencepublic stat
26、ic void DrawMultiPoint(System.Drawing.Graphics g, Geometries.MultiPoint points, System.Drawing.Bitmap symbol, float symbolscale, System.Drawing.PointF offset, float rotation, SharpMap.Map map)它通過循環(huán)調(diào)用DrawPoint來進(jìn)行繪制。2.5 DrawMultiPolygon/ / Renders a multipolygon byt rendering each polygon in the colle
27、ction by calling DrawPolygon./ / Graphics reference/ MultiPolygon to render/ Brush used for filling (null or transparent for no filling)/ Outline pen style (null if no outline)/ Specifies whether polygon clipping should be applied/ Map referencepublic static void DrawMultiPolygon(System.Drawing.Grap
28、hics g, Geometries.MultiPolygon pols, System.Drawing.Brush brush, System.Drawing.Pen pen, bool clip, SharpMap.Map map)它通過循環(huán)調(diào)用DrawPolygon來進(jìn)行繪制。2.6 DrawPoint/ / Renders a point to the map./ / Graphics reference/ Point to render/ Symbol to place over point/ The amount that the symbol should be scaled.
29、A scale of 1 equals to no scaling/ Symbol offset af scale=1/ Symbol rotation in degrees/ Map referencepublic static void DrawPoint(System.Drawing.Graphics g, SharpMap.Geometries.Point point, System.Drawing.Bitmap symbol, float symbolscale, System.Drawing.PointF offset, float rotation, SharpMap.Map m
30、ap)其中,symbol參數(shù)為一個位圖,代表點的符號,這說明SharpMap暫時只支持位圖符號,不支持矢量符號繪制。最終繪制調(diào)用DrawImage。2.7 DrawPolygon/ / Renders a polygon to the map./ / Graphics reference/ Polygon to render/ Brush used for filling (null or transparent for no filling)/ Outline pen style (null if no outline)/ Specifies whether polygon clipping
31、 should be applied/ Map referencepublic static void DrawPolygon(System.Drawing.Graphics g, SharpMap.Geometries.Polygon pol, System.Drawing.Brush brush, System.Drawing.Pen pen, bool clip, SharpMap.Map map)它只支持用不同的畫刷和畫筆來繪制多邊形,也是采用DrawPath進(jìn)行具體繪制?;?NET 的GIS開源項目SharpMap分析手記(四):地圖數(shù)據(jù)訪問機(jī)制分析前面初略分析了SharpMap的
32、渲染機(jī)制,下面再來分析下它的數(shù)據(jù)訪問機(jī)制,SharpMap的數(shù)據(jù)訪問機(jī)制有兩個關(guān)鍵:Provider模式和空間索引。1 運行機(jī)制分析SharpMap中矢量圖層類(SharpMap.Layers.VectorLayer) 和注記層(SharpMap.Layers.LabelLayer)的數(shù)據(jù)源屬性(DataSource)其實就是一個IProvider接口 (SharpMap.Data.Providers.IProvider):/ / Gets or sets the datasource/ public SharpMap.Data.Providers.IProvider DataSource g
33、et return _DataSource; set _DataSource = value; 因此,SharpMap的所有數(shù)據(jù)操作都是在IProvider上進(jìn)行。下面來看看數(shù)據(jù)的初始化。1.1 數(shù)據(jù)源的初始化我們再來看看MapHelper.cs文件中的InitializeMap函數(shù),其中圖層數(shù)據(jù)初始化如下:/Set the datasource to a shapefile in the App_data folderlayCountries.DataSource = newSharpMap.Data.Providers.ShapeFile(HttpContext.Current.Serve
34、r.MapPath(App_datacountries.shp), true);即生成一個ShapeFile類來初始化DataSource。初始化代碼在ShapeFile.cs中,分為三步:(1)初始化DBF文件/Initialize DBFstring dbffile = _Filename.Substring(0, _Filename.LastIndexOf(.) + .dbf;if (File.Exists(dbffile)dbaseFile = new DbaseReader(dbffile);(2)解析shape文件頭/Parse shape headerParseHeader();
35、(3)讀取投影文件/Read projection fileParseProjection();1.2 數(shù)據(jù)源的打開數(shù)據(jù)源的打開使用DataSource的Open函數(shù)。/ / Opens the datasource/ public void Open()ShapeFile的Open函數(shù)分為兩步:(1)初始化Shape文件主要是InitializeShape函數(shù),其主要功能是裝載空間索引:LoadSpatialIndex(FileBasedIndex); /Load spatial index以后將對空間索引進(jìn)行介紹。(2)打開DBF文件if (dbaseFile != null)dbaseF
36、ile.Open();1.3 相交查詢執(zhí)行相交查詢的是IProvider接口的ExecuteIntersectionQuery函數(shù)。/ / Returns all objects whose boundingbox intersects bbox./ / / / Please note that this method doesnt guarantee that the geometries returned actually intersect bbox, but only/ that their boundingbox intersects bbox./ / / / / public vo
37、id ExecuteIntersectionQuery(SharpMap.Geometries.BoundingBox bbox, SharpMap.Data.FeatureDataSet ds)它分為以下幾步:(1)得到bbox范圍框中的所有對象ID/Use the spatial index to get a list of features whose boundingbox intersects bboxList objectlist = GetObjectIDsInView(bbox);這個函數(shù)的實現(xiàn)如下:/Use the spatial index to get a list of
38、 features whose boundingbox intersects bboxreturn tree.Search(bbox);所以,它實際使用四叉樹的搜索功能。以后將在空間索引中予以介紹。(2)根據(jù)ID得到屬性信息并加入空間數(shù)據(jù)集SharpMap.Data.FeatureDataTable dt = dbaseFile.NewTable;for (int i = 0; i objectlist.Count; i+) SharpMap.Data.FeatureDataRow fdr = dbaseFile.GetFeature(objectlist, dt); fdr.Geometry
39、 = ReadGeometry(objectlist); if (fdr.Geometry != null) if (fdr.Geometry.GetBoundingBox().Intersects(bbox) if (FilterDelegate = null | FilterDelegate(fdr) dt.AddRow(fdr);ds.Tables.Add(dt);2 IProvider接口的其它函數(shù)(1)關(guān)閉函數(shù)/ / Closes the datasource/ void Close();(2)得到范圍框/ / of dataset/ / boundingboxSharpMap.Ge
40、ometries.BoundingBox GetExtents();3 總結(jié)從以上分析可知,SharpMap通過IProvider接口對數(shù)據(jù)源進(jìn)行抽象,只要能實現(xiàn)IProvider接口的數(shù)據(jù)源就可以支持。IProvider接口的相交查詢通過空間索引實現(xiàn),空間索引及四叉樹將在以后專門介紹?;?NET 的GIS開源項目SharpMap分析手記(五):WebGIS原理分析WebGIS原理分析及思考分析了SharpMap這么久,才想起我原來對WebGIS只有一個 簡單的概念,還沒有把它背后的原理完全弄明白。那么,趕緊學(xué)吧!于是就準(zhǔn)備找找這方面的技術(shù)文章和書籍,來一個惡補(bǔ),這篇文章也作為我惡補(bǔ)的總結(jié),
41、如果有什么不對的地方,請大家多多賜教!1 WebGIS原理如同GIS是計算機(jī)技術(shù)在測繪行業(yè)的應(yīng)用一樣,WebGIS也可以看作Web技術(shù)在GIS上的應(yīng)用,因此,WebGIS的基本原理與Web是一樣的,如圖1所示。圖1 Web原理在這個工作模式的基礎(chǔ)上,現(xiàn)階段的WebGIS實現(xiàn)主要有兩種方式:1.1 胖客戶端實現(xiàn)胖客戶端實現(xiàn)是在瀏覽器端下載和安裝控件,通過控件來實現(xiàn)與服務(wù)器端的交互,地圖的顯示及其它分析等。這種方式在早期使用較多。1.2 瘦客戶端實現(xiàn)瘦客戶端不需要下載和安裝特殊的控件,它通過圖片來顯示地圖,所有的地圖生成與分析功能都放在服務(wù)器端實現(xiàn)。這類實現(xiàn)以GOOGLE MAP為代表。這種方式現(xiàn)
42、在使用越來越多,SharpMap也是以這種方式實現(xiàn)。1.3 分布式應(yīng)用程序隨著webservice和.net remoting等技術(shù)的興起,分布式應(yīng)用程序的開發(fā)技術(shù)越來越成熟,通過應(yīng)用.net remoting和webservice等中間件技術(shù),每個應(yīng)用程序既可以是客戶端,又可以是服務(wù)器。相應(yīng)的,在軟件架構(gòu)領(lǐng)域,現(xiàn)有應(yīng)用程序也從單機(jī)版、 C/S模式、B/S模式發(fā)展到多層結(jié)構(gòu),軟件界還提出了SOA(面向服務(wù)的架構(gòu))等概念??梢灶A(yù)見,以后軟件領(lǐng)域?qū)⑹欠植际綉?yīng)用程序的天下。在GIS軟件領(lǐng)域,分布式GIS應(yīng)用程序也可歸于WebGIS一類。由于國內(nèi)的GIS開發(fā)還停留在控件式二次開發(fā)以及網(wǎng)頁開發(fā)階段,所以
43、此類還在發(fā)展之中,實際應(yīng)用較少。2 我的思考我覺得,WebGIS網(wǎng)站的提高主要有兩個方面:架構(gòu)的優(yōu)化和增強(qiáng)用戶參與度。2.1 架構(gòu)的優(yōu)化架構(gòu)的優(yōu)化不僅可以提高服務(wù)器的效率,還可以增加web service和.net remoting服務(wù)。我近段時間做了個基于超圖和MAPX的.net remoting分布式應(yīng)用程序試驗,深深體會到分層和架構(gòu)優(yōu)化的優(yōu)點,這個試驗還不完善,我將在以后的BLOG中詳細(xì)介紹。值得一提的是,我想基于超圖和MAPX做一個web service服務(wù),卻老有問題,希望有高手能解答我的疑惑,先謝了。2.2 增強(qiáng)用戶參與度現(xiàn)有的WebGIS網(wǎng)站同質(zhì)現(xiàn)象嚴(yán)重。都是提供一個電子地圖和公
44、交查詢什么的。怎樣增強(qiáng)用戶參與度和贏利模式創(chuàng)新是我們要思考的問題。.Net 2.0的GIS開源項目SharpMap分析手記(六):SharpMap的功能一個開源項目的發(fā)展方向關(guān)系到此項目應(yīng)用的發(fā)展與壯大,所以十分重要。好的開源項目正因為開發(fā)者準(zhǔn)確地把握了項目功能擴(kuò)充方向,從而把有限的精力用在了使用者最需要的功能上,從而取得了成功?,F(xiàn)在來預(yù)測SharpMap是否會取得成功為時過早,但我們可以分析一下它的功能發(fā)展之路(RoadMap),從而對它是否成功進(jìn)行簡單的討論。從前文基于.NET 2.0的GIS開源項目SharpMap分析手記(一):第一次親密接觸,我們知道了SharpMap的現(xiàn)有功能,在S
45、harpMap項目主頁上,我們可以得到更詳細(xì)的介紹:1 一句話介紹SharpMap is an easy-to-use mapping library for use in web and desktop applications. It provides access to many types of GIS data, enables spatial querying of that data, and renders beautiful maps.(SharpMap是一個用于web和桌面應(yīng)用程序的易用的地圖庫。它可以訪問多種格式的GIS數(shù)據(jù),提供對這些數(shù)據(jù)的空間搜索,同時還可以繪制漂亮的
46、地圖。)2 支持的數(shù)據(jù)格式矢量:ESRI Shape files formatPostGreSQL/PostGISOLEDB (points only)Microsoft SQL ServerOracle*GPX*MapInfo File*TIGER*S57*DGN*CSV*GML*Interlis 1*Interlis 2*SQLite and ODBC*柵格:Arc/Info ASCII Grid*Arc/Info Binary Grid (.adf)*AIRSAR Polarimetric*Microsoft Windows Device Independent Bitmap (.bmp
47、)*BSB Nautical Chart Format (.kap)*VTP Binary Terrain Format (.bt)*CEOS (Spot for instance)*First Generation USGS DOQ (.doq)*DODS / OPeNDAP*New Labelled USGS DOQ (.doq)*Military Elevation Data (.dt0, .dt1)*ERMapper Compressed Wavelets (.ecw)*ESRI .hdr Labelled*ENVI .hdr Labelled Raster*Envisat Image
48、 Product (.n1)*EOSAT FAST Format*FITS (.fits)*Graphics Interchange Format (.gif)*GMT Compatible netCDF*GRASS Rasters*TIFF / GeoTIFF (.tif)*Hierarchical Data Format Release 4 (HDF4)*Hierarchical Data Format Release 5 (HDF5)*Erdas Imagine (.img)*Vexcel MFF2*Idrisi Raster*Image Display and Analysis (Wi
49、nDisp)*ILWIS Raster Map (.mpr,.mpl)*Japanese DEM (.mem)*JPEG JFIF (.jpg)*JPEG2000 (.jp2, .j2k)*JPEG2000 (.jp2, .j2k)*JPEG2000 (.jp2, .j2k)*JPEG2000 (.jp2, .j2k)*NOAA Polar Orbiter Level 1b Data Set (AVHRR)*Erdas 7.x .LAN and .GIS*Daylon Leveller Heightfield*In Memory Raster*Vexcel MFF*Multi-resoluti
50、on Seamless Image Database*Meteosat Second Generation*NDF*NITF*NetCDF*OGDI Bridge*PCI .aux Labelled*PCI Geomatics Database File*Portable Network Graphics (.png)*PCRaster (.map)*Netpbm (.ppm,.pgm)*Swedish Grid RIK (.rik)*RadarSat2 XML (product.xml)*USGS SDTS DEM (CATD.DDF)*Raster Matrix Format (.rsw,
51、 .mtw)*SAR CEOS*SGI Image Format*USGS ASCII DEM (.dem)*X11 Pixmap (.xpm)*WMS:Version 1.0.0Version 1.1.1Version 1.3.0其中:帶*號是通過第三方擴(kuò)展實現(xiàn)3 功能擴(kuò)展之路FeatureDescriptionPlanned ReleaseSpatial relationships among geometryGeometry has certain relationships with other geometry: they intersect, border, are contain
52、ed, etc. This logic is called topology and most GIS packages provide for some level of it. SharpMap will implement the Dimensionally Extended Nine-Intersection Model (DE-9IM) which is described in section 6.1.14 - Relational Operators of OpenGIS Simple Features Specification for GIS - Simple Feature
53、 Access - Common Architecture /files/index.php?artifact_id=13227 HYPERLINK /SharpMap/Release/ProjectReleases.aspx?ReleaseId=465 1.0Updatable ProvidersAllow features to be updated, added or deleted from SharpMap providers HYPERLINK /SharpMap/Release/ProjectReleases.aspx?ReleaseId=463 2.0Rendering Int
54、erface / Rendering EnginesProvide an interface for the rendering of layers and maps so other formats besides GDI+ images can be produced. Will include GDI+ and WPF in v2.0, with other providers, such as SVG, GML, etc being able to be independently written. See SharpMap v2 Architecture for more infor
55、mation. HYPERLINK /SharpMap/Release/ProjectReleases.aspx?ReleaseId=463 2.0可見,當(dāng)前1.0版的主要功能是實現(xiàn)了多種空間數(shù)據(jù)類型的訪問和簡單的空間查詢及顯示。而2.0主要實現(xiàn)兩大功能:空間數(shù)據(jù)的增、刪、改和繪制接口。就我看來,表現(xiàn)層應(yīng)該作為SharpMap發(fā)展的重點,畢竟現(xiàn)在GIS軟件在這方面還比較欠缺?;?NET 2.0的GIS開源項目SharpMap分析手記(七):GDAL C#接口庫的編譯與SharpMap(Change Set 21021)對影像的支持研究粟衛(wèi)民 HYPERLINK / / HYPERLINK /
56、suen/ /suen/ 日期:2007-5-22保留所有版權(quán)。如需轉(zhuǎn)載,請在醒目位置注明出處在4月11日發(fā)布的SharpMap(Change Set 21021)源代碼中,增加了對GEOTIFF等影像的支持,它是利用 HYPERLINK / GDAL開源庫來實現(xiàn)這一支持的。由于是Change Set版本,此源代碼的編譯和使用存在不少問題,應(yīng)廣大開源愛好者的要求,同時在他們的無私幫助下,我最終完成了一個同時支持矢量數(shù)據(jù)和影像的可編譯運行的版本,當(dāng)然還是存在不少問題,希望大家給我提出來。1 GDAL C#接口庫的編譯GDAL是一個操作各種柵格地理數(shù)據(jù)格式的庫。包括讀取、寫入、轉(zhuǎn)換、處理各種柵格數(shù)
57、據(jù)格式(有些特定的格式對寫入等不支持)。它跨平臺,開源,功能強(qiáng)大,連大名鼎鼎的GOOGLE EARTH都使用它。在青島糨糊特別是青島村里的月光的幫助下,我成功地編譯好了GDAL C#接口庫(還有小小問題,不影響使用),下面是編譯步驟:(1)下載GDAL1.4.1,下面是下載地址: HYPERLINK /gdal/gdal-1.4.1.tar.gz /gdal/gdal-1.4.1.tar.gz(2)直接在.Net2005命令行下運行nmake E:downloadgdal141gdal-1.4.1makefile.vc文件換成你自己的路徑就可以了;(3)在.Net下使用這個庫還要編譯swigc
58、sharp下makefile.vc,然后這個目錄下會生成8個dll;(4)編譯完成swigcsharp后生成的dll名字需要改一下,如gdal_gdal_wrap.dll改成gdal_wrap.dll,因為程序中用到ImportDll時名字沒有最前面的gdal_編譯的時候可能默認(rèn)配置文件問題都多加了這幾個字母;(5)編譯完成swigcsharp后dll是可以直接用的,隨便拷貝到別的機(jī)器上都可以用,只需要機(jī)器安裝.Net2005運行時。2 SharpMap讀取及顯示影像過程分析SharpMap(Change Set 21021)中新增了一個DemoWinForm工程,此工程可以讀取和顯示矢量圖層
59、,我對其進(jìn)行了擴(kuò)展,使它能夠讀取和顯示柵格圖層。下面詳細(xì)分析下讀取和顯示柵格圖層的過程。2.1 點擊工具條“AddLayer”按鈕它的消息響應(yīng)函數(shù)是:BeginInvoke(MethodInvoker)delegate() loadLayer(); );這是對loadLayer()函數(shù)的異步調(diào)用,如果對BeginInvoke有疑問請參見 HYPERLINK /document/viewdoc/?id=1126 利用輔助線程更新用戶界面UI。2.2 loadLayer()函數(shù)此函數(shù)采用工廠方法模式(Factory Method)來創(chuàng)建圖層,如果對工廠方法模式不太熟悉的可參見“ HYPERLINK
60、 /archive/2006/01/04/310716.html .NET設(shè)計模式(5):工廠方法模式(Factory Method)”。DemoWinForm工程中采用Dictionary _layerFactoryCatalog來儲存GIS數(shù)據(jù)文件擴(kuò)展名及其相應(yīng)的ILayerFactory,并利用TryGetValue方法來得到某擴(kuò)展名相應(yīng)的ILayerFactory。最后調(diào)用ILayerFactory的Create方法創(chuàng)建相應(yīng)圖層并使用addLayer函數(shù)來增加圖層到地圖。2.3 GdalRasterLayerFactory類Create函數(shù)如下: GdalRasterLayer gda
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《大學(xué)物理(上冊)》課件-第1章
- 2025-2030全球車輛燃油油位計行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球電積銅行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國直接空氣捕獲和儲存(DACS)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球多層土壤傳感器行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國阻燃塑料薄膜和片材行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球醫(yī)用手指康復(fù)訓(xùn)練儀行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球化學(xué)谷物熏蒸劑行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國智慧教育公共服務(wù)平臺行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國工業(yè)膠囊填充設(shè)備行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年度院感管理工作計劃(后附表格版)
- 勵志課件-如何做好本職工作
- 化肥銷售工作計劃
- 2024浙江華數(shù)廣電網(wǎng)絡(luò)股份限公司招聘精英18人易考易錯模擬試題(共500題)試卷后附參考答案
- 2024年山東省濟(jì)南市中考英語試題卷(含答案解析)
- 2024年社區(qū)警務(wù)規(guī)范考試題庫
- 2025中考英語作文預(yù)測:19個熱點話題及范文
- 第10講 牛頓運動定律的綜合應(yīng)用(一)(講義)(解析版)-2025年高考物理一輪復(fù)習(xí)講練測(新教材新高考)
- 靜脈治療護(hù)理技術(shù)操作標(biāo)準(zhǔn)(2023版)解讀 2
- 2024年全國各地中考試題分類匯編(一):現(xiàn)代文閱讀含答案
- GB/T 30306-2024家用和類似用途飲用水處理濾芯
評論
0/150
提交評論