====== Source Code WebAPIEditionSample Basic Styling.zip ====== ====Global.asax.cs==== using System.Web.Http; using System.Web.Mvc; namespace BasicStyling { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); } } } ====WebApiConfig.cs==== using System.Web.Http; namespace BasicStyling { public static class WebApiConfig { public static void Register(HttpConfiguration config) { //Enable RouteAttribute config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); //Enable RouteAttribute, if delete this line, will throw other exceptions config.EnsureInitialized(); } } } ====BasicStylingController.cs==== using Newtonsoft.Json; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Web.Http; using ThinkGeo.MapSuite.Core; using ThinkGeo.MapSuite.WebApiEdition; namespace BasicStyling.Controllers { [RoutePrefix("BasicStyling")] public class BasicStylingController : ApiController { static BasicStylingController() { } [Route("{styleId}/{z}/{x}/{y}/{accessId}")] [HttpGet] public HttpResponseMessage GetDynamicLayerTile(string styleId, int z, int x, int y, string accessId) { LayerOverlay layerOverlay = GetStyleOverlay(styleId, accessId); return DrawTileImage(layerOverlay, z, x, y); } private LayerOverlay GetStyleOverlay(string styleId, string accessId) { LayerOverlay layerOverlay = new LayerOverlay(); switch (styleId) { case "PredefinedStyles": foreach (var layer in LayerBuilder.GetPredefinedStyleLayers()) { layerOverlay.Layers.Add(layer); } break; case "AreaStyle": layerOverlay.Layers.Add(LayerBuilder.GetAreaStyleLayer(styleId, accessId)); break; case "LineStyle": layerOverlay.Layers.Add(LayerBuilder.GetLineStyleLayer(styleId, accessId)); break; case "ImagePointStyle": layerOverlay.Layers.Add(LayerBuilder.GeImagePointStyleLayer()); break; case "SymbolPoint": layerOverlay.Layers.Add(LayerBuilder.GetSymbolPointLayer(styleId, accessId)); break; case "CharacterPoint": layerOverlay.Layers.Add(LayerBuilder.GetCharacterPointLayer()); break; case "StyleByZoomLevel": foreach (var layer in LayerBuilder.GetMultipleStyleLayers()) { layerOverlay.Layers.Add(layer); } break; case "CompoundStyle": layerOverlay.Layers.Add(LayerBuilder.GetCompoundStyleLayer()); break; default: break; } return layerOverlay; } [Route("GetStyle/{styleId}/{accessId}")] public Dictionary GetStyle(string styleId, string accessId) { Dictionary styles = new Dictionary(); switch (styleId) { case "AreaStyle": styles = LayerBuilder.GetAreaLayerStyle(styleId, accessId); break; case "LineStyle": styles = LayerBuilder.GetLineLayerStyle(styleId, accessId); break; case "SymbolPoint": styles = LayerBuilder.GetSymbolPointLayerStyle(styleId, accessId); break; } return styles; } [Route("UpdateStyle/{styleId}/{accessId}")] public bool UpdateStyle(string styleId, string accessId, [FromBody] string postData) { Dictionary styles = JsonConvert.DeserializeObject>(postData); LayerBuilder.UpdateLayerStyle(styleId, accessId, styles); return true; } private HttpResponseMessage DrawTileImage(LayerOverlay layerOverlay, int z, int x, int y) { using (Bitmap bitmap = new Bitmap(256, 256)) { GdiPlusGeoCanvas geoCanvas = new GdiPlusGeoCanvas(); RectangleShape boundingBox = WebApiExtentHelper.GetBoundingBoxForXyz(x, y, z, GeographyUnit.Meter); geoCanvas.BeginDrawing(bitmap, boundingBox, GeographyUnit.Meter); layerOverlay.Draw(geoCanvas); geoCanvas.EndDrawing(); MemoryStream ms = new MemoryStream(); bitmap.Save(ms, ImageFormat.Png); HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.OK); msg.Content = new ByteArrayContent(ms.ToArray()); msg.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png"); return msg; } } } } ====LayerBuilder.cs==== using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using ThinkGeo.MapSuite.Core; namespace BasicStyling.Controllers { public static class LayerBuilder { private static readonly string baseDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"); internal static Dictionary GetAreaLayerStyle(string styleId, string accessId) { FeatureLayer featureLayer = (FeatureLayer)GetAreaStyleLayer(styleId, accessId); Dictionary styles = new Dictionary(); GeoColor fillSolidBrushColor = featureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.FillSolidBrush.Color; styles["FillSolidBrushColor"] = fillSolidBrushColor.HtmlColor; styles["FillSolidBrushAalpha"] = fillSolidBrushColor.AlphaComponent; GeoColor outlinePenColor = featureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color; styles["OutlinePenColor"] = outlinePenColor.HtmlColor; styles["OutlinePenAalpha"] = outlinePenColor.AlphaComponent; styles["OutlinePenWidth"] = featureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width; return styles; } internal static Dictionary GetLineLayerStyle(string styleId, string accessId) { FeatureLayer featureLayer = (FeatureLayer)GetLineStyleLayer(styleId, accessId); Dictionary styles = new Dictionary(); GeoPen centerPen = featureLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.CenterPen; styles["CenterPenColor"] = centerPen.Color.HtmlColor; styles["CenterPenAlpha"] = centerPen.Color.AlphaComponent; styles["CenterPenWidth"] = centerPen.Width; GeoPen innerPen = featureLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.InnerPen; styles["InnerPenColor"] = innerPen.Color.HtmlColor; styles["InnerPenAlpha"] = innerPen.Color.AlphaComponent; styles["InnerPenWidth"] = innerPen.Width; GeoPen outerPen = featureLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.OuterPen; styles["OuterPenColor"] = outerPen.Color.HtmlColor; styles["OuterPenAlpha"] = outerPen.Color.AlphaComponent; styles["OuterPenWidth"] = outerPen.Width; return styles; } internal static Dictionary GetSymbolPointLayerStyle(string styleId, string accessId) { FeatureLayer featureLayer = (FeatureLayer)GetSymbolPointLayer(styleId, accessId); Dictionary styles = new Dictionary(); PointStyle targetPointStyle = featureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle; styles["SymbolPointType"] = targetPointStyle.SymbolType; styles["SymbolPointSize"] = targetPointStyle.SymbolSize; styles["symbolPointRotationAngle"] = targetPointStyle.RotationAngle; GeoPen symbolPen = targetPointStyle.SymbolPen; styles["SymbolPenColor"] = symbolPen.Color.HtmlColor; styles["SymbolPointPenAlpha"] = symbolPen.Color.AlphaComponent; styles["SymbolPointPenWidth"] = symbolPen.Width; GeoColor symbolSolidBrushColor = targetPointStyle.SymbolSolidBrush.Color; styles["SymbolSolidBrushColor"] = symbolSolidBrushColor.HtmlColor; styles["SymbolSolidBrushAlpha"] = symbolSolidBrushColor.AlphaComponent; return styles; } internal static void UpdateLayerStyle(string styleId, string accessId, Dictionary styles) { string styleFile = string.Format("{0}_{1}.json", accessId, styleId); string styleFilePath = Path.Combine(baseDirectory, "Temp", styleFile); using (StreamWriter streamWriter = new StreamWriter(styleFilePath, false)) { streamWriter.WriteLine(JsonConvert.SerializeObject(styles)); } } internal static Collection GetPredefinedStyleLayers() { Collection layers = new Collection(); BackgroundLayer backgroundLayer = new BackgroundLayer(WorldMapKitAreaStyles.Water().FillSolidBrush); layers.Add(backgroundLayer); ShapeFileFeatureLayer countriesLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "Countries.shp")); countriesLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = WorldMapKitAreaStyles.BaseLand(); countriesLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen = new GeoPen(GeoColors.Gray); countriesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; layers.Add(countriesLayer); ShapeFileFeatureLayer lakeLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "lake.shp")); lakeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = WorldMapKitAreaStyles.Water(); lakeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; layers.Add(lakeLayer); ShapeFileFeatureLayer usStatesLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "USStates.shp")); usStatesLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = WorldMapKitAreaStyles.BaseLand(); usStatesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; layers.Add(usStatesLayer); ShapeFileFeatureLayer highwayNetworkShapeLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "USHighwayNetwork.shp")); highwayNetworkShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = WorldMapKitLineStyles.Highway(1); highwayNetworkShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; layers.Add(highwayNetworkShapeLayer); ShapeFileFeatureLayer majorCitiesLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "USMajorCities.shp")); majorCitiesLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = WorldMapKitTextStyles.Poi("AREANAME", 7, 7); majorCitiesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; layers.Add(majorCitiesLayer); return layers; } internal static Layer GetAreaStyleLayer(string styleId, string accessId) { ShapeFileFeatureLayer areaShapeLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "ThinkGeoArea.shp")); AreaStyle areaStyle = new AreaStyle(); areaStyle.FillSolidBrush = new GeoSolidBrush(new GeoColor(200, GeoColor.SimpleColors.LightOrange)); areaStyle.OutlinePen = new GeoPen(new GeoSolidBrush(new GeoColor(200, GeoColor.SimpleColors.LightBlue)), 2); areaShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = areaStyle; areaShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; Dictionary savedStyle = GetSavedStyleByAccessId(styleId, accessId); if (savedStyle != null) UpdateAreaStyle(areaShapeLayer, savedStyle); return areaShapeLayer; } internal static Layer GetLineStyleLayer(string styleId, string accessId) { ShapeFileFeatureLayer lineShapeLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "MajorRoadsInFrisco.shp")); LineStyle lineStyle = new LineStyle(); lineStyle.CenterPen = new GeoPen(new GeoColor(255, GeoColor.SimpleColors.PastelGreen), 2); lineStyle.InnerPen = new GeoPen(new GeoColor(255, GeoColors.Black), 5); lineStyle.OuterPen = new GeoPen(new GeoColor(255, GeoColors.YellowGreen), 10); lineShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = lineStyle; lineShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; Dictionary savedStyle = GetSavedStyleByAccessId(styleId, accessId); if (savedStyle != null) UpdateLineStyle(lineShapeLayer, savedStyle); return lineShapeLayer; } internal static Layer GeImagePointStyleLayer() { ShapeFileFeatureLayer ImagePointStyleLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "HighSchoolInFrisco.shp")); PointStyle pointOfHighSchoolStyle = new PointStyle(); pointOfHighSchoolStyle.Image = new GeoImage(Path.Combine(baseDirectory, "school.png")); pointOfHighSchoolStyle.PointType = PointType.Bitmap; pointOfHighSchoolStyle.RotationAngle = 0; ImagePointStyleLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = pointOfHighSchoolStyle; ImagePointStyleLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; return ImagePointStyleLayer; } internal static Layer GetSymbolPointLayer(string styleId, string accessId) { ShapeFileFeatureLayer symblePointLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "ThinkGeoLocation.shp")); var colors = GeoColor.GetColorsInHueFamily(GeoColor.SimpleColors.Red, 10); symblePointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimplePointStyle(PointSymbolType.Triangle, colors[1], GeoColor.SimpleColors.Blue, 1, 20); symblePointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; Dictionary savedStyle = GetSavedStyleByAccessId(styleId, accessId); if (savedStyle != null) UpdateSymbolPointStyle(symblePointLayer, savedStyle); return symblePointLayer; } internal static Layer GetCharacterPointLayer() { ShapeFileFeatureLayer characterPointLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "HospitalInFrisco.shp")); PointStyle hospitalPointStyle = new PointStyle(); hospitalPointStyle.PointType = PointType.Character; hospitalPointStyle.RotationAngle = 0; hospitalPointStyle.CharacterIndex = 72; GeoFont geoFont = new GeoFont("Arial", 20); geoFont.IsBold = true; hospitalPointStyle.CharacterFont = geoFont; hospitalPointStyle.CharacterSolidBrush = new GeoSolidBrush(GeoColors.Blue); characterPointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = hospitalPointStyle; characterPointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; return characterPointLayer; } internal static Collection GetMultipleStyleLayers() { Collection layers = new Collection(); ShapeFileFeatureLayer ZoomLevelAreaShapeLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "ThinkGeoArea.shp")); AreaStyle ZoomLevelAreaStyleFrom01To16 = new AreaStyle(); ZoomLevelAreaStyleFrom01To16.FillSolidBrush = new GeoSolidBrush(new GeoColor(100, GeoColor.SimpleColors.BrightOrange)); ZoomLevelAreaStyleFrom01To16.OutlinePen = new GeoPen(new GeoColor(255, GeoColor.SimpleColors.Black)); ZoomLevelAreaShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = ZoomLevelAreaStyleFrom01To16; ZoomLevelAreaShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level16; AreaStyle ZoomLevelAreaStyle17 = new AreaStyle(); ZoomLevelAreaStyle17.FillSolidBrush = new GeoSolidBrush(new GeoColor(100, GeoColor.SimpleColors.Blue)); ZoomLevelAreaStyle17.OutlinePen = new GeoPen(new GeoColor(255, 0, 0, 0)); ZoomLevelAreaShapeLayer.ZoomLevelSet.ZoomLevel17.DefaultAreaStyle = ZoomLevelAreaStyle17; AreaStyle ZoomLevelAreaStyle18 = new AreaStyle(); ZoomLevelAreaStyle18.FillSolidBrush = new GeoSolidBrush(new GeoColor(100, GeoColor.SimpleColors.Red)); ZoomLevelAreaStyle18.OutlinePen = new GeoPen(new GeoColor(255, 0, 0, 0)); ZoomLevelAreaShapeLayer.ZoomLevelSet.ZoomLevel18.DefaultAreaStyle = ZoomLevelAreaStyle18; AreaStyle ZoomLevelAreaStyle19 = new AreaStyle(); ZoomLevelAreaStyle19.FillSolidBrush = new GeoSolidBrush(new GeoColor(100, GeoColor.SimpleColors.Green)); ZoomLevelAreaStyle19.OutlinePen = new GeoPen(new GeoColor(255, 0, 0, 0)); ZoomLevelAreaShapeLayer.ZoomLevelSet.ZoomLevel19.DefaultAreaStyle = ZoomLevelAreaStyle19; layers.Add(ZoomLevelAreaShapeLayer); ShapeFileFeatureLayer zoomLevelLineLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "ThinkGeoLine.shp")); LineStyle zoomLevelLineStyleFrom01To16 = new LineStyle(); zoomLevelLineStyleFrom01To16.CenterPen = new GeoPen(new GeoColor(255, GeoColor.SimpleColors.DarkOrange), 5); zoomLevelLineLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = zoomLevelLineStyleFrom01To16; zoomLevelLineLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level16; LineStyle zoomLevelLineStyle17 = new LineStyle(); zoomLevelLineStyle17.CenterPen = new GeoPen(new GeoColor(255, GeoColor.SimpleColors.DarkBlue), 5); zoomLevelLineLayer.ZoomLevelSet.ZoomLevel17.DefaultLineStyle = zoomLevelLineStyle17; LineStyle zoomLevelLineStyle18 = new LineStyle(); zoomLevelLineStyle18.CenterPen = new GeoPen(new GeoColor(255, GeoColor.SimpleColors.LightOrange), 5); zoomLevelLineLayer.ZoomLevelSet.ZoomLevel18.DefaultLineStyle = zoomLevelLineStyle18; LineStyle zoomLevelLineStyle19 = new LineStyle(); zoomLevelLineStyle19.CenterPen = new GeoPen(new GeoColor(255, GeoColor.SimpleColors.LightGreen), 5); zoomLevelLineLayer.ZoomLevelSet.ZoomLevel19.DefaultLineStyle = zoomLevelLineStyle19; layers.Add(zoomLevelLineLayer); ShapeFileFeatureLayer ZoomLevelPointLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "ThinkGeoLocation.shp")); ZoomLevelPointLayer.Transparency = 200f; PointStyle pointStyleForZoomLevelFrom01To16 = new PointStyle(); pointStyleForZoomLevelFrom01To16.Image = new GeoImage(Path.Combine(baseDirectory, "ThinkGeoLogo.png")); pointStyleForZoomLevelFrom01To16.PointType = PointType.Bitmap; pointStyleForZoomLevelFrom01To16.RotationAngle = 0; ZoomLevelPointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = pointStyleForZoomLevelFrom01To16; ZoomLevelPointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level16; PointStyle pointStyleForZoomLevel17 = new PointStyle(); pointStyleForZoomLevel17.SymbolPen = new GeoPen(GeoColor.FromArgb(255, GeoColor.SimpleColors.DarkBlue), 8); ZoomLevelPointLayer.ZoomLevelSet.ZoomLevel17.DefaultPointStyle = pointStyleForZoomLevel17; TextStyle textStyleForZoomLevel18 = new TextStyle("name", (new GeoFont("Arial", 12)), new GeoSolidBrush(GeoColor.SimpleColors.LightRed)); textStyleForZoomLevel18.HaloPen = new GeoPen(GeoColor.StandardColors.FloralWhite, 5); textStyleForZoomLevel18.SplineType = SplineType.ForceSplining; PointStyle pointStyleForZoomLevel18 = new PointStyle(); pointStyleForZoomLevel18.SymbolPen = new GeoPen(GeoColor.FromArgb(255, GeoColor.SimpleColors.LightRed), 8); ZoomLevelPointLayer.ZoomLevelSet.ZoomLevel18.CustomStyles.Add(textStyleForZoomLevel18); ZoomLevelPointLayer.ZoomLevelSet.ZoomLevel18.CustomStyles.Add(pointStyleForZoomLevel18); PointStyle pointStyleForZoomLevel19 = new PointStyle(); pointStyleForZoomLevel19.SymbolPen = new GeoPen(GeoColor.FromArgb(255, GeoColor.SimpleColors.DarkGreen), 8); ZoomLevelPointLayer.ZoomLevelSet.ZoomLevel19.DefaultPointStyle = pointStyleForZoomLevel19; layers.Add(ZoomLevelPointLayer); return layers; } internal static Layer GetCompoundStyleLayer() { ShapeFileFeatureLayer compoundStyleLayer = new ShapeFileFeatureLayer(Path.Combine(baseDirectory, "ThinkGeoLocation.shp")); PointStyle circleStyle = new PointStyle(); circleStyle.PointType = PointType.Symbol; circleStyle.SymbolPen = new GeoPen(new GeoColor(255, GeoColor.SimpleColors.Red), 3); circleStyle.SymbolType = PointSymbolType.Circle; circleStyle.SymbolSize = 25; PointStyle starStyle = new PointStyle(); starStyle.PointType = PointType.Symbol; starStyle.SymbolSolidBrush = new GeoSolidBrush(new GeoColor(255, GeoColor.SimpleColors.Blue)); starStyle.SymbolType = PointSymbolType.Star; starStyle.SymbolSize = 20; starStyle.XOffsetInPixel = 1; starStyle.YOffsetInPixel = 3; compoundStyleLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(circleStyle); compoundStyleLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(starStyle); compoundStyleLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; return compoundStyleLayer; } private static Dictionary GetSavedStyleByAccessId(string overlayId, string accessId) { string styleFile = string.Format("{0}_{1}.json", accessId, overlayId); string styleFilePath = Path.Combine(baseDirectory, "Temp", styleFile); if (File.Exists(styleFilePath)) { string content = File.ReadAllText(styleFilePath); return JsonConvert.DeserializeObject>(content); } return null; } private static void UpdateAreaStyle(FeatureLayer featureLayer, Dictionary savedStyle) { string fillSolidBrushStr = savedStyle["fillSolidBrushColor"]; int fillSolidBrushAlpha = int.Parse(savedStyle["fillSolidBrushAlpha"]); string outerPenStr = savedStyle["outerPenColor"]; int outerPenAlpha = int.Parse(savedStyle["outerPenAlpha"]); int outerPenWidth = int.Parse(savedStyle["outerPenWidth"]); AreaStyle areaStyle = new AreaStyle(); areaStyle.FillSolidBrush = new GeoSolidBrush(new GeoColor(fillSolidBrushAlpha, GeoColor.FromHtml(fillSolidBrushStr))); areaStyle.OutlinePen = new GeoPen(new GeoColor(outerPenAlpha, GeoColor.FromHtml(outerPenStr)), outerPenWidth); featureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = areaStyle; featureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; } private static void UpdateLineStyle(FeatureLayer featureLayer, Dictionary savedStyle) { string centerPenColor = savedStyle["centerPenColor"]; int centerPenColorAlpha = int.Parse(savedStyle["centerPenColorAlpha"]); int centerPenWidth = int.Parse(savedStyle["centerPenWidth"]); string outterPenColor = savedStyle["outterPenColor"]; int outterPenColorAlpha = int.Parse(savedStyle["outterPenColorAlpha"]); int outterPenWidth = int.Parse(savedStyle["outterPenWidth"]); string innerPenColor = savedStyle["innerPenColor"]; int innerPenColorAlpha = int.Parse(savedStyle["innerPenColorAlpha"]); int innerPenWidth = int.Parse(savedStyle["innerPenWidth"]); GeoPen centerPen = new GeoPen(new GeoColor(centerPenColorAlpha, GeoColor.FromHtml(centerPenColor)), centerPenWidth); GeoPen outterPen = new GeoPen(new GeoColor(outterPenColorAlpha, GeoColor.FromHtml(outterPenColor)), outterPenWidth); GeoPen innerPen = new GeoPen(new GeoColor(innerPenColorAlpha, GeoColor.FromHtml(innerPenColor)), innerPenWidth); LineStyle lineStyle = new LineStyle(); lineStyle.CenterPen = centerPen; lineStyle.OuterPen = outterPen; lineStyle.InnerPen = innerPen; featureLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = lineStyle; featureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; } private static void UpdateSymbolPointStyle(FeatureLayer featureLayer, Dictionary savedStyle) { string symbolPointType = savedStyle["symbolPointType"]; int symbolPointSize = int.Parse(savedStyle["symbolPointSize"]); float symbolPointRotationAngle = float.Parse(savedStyle["symbolPointRotationAngle"]); string symbolPointPenColor = savedStyle["symbolPointPenColor"]; int symbolPointPenAlpha = int.Parse(savedStyle["symbolPointPenAlpha"]); int symbolPointPenWidth = int.Parse(savedStyle["symbolPointPenWidth"]); string symbolPointSolidBrushColor = savedStyle["symbolPointSolidBrushColor"]; int symbolPointSolidBrushAlpha = int.Parse(savedStyle["symbolPointSolidBrushAlpha"]); PointStyle thinkGeoLocationStyle = new PointStyle(); thinkGeoLocationStyle.PointType = PointType.Symbol; thinkGeoLocationStyle.SymbolType = (PointSymbolType)Enum.Parse(typeof(PointSymbolType), symbolPointType, true); thinkGeoLocationStyle.SymbolSize = symbolPointSize; thinkGeoLocationStyle.RotationAngle = symbolPointRotationAngle; thinkGeoLocationStyle.SymbolPen = new GeoPen(new GeoColor(symbolPointPenAlpha, GeoColor.FromHtml(symbolPointPenColor)), symbolPointPenWidth); thinkGeoLocationStyle.SymbolSolidBrush = new GeoSolidBrush(new GeoColor(symbolPointSolidBrushAlpha, GeoColor.FromHtml(symbolPointSolidBrushColor))); featureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = thinkGeoLocationStyle; featureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; } } } ====AssemblyInfo.cs==== using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("BasicStyling")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("BasicStyling")] [assembly: AssemblyCopyright("Copyright © 2015")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("ccb52e05-3e33-4575-a5e0-b82966ac1e0b")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ====Global.asax.cs==== using System.Web.Http; using System.Web.Mvc; namespace BasicStyling { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); } } } ====WebApiConfig.cs==== using System.Web.Http; namespace BasicStyling { public static class WebApiConfig { public static void Register(HttpConfiguration config) { //Enable RouteAttribute config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); //Enable RouteAttribute, if delete this line, will throw other exceptions config.EnsureInitialized(); } } } ====AssemblyInfo.cs==== using System.Reflection; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("BasicStyling")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("BasicStyling")] [assembly: AssemblyCopyright("Copyright © 2015")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("aa6124eb-8e23-48fc-9a48-60d654efa9a0")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]