C# SharpMap的简单使用

来源:互联网 发布:淘宝客户端二维码 编辑:程序博客网 时间:2024/06/07 21:29

本文是利用ShapMap实现GIS的简单应用的小例子,以供学习分享使用。关于SharpMap的说明,网上大多是以ShapeFile为例进行简单的说明,就连官网上的例子也不多。本文是自己参考了源代码进行整理的,主要是WinForm的例子。原理方面本文也不过多论述,主要是实例演示,需要的朋友还是以SharpMap源码进行深入研究。

什么是SharpMap ?

SharpMap是一个基于.net 2.0使用C#开发的Map渲染类库,可以渲染各类GIS数据(目前支持ESRI Shape和PostGIS格式),可应用于桌面和Web程序。代码行数近10000行,可以算是一个实现了最基本功能的GIS系统,有利于研究学习使用。

涉及知识点:

  • SharpMap的基本概念:Layer(图层,常用图层:VectorLayer,LabelLayer) , IProvider(数据提供者,常用数据源:Ogr(对应MapInfo),ShapFile,DataTablePoint(对应DataSet))
  • 坐标转换:主要用于经纬度和地图坐标的转换。

SharpMap知识结构图:

效果图如下:

(一)车辆轨迹图:数据源:Excel数据

(二)定点数据(数据源:Excel)将河南省十七个城市,全部插上小红旗

(三)使用MapInfo做背景文件(此处通过程序调整了比例尺)

(四)使用ShapFile做背景图

 

核心代码

  1 using BruTile.Predefined;  2 using GeoAPI.CoordinateSystems.Transformations;  3 using ProjNet.CoordinateSystems;  4 using ProjNet.CoordinateSystems.Transformations;  5 using SharpMap;  6 using SharpMap.Data.Providers;  7 using SharpMap.Layers;  8 using SharpMap.Rendering;  9 using SharpMap.Rendering.Thematics; 10 using SharpMap.Styles; 11 using System; 12 using System.Collections.Generic; 13 using System.Data; 14 using System.Data.OleDb; 15 using System.Drawing; 16 using System.Drawing.Drawing2D; 17 using System.Drawing.Text; 18 using System.Linq; 19 using System.Text; 20 using Point = GeoAPI.Geometries.Coordinate; 21 namespace DemoSharpMap 22 { 23     public class SharpMapHelper 24     { 25  26         private const string XlsConnectionString = "Provider={2};Data Source={0}\\{1};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""; 27  28         public static Map InitializeMap(MapType tt,float angle) 29         { 30             Map map = null; 31             switch (tt) 32             { 33                 case MapType.RunLine: 34                     map = InitializeMapOsmWithXls(angle); 35                     break; 36                 case MapType.MapInfo: 37                     map = InitializeMapinfo(angle); 38                     break; 39                 case MapType.ShapeFile: 40                     map = InitializeMapOrig(angle); 41                     break; 42                 case MapType.Static: 43                     map = InitializeMapOsmWithXls2(angle); 44                     break; 45                 default: 46                     map = InitializeMapOsmWithXls(angle); 47                     break; 48             } 49             return map; 50         } 51  52         /// <summary> 53         /// MapInfo格式的地图文件 54         /// </summary> 55         /// <param name="angle"></param> 56         /// <returns></returns> 57         private static Map InitializeMapinfo(float angle) 58         { 59             //Initialize a new map of size 'imagesize' 60             Map map = new Map(); 61  62             //Set up the countries layer 63             VectorLayer layCountries = new VectorLayer("Countries"); 64             //Set the datasource to a shapefile in the App_data folder 65             try 66             { 67                 layCountries.DataSource = new Ogr("GeoData/MapInfo/countriesMapInfo.tab"); 68             } 69             catch (TypeInitializationException ex) 70             { 71                 if (ex.Message == "The type initializer for 'OSGeo.OGR.Ogr' threw an exception.") 72                 { 73                     throw new Exception( 74                         String.Format( 75                             "The application threw a PINVOKE exception. You probably need to copy the unmanaged dll's to your bin directory. They are a part of fwtools {0}. You can download it from: http://home.gdal.org/fwtools/", 76                             GdalRasterLayer.FWToolsVersion)); 77                 } 78                 throw; 79             } 80  81             //Set fill-style to green 82             layCountries.Style.Fill = new SolidBrush(Color.Green); 83             //Set the polygons to have a black outline 84             layCountries.Style.Outline = Pens.Black; 85             layCountries.Style.EnableOutline = true; 86             layCountries.SRID = 4326; 87  88             //Set up a river layer 89             VectorLayer layRivers = new VectorLayer("Rivers"); 90             //Set the datasource to a shapefile in the App_data folder 91             layRivers.DataSource = new Ogr("GeoData/MapInfo/riversMapInfo.tab"); 92             //Define a blue 1px wide pen 93             layRivers.Style.Line = new Pen(Color.Blue, 1); 94             layRivers.SRID = 4326; 95  96             //Set up a river layer 97             VectorLayer layCities = new VectorLayer("Cities"); 98             //Set the datasource to a shapefile in the App_data folder 99             layCities.DataSource = new Ogr("GeoData/MapInfo/citiesMapInfo.tab");100             layCities.Style.SymbolScale = 0.8f;101             layCities.MaxVisible = 40;102             layCities.SRID = 4326;103 104             //Set up a country label layer105             LabelLayer layLabel = new LabelLayer("Country labels");106             layLabel.DataSource = layCountries.DataSource;107             layLabel.Enabled = true;108             layLabel.LabelColumn = "Name";109             layLabel.Style = new LabelStyle();110             layLabel.Style.ForeColor = Color.White;111             layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12);112             layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0));113             layLabel.MaxVisible = 90;114             layLabel.MinVisible = 30;115             layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center;116             layLabel.SRID = 4326;117             layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest;118 119             //Set up a city label layer120             LabelLayer layCityLabel = new LabelLayer("City labels");121             layCityLabel.DataSource = layCities.DataSource;122             layCityLabel.Enabled = true;123             layCityLabel.LabelColumn = "Name";124             layCityLabel.Style = new LabelStyle();125             layCityLabel.Style.ForeColor = Color.Black;126             layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11);127             layCityLabel.MaxVisible = layLabel.MinVisible;128             layCityLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left;129             layCityLabel.Style.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom;130             layCityLabel.Style.Offset = new PointF(3, 3);131             layCityLabel.Style.Halo = new Pen(Color.Yellow, 2);132             layCityLabel.TextRenderingHint = TextRenderingHint.AntiAlias;133             layCityLabel.SmoothingMode = SmoothingMode.AntiAlias;134             layCityLabel.SRID = 4326;135             layCityLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection;136             layCityLabel.Style.CollisionDetection = true;137 138             //Add the layers to the map object.139             //The order we add them in are the order they are drawn, so we add the rivers last to put them on top140             map.Layers.Add(layCountries);141             map.Layers.Add(layRivers);142             map.Layers.Add(layCities);143             map.Layers.Add(layLabel);144             map.Layers.Add(layCityLabel);145             //增加Layers146             var xlsPath = string.Format(XlsConnectionString, System.IO.Directory.GetCurrentDirectory(), "GeoData\\Henan.xls", Properties.Settings.Default.OleDbProvider);147             var ds = GetDataFromExcel(xlsPath, "Cities");148             //var ct = GetCoordinateTransformation();149             //TransCoordinate(ds, ct);150             string columeName = "Rotation";151             //Add Rotation Column152             AddColumeToDataSet(ds, columeName, -angle);153 154             var xlsLayer = GetLayerFromDataSet2(ds, Color.GreenYellow);//Set up provider155            156             map.Layers.Add(xlsLayer); //Add layer to map157             map.Center = xlsLayer.Envelope.Centre;// new Point(0, 0);158             map.MapScale = 350;159             //map.Center = new Point(0, 0);160 161             //_ogrSampleDataset = "MapInfo";162 163             //Matrix mat = new Matrix();164             //mat.RotateAt(angle, map.WorldToImage(map.Center));165             //map.MapTransform = mat;166 167             //map.ZoomToBox(xlsLayer.Envelope);168             return map;169         }170 171         /// <summary>172         /// ShapeFile173         /// </summary>174         /// <param name="angle"></param>175         /// <returns></returns>176         private static Map InitializeMapOrig(float angle)177         {178             //Initialize a new map of size 'imagesize'179             Map map = new Map();180 181             //Set up the countries layer182             VectorLayer layCountries = new VectorLayer("Countries");183             //Set the datasource to a shapefile in the App_data folder184             layCountries.DataSource = new ShapeFile("GeoData/World/countries.shp", true);185             //Set fill-style to green186             layCountries.Style.Fill = new SolidBrush(Color.FromArgb(64, Color.Green));187             //Set the polygons to have a black outline188             layCountries.Style.Outline = Pens.Black;189             layCountries.Style.EnableOutline = true;190             layCountries.SRID = 4326;191 192             //Set up a river layer193             VectorLayer layRivers = new VectorLayer("Rivers");194             //Set the datasource to a shapefile in the App_data folder195             layRivers.DataSource = new ShapeFile("GeoData/World/rivers.shp", true);196             //Define a blue 1px wide pen197             layRivers.Style.Line = new Pen(Color.Blue, 1);198             layRivers.SRID = 4326;199 200             //Set up a cities layer201             VectorLayer layCities = new VectorLayer("Cities");202             //Set the datasource to a shapefile in the App_data folder203             layCities.DataSource = new ShapeFile("GeoData/World/cities.shp", true);204             layCities.Style.SymbolScale = 0.8f;205             layCities.MaxVisible = 40;206             layCities.SRID = 4326;207 208             //Set up a country label layer209             LabelLayer layLabel = new LabelLayer("Country labels");210             layLabel.DataSource = layCountries.DataSource;211             layLabel.Enabled = true;212             layLabel.LabelColumn = "Name";213             layLabel.Style = new LabelStyle();214             layLabel.Style.ForeColor = Color.White;215             layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12);216             layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0));217             layLabel.MaxVisible = 90;218             layLabel.MinVisible = 30;219             layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center;220             layLabel.SRID = 4326;221             layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest;222             layLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection;223             layLabel.Style.CollisionDetection = true;224             layLabel.LabelPositionDelegate = fdr => fdr.Geometry.InteriorPoint.Coordinate;225             layLabel.PriorityColumn = "POPDENS";226 227             //Set up a city label layer228             LabelLayer layCityLabel = new LabelLayer("City labels");229             layCityLabel.DataSource = layCities.DataSource;230             layCityLabel.Enabled = true;231             layCityLabel.LabelColumn = "Name";232             layCityLabel.Style = new LabelStyle();233             layCityLabel.Style.ForeColor = Color.Black;234             layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11);235             layCityLabel.MaxVisible = layLabel.MinVisible;236             layCityLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left;237             layCityLabel.Style.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom;238             layCityLabel.Style.Offset = new PointF(3, 3);239             layCityLabel.Style.Halo = new Pen(Color.Yellow, 2);240             layCityLabel.TextRenderingHint = TextRenderingHint.AntiAlias;241             layCityLabel.SmoothingMode = SmoothingMode.AntiAlias;242             layCityLabel.SRID = 4326;243             layCityLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection;244             layCityLabel.Style.CollisionDetection = true;245             layCityLabel.PriorityColumn = "POPULATION";246             layCityLabel.Theme = new GradientTheme(layCityLabel.PriorityColumn, 250000, 5000000,247                 new LabelStyle248                 {249                     MaxVisible = 10,250                     CollisionBuffer = new Size(0, 0),251                     CollisionDetection = true,252                     Enabled = true,253                     ForeColor = Color.LightSlateGray,254                     Halo = new Pen(Color.Silver, 1),255                     HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center,256                     VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle,257                     Font = new Font(GenericFontFamilies.SansSerif.ToString(), 8f, FontStyle.Regular)258                 },259                 new LabelStyle260                 {261                     MaxVisible = layLabel.MinVisible,262                     CollisionBuffer = new Size(3, 3),263                     CollisionDetection = true,264                     Enabled = true,265                     ForeColor = Color.LightSlateGray,266                     Halo = new Pen(Color.Silver, 5),267                     HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center,268                     VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle,269                     Font = new Font(GenericFontFamilies.SansSerif.ToString(), 16f, FontStyle.Bold)270                 });271 272             bool ignoreLength = false;273 274             var layRiverLabel = new LabelLayer("River labels")275             {276                 DataSource = layRivers.DataSource,277                 Enabled = true,278                 LabelColumn = "Name",279                 TextRenderingHint = TextRenderingHint.AntiAlias,280                 SmoothingMode = SmoothingMode.AntiAlias,281                 SRID = 4326,282                 LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection,283                 MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.CommonCenter,284                 Style =285                                            new LabelStyle286                                            {287                                                ForeColor = Color.DarkBlue,288                                                Font = new Font(FontFamily.GenericSansSerif, 11),289                                                HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center,290                                                VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle,291                                                //CollisionDetection = true,292                                                Halo = new Pen(Color.Azure, 2),293                                                IgnoreLength = ignoreLength,294                                                Offset = new PointF(0, -10)295 296                                            },297             };298 299             //Add the layers to the map object.300             //The order we add them in are the order they are drawn, so we add the rivers last to put them on top301             //map.BackgroundLayer.Add(AsyncLayerProxyLayer.Create(layCountries));302             map.Layers.Add(layCountries);303             map.Layers.Add(layRivers);304             map.Layers.Add(layCities);305             map.Layers.Add(layLabel);306             map.Layers.Add(layCityLabel);307             map.Layers.Add(layRiverLabel);308 309             //增加Layers310             var xlsPath = string.Format(XlsConnectionString, System.IO.Directory.GetCurrentDirectory(), "GeoData\\Henan.xls", Properties.Settings.Default.OleDbProvider);311             var ds = GetDataFromExcel(xlsPath, "Cities");312             //var ct = GetCoordinateTransformation();313             //TransCoordinate(ds, ct);314             string columeName = "Rotation";315             //Add Rotation Column316             AddColumeToDataSet(ds, columeName, -angle);317 318             var xlsLayer = GetLayerFromDataSet2(ds, Color.GreenYellow);//Set up provider319 320             map.Layers.Add(xlsLayer); //Add layer to map321                                       //limit the zoom to 360 degrees width322                                       //map.MaximumZoom = 360;323                                       //map.BackColor = Color.LightBlue;324 325             //map.Zoom = 360;326             map.Center = xlsLayer.Envelope.Centre;// new Point(0, 0);327             map.MapScale = 350;328             //Matrix mat = new Matrix();329             //mat.RotateAt(angle, map.WorldToImage(map.Center));330             //map.MapTransform = mat;331             //map.ZoomToBox(xlsLayer.Envelope);332             return map;333         }334 335         /// <summary>336         /// 在线显示,圆点显示轨迹337         /// </summary>338         /// <param name="angle"></param>339         /// <returns></returns>340         private static Map InitializeMapOsmWithXls(float angle)341         {342             var map = new Map();343 344             var tileLayer = new TileAsyncLayer(345                 KnownTileSources.Create(KnownTileSource.OpenStreetMap), "TileLayer - OSM with XLS");346             tileLayer.SRID = 4326;347             map.BackgroundLayer.Add(tileLayer);348 349             //Get data from excel350             var xlsPath = string.Format(XlsConnectionString, System.IO.Directory.GetCurrentDirectory(), "GeoData\\Cities.xls", Properties.Settings.Default.OleDbProvider);351             var ds = GetDataFromExcel(xlsPath, "Cities");352             var ds1 = GetDataFromExcel(xlsPath, "Cities2");353             var ct = GetCoordinateTransformation();354             TransCoordinate(ds, ct);355             TransCoordinate(ds1, ct);356             string columeName = "Rotation";357             //Add Rotation Column358             AddColumeToDataSet(ds, columeName, -angle);359             AddColumeToDataSet(ds1, columeName, -angle);360 361             var xlsLayer = GetLayerFromDataSet(ds, Color.GreenYellow);//Set up provider362             map.Layers.Add(xlsLayer); //Add layer to map363 364             var xlsLayer1 = GetLayerFromDataSet(ds1, Color.Red);365             map.Layers.Add(xlsLayer1);366 367             var xlsLabelLayer = GetLabelLayerByVectorLayer(xlsLayer, "XLSLabel");368 369             xlsLabelLayer.Theme = new SharpMap.Rendering.Thematics.FontSizeTheme(xlsLabelLayer, map) { FontSizeScale = 1000f };370             map.Layers.Add(xlsLabelLayer);371             map.ZoomToBox(xlsLayer.Envelope.ExpandedBy(xlsLayer1.Envelope));372             return map;373         }374 375         /// <summary>376         /// 在线显示,图标显示轨迹377         /// </summary>378         /// <param name="angle"></param>379         /// <returns></returns>380         private static Map InitializeMapOsmWithXls2(float angle)381         {382             var map = new Map();383 384             var tileLayer = new TileAsyncLayer(385                 KnownTileSources.Create(KnownTileSource.OpenStreetMap), "TileLayer - OSM with XLS");386             tileLayer.SRID = 4326;387             map.BackgroundLayer.Add(tileLayer);388 389             //Get data from excel390             var xlsPath = string.Format(XlsConnectionString, System.IO.Directory.GetCurrentDirectory(), "GeoData\\Henan.xls", Properties.Settings.Default.OleDbProvider);391             var ds = GetDataFromExcel(xlsPath, "Cities");392             var ct = GetCoordinateTransformation();393             TransCoordinate(ds, ct);394             string columeName = "Rotation";395             //Add Rotation Column396             AddColumeToDataSet(ds, columeName, -angle);397 398             var xlsLayer = GetLayerFromDataSet2(ds, Color.GreenYellow);//Set up provider399             map.Layers.Add(xlsLayer); //Add layer to map400 401             var xlsLabelLayer = GetLabelLayerByVectorLayer(xlsLayer, "XLSLabel");402 403             xlsLabelLayer.Theme = new FontSizeTheme(xlsLabelLayer, map) { FontSizeScale = 1000f };404             map.Layers.Add(xlsLabelLayer);405             map.ZoomToBox(xlsLayer.Envelope);406             return map;407         }408 409         /// <summary>410         /// 从Excel中读取数据411         /// </summary>412         private static DataSet GetDataFromExcel(string xlsPath, string sheetName)413         {414             DataSet ds = new DataSet("XLS");415             string sql = string.Format("SELECT * FROM [{0}$];", sheetName);416             using (var cn = new OleDbConnection(xlsPath))417             {418                 cn.Open();419                 using (var da = new OleDbDataAdapter(new OleDbCommand(sql, cn)))420                 {421                     da.Fill(ds);422                 }423             }424             return ds;425         }426 427         /// <summary>428         /// 获取坐标转换对象429         /// </summary>430         /// <returns></returns>431         private static ICoordinateTransformation GetCoordinateTransformation()432         {433             //The SRS for this datasource is EPSG:4326, therefore we need to transfrom it to OSM projection434             var ctf = new CoordinateTransformationFactory();435             var cf = new CoordinateSystemFactory();436             var epsg4326 = cf.CreateFromWkt("GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]");437             var epsg3857 = cf.CreateFromWkt("PROJCS[\"Popular Visualisation CRS / Mercator\", GEOGCS[\"Popular Visualisation CRS\", DATUM[\"Popular Visualisation Datum\", SPHEROID[\"Popular Visualisation Sphere\", 6378137, 0, AUTHORITY[\"EPSG\",\"7059\"]], TOWGS84[0, 0, 0, 0, 0, 0, 0], AUTHORITY[\"EPSG\",\"6055\"]],PRIMEM[\"Greenwich\", 0, AUTHORITY[\"EPSG\", \"8901\"]], UNIT[\"degree\", 0.0174532925199433, AUTHORITY[\"EPSG\", \"9102\"]], AXIS[\"E\", EAST], AXIS[\"N\", NORTH], AUTHORITY[\"EPSG\",\"4055\"]], PROJECTION[\"Mercator\"], PARAMETER[\"False_Easting\", 0], PARAMETER[\"False_Northing\", 0], PARAMETER[\"Central_Meridian\", 0], PARAMETER[\"Latitude_of_origin\", 0], UNIT[\"metre\", 1, AUTHORITY[\"EPSG\", \"9001\"]], AXIS[\"East\", EAST], AXIS[\"North\", NORTH], AUTHORITY[\"EPSG\",\"3857\"]]");438             var ct = ctf.CreateFromCoordinateSystems(epsg4326, epsg3857);439             return ct;440         }441 442         /// <summary>443         /// 转换地球经纬度到坐标444         /// </summary>445         /// <param name="ds"></param>446         /// <param name="ct"></param>447         private static void TransCoordinate(DataSet ds, ICoordinateTransformation ct)448         {449             foreach (System.Data.DataRow row in ds.Tables[0].Rows)450             {451                 if (row["X"] == DBNull.Value || row["Y"] == DBNull.Value) continue;452                 var coords = new[] { Convert.ToDouble(row["X"]), Convert.ToDouble(row["Y"]) };453                 coords = ct.MathTransform.Transform(coords);454                 row["X"] = coords[0];455                 row["Y"] = coords[1];456             }457         }458 459         /// <summary>460         /// 增加列461         /// </summary>462         /// <param name="ds"></param>463         /// <param name="columeName"></param>464         /// <param name="columeValue"></param>465         private static void AddColumeToDataSet(DataSet ds, string columeName, float columeValue)466         {467             ds.Tables[0].Columns.Add(columeName, typeof(float));468             foreach (System.Data.DataRow row in ds.Tables[0].Rows)469             {470                 row["Rotation"] = -columeValue;471             }472         }473 474         /// <summary>475         /// 轨迹用点表示476         /// </summary>477         /// <param name="ds"></param>478         /// <param name="c"></param>479         /// <returns></returns>480         private static VectorLayer GetLayerFromDataSet(DataSet ds, Color c)481         {482             var xlsProvider = new DataTablePoint(ds.Tables[0], "OID", "X", "Y");483             var xlsLayer = new VectorLayer("XLS", xlsProvider)484             { Style = new VectorStyle() { PointColor = new SolidBrush(c) } };485             return xlsLayer;486         }487 488         /// <summary>489         /// 获取带图标的图层490         /// </summary>491         /// <param name="ds"></param>492         /// <param name="c"></param>493         /// <returns></returns>494         private static VectorLayer GetLayerFromDataSet2(DataSet ds, Color c)495         {496             var xlsProvider = new DataTablePoint(ds.Tables[0], "OID", "X", "Y");497             var xlsLayer = new VectorLayer("XLS", xlsProvider)498             { Style = { Symbol=Properties.Resources.redflag} };499             return xlsLayer;500         }501 502         private static LabelLayer GetLabelLayerByVectorLayer(VectorLayer xlsLayer, string layerName)503         {504             var xlsLabelLayer = new LabelLayer(layerName)505             {506                 DataSource = xlsLayer.DataSource,507                 LabelColumn = "NAME",508                 //PriorityColumn = "Population",509                 Style =510                     {511                         CollisionBuffer = new System.Drawing.SizeF(2f, 2f),512                         CollisionDetection = true513                     },514                 LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection515             };516             return xlsLabelLayer;517         }518     }519 520     public enum MapType {521         ShapeFile = 0,522         MapInfo = 1,523         RunLine = 2,//运行轨迹524         Static = 3 //定点数据525 526     }527 }
View Code

 

源码下载链接

 

备注:

1. 因用的MapInfo和Shape源文件为源码里面的,所有为英文显示。

 

原创粉丝点击