SharpMap V1.1 For Web教程系列之——地图展示
2015-01-14 08:48
260 查看
开篇先说本次的开发环境吧。采用Vs2010,.Net Framework 4.0。
为了更好的调试程序,建议在IIS中进行调试及运行,个人非常不喜欢利用VS自己提供的WebServer去调试程序,而且很多在Web.config中的设置也需要在IIS中才能起到效果!
开发环境我就不要介绍了,先来说说SharpMap的组件要求吧。由于SharpMap的架构一直在变化和改进过程中,因此参考网络上别人的事例代码,你会发现都运行不起来,不是接口没了,就是命名空间变了,这点我也希望SharpMap早日稳定下来。
这次使用的SharpMap的版本是V1.1版本,官方意见提供最新稳定版的下载了,官方网址为:http://sharpmap.codeplex.com/
SharpMap 1.1版本的下载地址为:http://sharpmap.codeplex.com/downloads/get/792797,发布时间为2014年12月11日;该版本只是SharpMap的核心库(Core+UI),下载完后,为了Web开发还必须下载一个Web端的库,本人做完因为这一步走了好多弯路,网络上的教程也没有人写上着一点。在官网的DOWNLOADS节点下有个下载界面,需要下载SharpMap.Web这个组件。
OK!所需库完成后,下面进行Asp.Net的网站开发!你也可以不看下面的代码,直接下载整个网站。解决方案下载地址:http://pan.baidu.com/s/1i3vdUcd
打开VS2010,新建一个网站,新建一个WebForm,我这里命名为“Map.aspx”,下面贴代码:
Map.aspx:地图展示页面
View Code
为了更好的调试程序,建议在IIS中进行调试及运行,个人非常不喜欢利用VS自己提供的WebServer去调试程序,而且很多在Web.config中的设置也需要在IIS中才能起到效果!
开发环境我就不要介绍了,先来说说SharpMap的组件要求吧。由于SharpMap的架构一直在变化和改进过程中,因此参考网络上别人的事例代码,你会发现都运行不起来,不是接口没了,就是命名空间变了,这点我也希望SharpMap早日稳定下来。
这次使用的SharpMap的版本是V1.1版本,官方意见提供最新稳定版的下载了,官方网址为:http://sharpmap.codeplex.com/
SharpMap 1.1版本的下载地址为:http://sharpmap.codeplex.com/downloads/get/792797,发布时间为2014年12月11日;该版本只是SharpMap的核心库(Core+UI),下载完后,为了Web开发还必须下载一个Web端的库,本人做完因为这一步走了好多弯路,网络上的教程也没有人写上着一点。在官网的DOWNLOADS节点下有个下载界面,需要下载SharpMap.Web这个组件。
OK!所需库完成后,下面进行Asp.Net的网站开发!你也可以不看下面的代码,直接下载整个网站。解决方案下载地址:http://pan.baidu.com/s/1i3vdUcd
打开VS2010,新建一个网站,新建一个WebForm,我这里命名为“Map.aspx”,下面贴代码:
Map.aspx:地图展示页面
using System; using System.Collections.Generic; using System.Linq; using System.Web; using SharpMap; using System.Drawing; using SharpMap.Layers; using SharpMap.Data.Providers; using SharpMap.Styles; using System.Drawing.Text; using SharpMap.Rendering; using ColorBlend=SharpMap.Rendering.Thematics.ColorBlend; using Point=GeoAPI.Geometries.Coordinate; using System.Drawing.Drawing2D; /// <summary> /// Summary description for MapHelper /// </summary> public class MapHelper { public MapHelper() { } public static Map InitializeMap(Size size) { HttpContext.Current.Trace.Write("Initializing map..."); //Initialize a new map of size 'imagesize' Map map = new Map(size); //Set up the countries layer VectorLayer layCountries = new VectorLayer("Countries"); //Set the datasource to a shapefile in the App_data folder layCountries.DataSource = new ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\countries.shp"), true); //Set fill-style to green layCountries.Style.Fill = new SolidBrush(Color.Green); //Set the polygons to have a black outline layCountries.Style.Outline = Pens.Black; layCountries.Style.EnableOutline = true; layCountries.SRID = 4326; //Set up a river layer VectorLayer layRivers = new VectorLayer("Rivers"); //Set the datasource to a shapefile in the App_data folder layRivers.DataSource = new ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\rivers.shp"), true); //Define a blue 1px wide pen layRivers.Style.Line = new Pen(Color.Blue, 1); layRivers.SRID = 4326; //Set up a river layer VectorLayer layCities = new VectorLayer("Cities"); //Set the datasource to a shapefile in the App_data folder layCities.DataSource = new ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\cities.shp"), true); //Define a blue 1px wide pen //layCities.Style.Symbol = new Bitmap(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\icon.png")); layCities.Style.SymbolScale = 0.8f; layCities.MaxVisible = 40; layCities.SRID = 4326; //Set up a country label layer LabelLayer layLabel = new LabelLayer("Country labels"); layLabel.DataSource = layCountries.DataSource; layLabel.Enabled = true; layLabel.LabelColumn = "Name"; layLabel.Style = new LabelStyle(); layLabel.Style.ForeColor = Color.White; layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12); layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0)); layLabel.MaxVisible = 90; layLabel.MinVisible = 30; layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center; layLabel.SRID = 4326; layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest; //Set up a city label layer LabelLayer layCityLabel = new LabelLayer("City labels"); layCityLabel.DataSource = layCities.DataSource; layCityLabel.Enabled = true; layCityLabel.LabelColumn = "Name"; layCityLabel.Style = new LabelStyle(); layCityLabel.Style.ForeColor = Color.Black; layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11); layCityLabel.MaxVisible = layLabel.MinVisible; layCityLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left; layCityLabel.Style.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom; layCityLabel.Style.Offset = new PointF(3, 3); layCityLabel.Style.Halo = new Pen(Color.Yellow, 2); layCityLabel.TextRenderingHint = TextRenderingHint.AntiAlias; layCityLabel.SmoothingMode = SmoothingMode.AntiAlias; layCityLabel.SRID = 4326; layCityLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection; layCityLabel.Style.CollisionDetection = true; //Add the layers to the map object. //The order we add them in are the order they are drawn, so we add the rivers last to put them on top map.Layers.Add(layCountries); map.Layers.Add(layRivers); map.Layers.Add(layCities); map.Layers.Add(layLabel); map.Layers.Add(layCityLabel); //limit the zoom to 360 degrees width map.MaximumZoom = 360; map.BackColor = Color.LightBlue; map.Zoom = 360; map.Center = new Point(0, 0); HttpContext.Current.Trace.Write("Map initialized"); return map; } public static Map InitializeTaiyuanMap(Size size) { HttpContext.Current.Trace.Write("Initializing map..."); //Initialize a new map of size 'imagesize' SharpMap.Map map = new SharpMap.Map(size); //设置太原市区域图层 SharpMap.Layers.VectorLayer layTy = new SharpMap.Layers.VectorLayer("ty"); layTy.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\区县级行政区划R.shp"), true); layTy.Style.Fill = new SolidBrush(Color.FromArgb(242, 239, 233)); layTy.Style.Outline = System.Drawing.Pens.Black; layTy.Style.EnableOutline = true; layTy.SRID = 4326; //设置镇的图层 SharpMap.Layers.VectorLayer layZ = new SharpMap.Layers.VectorLayer("z"); layZ.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\镇.shp"), true); layZ.Style.Fill = new SolidBrush(Color.FromArgb(191, 237, 245)); layZ.Style.Outline = System.Drawing.Pens.Black; layZ.Style.EnableOutline = true; layZ.SRID = 4326; //设置河流的图层 SharpMap.Layers.VectorLayer layHl = new SharpMap.Layers.VectorLayer("Hl"); layHl.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\河流湖泊R.shp"), true); layHl.Style.Fill = new SolidBrush(Color.FromArgb(151, 219, 242)); layHl.Style.Outline = System.Drawing.Pens.Black; layHl.Style.EnableOutline = true; layHl.SRID = 4326; //设置国道的图层 SharpMap.Layers.VectorLayer layGd = new SharpMap.Layers.VectorLayer("gd"); layGd.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\国道L.shp"), true); layGd.Style.Fill = new SolidBrush(Color.FromArgb(255, 254, 169)); layZ.Style.Outline = System.Drawing.Pens.Black; layZ.Style.EnableOutline = true; layGd.Style.Line = new Pen(Color.FromArgb(130, 130, 130), 1); layGd.SRID = 4326; //Set up the countries layer SharpMap.Layers.VectorLayer laySd = new SharpMap.Layers.VectorLayer("sd"); //Set the datasource to a shapefile in the App_data folder laySd.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\省道L.shp"), true); //Set fill-style to green laySd.Style.Fill = new SolidBrush(Color.FromArgb(255, 254, 169)); //Set the polygons to have a black outline laySd.Style.Line = new Pen(Color.FromArgb(130, 130, 130), 1); layZ.Style.Outline = System.Drawing.Pens.Gainsboro; layZ.Style.EnableOutline = true; laySd.SRID = 4326; //Set up a river layer SharpMap.Layers.VectorLayer layRivers = new SharpMap.Layers.VectorLayer("Rivers"); //Set the datasource to a shapefile in the App_data folder layRivers.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\城市主干道L.shp"), true); layRivers.Style.Fill = new SolidBrush(Color.FromArgb(255, 254, 169)); //Define a blue 1px wide pen layRivers.Style.Line = new Pen(Color.FromArgb(130, 130, 130), 1); layRivers.SRID = 4326; //Set up a river layer SharpMap.Layers.VectorLayer layCities = new SharpMap.Layers.VectorLayer("Cities"); //Set the datasource to a shapefile in the App_data folder layCities.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\城市次干道L.shp"), true); //Define a blue 1px wide pen //layCities.Style.Symbol = new Bitmap(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\icon.png")); layCities.Style.SymbolScale = 0.8f; layCities.MaxVisible = 0.2; layCities.SRID = 4326; //Set up a river layer SharpMap.Layers.VectorLayer layDb = new SharpMap.Layers.VectorLayer("db"); //Set the datasource to a shapefile in the App_data folder layDb.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\基础地标.shp"), true); //Define a blue 1px wide pen //layCities.Style.Symbol = new Bitmap(HttpContext.Current.Server.MapPath(@"~\App_data\Taiyuan\icon.png")); layDb.Style.SymbolScale = 0.8f; layDb.MaxVisible = 0.05; layDb.SRID = 4326; //Set up a 镇 label layer SharpMap.Layers.LabelLayer layZLabel = new SharpMap.Layers.LabelLayer("tyz labels"); layZLabel.DataSource = layZ.DataSource; layZLabel.Enabled = true; layZLabel.LabelColumn = "Name"; layZLabel.Style = new SharpMap.Styles.LabelStyle(); layZLabel.Style.ForeColor = Color.White; layZLabel.Style.Font = new Font(FontFamily.GenericSerif, 12); layZLabel.Style.BackColor = new System.Drawing.SolidBrush(Color.Black); layZLabel.MaxVisible = 0.1; layZLabel.MinVisible = 0.05; layZLabel.Style.HorizontalAlignment = SharpMap.Styles.LabelStyle.HorizontalAlignmentEnum.Center; layZLabel.SRID = 4326; layZLabel.MultipartGeometryBehaviour = SharpMap.Layers.LabelLayer.MultipartGeometryBehaviourEnum.Largest; //Set up a city label layer SharpMap.Layers.LabelLayer layCityLabel = new SharpMap.Layers.LabelLayer("City labels"); layCityLabel.DataSource = layCities.DataSource; layCityLabel.Enabled = true; layCityLabel.LabelColumn = "Name"; layCityLabel.Style = new SharpMap.Styles.LabelStyle(); layCityLabel.Style.ForeColor = Color.Black; layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11); layCityLabel.MaxVisible = layZLabel.MinVisible; layCityLabel.Style.HorizontalAlignment = SharpMap.Styles.LabelStyle.HorizontalAlignmentEnum.Left; layCityLabel.Style.VerticalAlignment = SharpMap.Styles.LabelStyle.VerticalAlignmentEnum.Bottom; layCityLabel.Style.Offset = new PointF(3, 3); layCityLabel.Style.Halo = new Pen(Color.Yellow, 2); layCityLabel.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; layCityLabel.SmoothingMode = SmoothingMode.AntiAlias; layCityLabel.SRID = 4326; layCityLabel.LabelFilter = SharpMap.Rendering.LabelCollisionDetection.ThoroughCollisionDetection; layCityLabel.Style.CollisionDetection = true; //Set up a city label layer SharpMap.Layers.LabelLayer layDbLabel = new SharpMap.Layers.LabelLayer("Db labels"); layDbLabel.DataSource = layDb.DataSource; layDbLabel.Enabled = true; layDbLabel.LabelColumn = "Name"; layDbLabel.Style = new SharpMap.Styles.LabelStyle(); layDbLabel.Style.ForeColor = Color.Black; layDbLabel.Style.Font = new Font(FontFamily.GenericSerif, 11); layDbLabel.MaxVisible = layCityLabel.MinVisible; layDbLabel.Style.HorizontalAlignment = SharpMap.Styles.LabelStyle.HorizontalAlignmentEnum.Left; layDbLabel.Style.VerticalAlignment = SharpMap.Styles.LabelStyle.VerticalAlignmentEnum.Bottom; layDbLabel.Style.Offset = new PointF(3, 3); layDbLabel.Style.Halo = new Pen(Color.Yellow, 2); layDbLabel.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; layDbLabel.SmoothingMode = SmoothingMode.AntiAlias; layDbLabel.SRID = 4326; layDbLabel.LabelFilter = SharpMap.Rendering.LabelCollisionDetection.ThoroughCollisionDetection; layCityLabel.Style.CollisionDetection = true; //Add the layers to the map object. //The order we add them in are the order they are drawn, so we add the rivers last to put them on top map.Layers.Add(layTy); map.Layers.Add(layHl); map.Layers.Add(layGd); map.Layers.Add(laySd); map.Layers.Add(layRivers); map.Layers.Add(layCities); map.Layers.Add(layDb); map.Layers.Add(layZLabel); map.Layers.Add(layCityLabel); map.Layers.Add(layDbLabel); //limit the zoom to 360 degrees width map.MaximumZoom = 4; map.BackColor = Color.White; map.Zoom = 4; //map.Center = new SharpMap.Geometries.Point(0, 0); map.Center = new Point(112.48, 37.86); HttpContext.Current.Trace.Write("Map initialized"); return map; } }
View Code
相关文章推荐
- MapGuide应用开发系列(九)---- MapGuide Studio准备地图之网页布局(WebLayout)
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(九) 2D游戏角色在地图上的移动
- Csharp+Asp.net系列教程(二)
- MapGuide open source开发系列教程六: 地图状态与事件(含问题)
- mos开发系列教程八:页面代码研究-地图控件页面结构
- Csharp+Asp.net系列教程(五)
- Struts1.x系列教程(17):使用IncludeAction和ForwardAction类包含和转入Web资源
- Csharp+Asp.net系列教程(四)(1)
- Csharp+Asp.net系列教程(四)
- Csharp+Asp.net系列教程(五)
- Csharp+Asp.net系列教程(一)
- Struts1.x系列教程(16):使用LocaleAction类实现国际化的Web程序
- Struts1.x系列教程(16):使用LocaleAction类实现国际化的Web程序
- Csharp+Asp.net系列教程(三)
- Csharp+Asp.net系列教程(四)
- Csharp+Asp.net系列教程(三)
- Csharp+Asp.net系列教程(六)
- Csharp+Asp.net系列教程(一)