SharpMap是基於.Net平台開發的GIS地圖渲染組件。在SharpMap的內部設計了基於OGC 標准的幾何模型 構架,設計了IProvider策略模式的多源矢量地圖數據適配器接口,地圖要素渲染的底層主要通過幾何變 換將Geometry轉換為.Net支持的幾何模型如System.Drawing.Point、System.Drawing.Rectangle、 System.Drawing.Drawing2D.GraphicsPath等,然後調用System.Drawing.Graphics類的Draw方法實現地圖 要素的繪制。在SharpMap內部由於沒有設計Symbol的構架,因此,對於需要開發真正的GIS系統,需要封 裝Symbol架構,以便實現專題渲染和地圖符號庫。
SharpMap為我們提供了GIS系統最基本的功能集合,如地圖可視化、空間查詢等功能,因此我們可以利 用SharpMap提供的部分功能為我們在.Net平台上實現地圖可視化提供支持,而不需要借助一些商業組件。 本文就將簡單的介紹一些基於SharpMap實現部分程序的代碼示例,希望對研究開源的朋友有所啟示和幫助 。注:我已經對SharpMap部分Bug做了修改,重新設計了系統的構架,也新開發了一些新的模塊。這些都 將在以後的文章中有所闡述。
基於Jackey.Framework開發Windows應用程序示例
//初始化代碼,請在窗體裝載事件中調用該方法。
private void init()
{
//Set buddy control.
this.tocControl1.MapControl = this.mapControl1;
//create a vector layer and set the default renderer.
SharpMap.Layers.VectorLayer layCity=new SharpMap.Layers.VectorLayer
("City");
layCity.DataSource=new SharpMap.Data.Providers.ShapeFileProvider
(@"D:"ArcGIS"DeveloperKit"SamplesNET"data"GulfOfStLawrence"data"Can_Mjr_Cities.shp");
((SharpMap.Rendering.SimpleFeatureRenderer)
layCity.Renderer).Symbol=new SharpMap.Symbols.MarkerSymbol
(SharpMap.Symbols.SymbolType.Circle,Color.Blue,10f);
//create a vector layer and set the default renderer.
SharpMap.Layers.VectorLayer layRoad = new
SharpMap.Layers.VectorLayer("Road");
layRoad.DataSource = new SharpMap.Data.Providers.ShapeFileProvider
(@"D:"ArcGIS"DeveloperKit"SamplesNET"data"GulfOfStLawrence"data"mjrroads.shp");
((SharpMap.Rendering.SimpleFeatureRenderer)layRoad.Renderer).Symbol =
new SharpMap.Symbols.LineSymbol(Color.Green, 2f);
//create a vector layer and set the default renderer.
SharpMap.Layers.VectorLayer layCoasts = new
SharpMap.Layers.VectorLayer("Coasts");
layCoasts.DataSource = new SharpMap.Data.Providers.ShapeFileProvider
(@"D:"ArcGIS"DeveloperKit"SamplesNET"data"GulfOfStLawrence"data"Coasts.shp");
((SharpMap.Rendering.SimpleFeatureRenderer)layCoasts.Renderer).Symbol
= new SharpMap.Symbols.FillSymbol(Color.LightCyan);
//add the layer to the map
this.mapControl1.Map.Layers.Add(layCoasts);
this.mapControl1.Map.Layers.Add(layRoad);
this.mapControl1.Map.Layers.Add(layCity);
//zoom the map to the full extent
this.mapControl1.ZoomToFullExtent();
}