private PolygonFeature GetPolygonFeatureData(PolygonFeatureGeoData featureGeoData, IEnumerable <MapData> records, DateTime date) { var code = featureGeoData.ColumnValue.Trim(); MapData data = records.FirstOrDefault(x => x.ColumnValue == code); PolygonFeature featureData = new PolygonFeature { Area = featureGeoData.Area, SampleId = Guid.NewGuid().ToString("N"), Geometry = featureGeoData.Coordinates.ToArray(), ValidityTime = date, ExtendedData = featureGeoData.ColumnValue, UserConf = 100 }; if (data == null) { _logger.Line($"Failed to map feature data - {code}"); File.AppendAllLines(_missingMapsFileName, new[] { featureGeoData.ColumnValue }); } else { featureData.LandCover = data.LandCover; featureData.CropType1 = data.CropType1; featureData.CropType2 = data.CropType2; featureData.Irrigation1 = data.Irrigation1; featureData.Irrigation2 = data.Irrigation2; featureData.Irrigation3 = data.Irrigation3; } return(featureData); }
public void AddValueToField(PolygonFeature featureData) { OSGeo.OGR.Feature feature = new OSGeo.OGR.Feature(_ogrLayer.GetLayerDefn()); feature.SetField(nameof(featureData.SampleId), featureData.SampleId); feature.SetField(nameof(featureData.Area), featureData.Area); feature.SetField(nameof(featureData.LandCover), featureData.LandCover); feature.SetField(nameof(featureData.CropType1), featureData.CropType1); feature.SetField(nameof(featureData.CropType2), featureData.CropType2); feature.SetField(nameof(featureData.Irrigation1), featureData.Irrigation1); feature.SetField(nameof(featureData.Irrigation2), featureData.Irrigation2); feature.SetField(nameof(featureData.Irrigation3), featureData.Irrigation3); feature.SetField(nameof(featureData.ExtendedData), featureData.ExtendedData); feature.SetField(nameof(featureData.ValidityTime), featureData.ValidityTime != null ? featureData.ValidityTime.Value.ToString("yyyy-MM-dd") : ""); Geometry geometry = Geometry.CreateFromWkt($"POLYGON (({GetCoordinateString(featureData.Geometry)}))"); feature.SetGeometry(geometry); _ogrLayer.CreateFeature(feature); }
public GeometryFeature GetGeometryFeature() { GeometryFeature geoFeature = null; switch (shapeType) { case ShapeType.Point: geoFeature = new PointFeature(points, xmin, xmax, ymin, ymax); break; case ShapeType.Polyline: geoFeature = new PolylineFeature(polylines, xmin, xmax, ymin, ymax); break; case ShapeType.Polygon: geoFeature = new PolygonFeature(polygons, xmin, xmax, ymin, ymax); break; default: break; } return(geoFeature); }
private static void addPolygonFeature(XPathNodeIterator iter, World parentWorld, RenderableObjectList parentRenderable) { if(iter.Count > 0) { while(iter.MoveNext()) { string name = getInnerTextFromFirstChild(iter.Current.Select("Name")); string distanceAboveSurfaceString = getInnerTextFromFirstChild(iter.Current.Select("DistanceAboveSurface")); string minimumDisplayAltitudeString = getInnerTextFromFirstChild(iter.Current.Select("MinimumDisplayAltitude")); string maximumDisplayAltitudeString = getInnerTextFromFirstChild(iter.Current.Select("MaximumDisplayAltitude")); string opacityString = getInnerTextFromFirstChild(iter.Current.Select("Opacity")); string extrudeHeightString = getInnerTextFromFirstChild(iter.Current.Select("ExtrudeHeight")); string extrudeUpwardsString = getInnerTextFromFirstChild(iter.Current.Select("ExtrudeUpwards")); string imageUri = getInnerTextFromFirstChild(iter.Current.Select("ImageUri")); string outlineString = getInnerTextFromFirstChild(iter.Current.Select("Outline")); XPathNodeIterator posListIter = iter.Current.Select("exterior/LinearRing/posList"); posListIter.MoveNext(); string lineString = getInnerTextFromFirstChild(posListIter); string[] lineParts = lineString.Split(' '); Point3d[] points = new Point3d[lineParts.Length]; for(int i = 0; i < lineParts.Length; i++) { string[] pointParts = lineParts[i].Split(','); points[i] = new Point3d(); points[i].X = ParseDouble(pointParts[0]); points[i].Y = ParseDouble(pointParts[1]); if(pointParts.Length > 2) points[i].Z = ParseDouble(pointParts[2]); } System.Drawing.Color c = System.Drawing.Color.Black; System.Drawing.Color outlineColor = System.Drawing.Color.Black; if(iter.Current.Select("FeatureColor").Count > 0) { c = getColor(iter.Current.Select("FeatureColor")); } if(iter.Current.Select("OutlineColor").Count > 0) { outlineColor = getColor(iter.Current.Select("OutlineColor")); } PolygonFeature pf = null; LinearRing outerRing = new LinearRing(); outerRing.Points = points; pf = new PolygonFeature(name, parentWorld, outerRing, null, c); pf.OutlineColor = outlineColor; if(outlineString != null && outlineString.Length > 0) pf.Outline = ParseBool(outlineString); if(opacityString != null && opacityString.Length > 0) pf.Opacity = byte.Parse(opacityString); if(distanceAboveSurfaceString != null && distanceAboveSurfaceString.Length > 0) pf.DistanceAboveSurface = ParseDouble(distanceAboveSurfaceString); if(minimumDisplayAltitudeString != null && minimumDisplayAltitudeString.Length > 0) pf.MinimumDisplayAltitude = ParseDouble(minimumDisplayAltitudeString); if(maximumDisplayAltitudeString != null && maximumDisplayAltitudeString.Length > 0) pf.MaximumDisplayAltitude = ParseDouble(maximumDisplayAltitudeString); string description = getInnerTextFromFirstChild(iter.Current.Select("Description")); if(description != null && description.Length > 0) pf.Description = description; addExtendedInformation(iter.Current.Select("ExtendedInformation"), pf); string infoUri = iter.Current.GetAttribute("InfoUri", ""); if(infoUri != null && infoUri.Length > 0) { if(pf.MetaData.Contains("InfoUri")) { pf.MetaData["InfoUri"] = infoUri; } else { pf.MetaData.Add("InfoUri", infoUri); } } pf.MetaData.Add("XmlSource", (string)parentRenderable.MetaData["XmlSource"]); pf.ParentList = parentRenderable; if(World.Settings.useDefaultLayerStates) { pf.IsOn = ParseBool(iter.Current.GetAttribute("ShowAtStartup", "")); } else { pf.IsOn = IsLayerOn(pf); } parentRenderable.ChildObjects.Add( pf ); parentRenderable.RenderPriority = RenderPriority.LinePaths; } } }
private void ParseGeometry(OGR.Geometry geom, string keyStringValue, double keyNumericValue, string labelValue) { int geomType = geom.GetGeometryType(); if (geomType == ogr.wkbUnknown) { return; } // points else if (geomType == ogr.wkbPoint || geomType == ogr.wkbPoint25D) { bool dataSubListExists = false; foreach (Icons l in styleSubList.ChildObjects) { if (l.Name == keyStringValue) { dataSubList = l; dataSubListExists = true; } } if (!dataSubListExists) { dataSubList = new Icons(keyStringValue); //subSubList.DisableExpansion = true; styleSubList.Add(dataSubList); } double[] p = { geom.GetX(0), geom.GetY(0) }; if (needsTransformation) { coordTransform.TransformPoint(p); } WorldWind.Renderable.Icon ic = new WorldWind.Renderable.Icon(labelValue, p[1], p[0], 0); //ic.TextureFileName = Path.Combine(this.PluginDirectory, "icon.png"); ic.TextureFileName = ""; //ic.Width = 12; //ic.Height = 12; dataSubList.Add(ic); //Console.WriteLine(" Found point, contains " + geom.GetPointCount()); waitMessage.Text += "\nFound " + geom.GetGeometryName(); } // linestring or multi-line else if (geomType == ogr.wkbLineString || geomType == ogr.wkbLineString25D) { //Console.WriteLine(" Found " + geom.GetGeometryName() + ", contains " + geom.GetPointCount() + "points, " + geom.GetGeometryCount() + " sub-geometries"); waitMessage.Text += "\nFound " + geom.GetGeometryName() + ", contains " + geom.GetPointCount() + " points, " + geom.GetGeometryCount() + " sub-geometries"; bool dataSubListExists = false; foreach (Icons l in styleSubList.ChildObjects) { if (l.Name == keyStringValue) { dataSubList = l; dataSubListExists = true; } } if (!dataSubListExists) { dataSubList = new Icons(keyStringValue); //subSubList.DisableExpansion = true; styleSubList.Add(dataSubList); } int pointCount = geom.GetPointCount(); Point3d[] p = new Point3d[pointCount]; //TODO: handle 2.5/3D? for (int i = 0; i < pointCount; i++) { double[] point = { geom.GetX(i), geom.GetY(i) }; if (needsTransformation) { coordTransform.TransformPoint(point); } p[i] = new Point3d(point[0], point[1], 0); } //Color lineColor = Color.FromArgb(infoSelector.LineAlpha, infoSelector.LineColor); Color lineColor = InterpolateColor(keyNumericValue, true); LineFeature lf = new LineFeature(labelValue, world, p, lineColor); lf.LineWidth = infoSelector.NumericMinStyle.LineWidth; dataSubList.Add(lf); } // polygon... else if (geomType == ogr.wkbPolygon || geomType == ogr.wkbPolygon25D) { bool dataSubListExists = false; foreach (Icons l in styleSubList.ChildObjects) { if (l.Name == keyStringValue) { dataSubList = l; dataSubListExists = true; } } if (!dataSubListExists) { dataSubList = new Icons(keyStringValue); //subSubList.DisableExpansion = true; styleSubList.Add(dataSubList); } //Console.WriteLine(" Found " + geom.GetGeometryName() + ", contains " + geom.GetGeometryCount() + " sub-geometries"); waitMessage.Text += "\nFound " + geom.GetGeometryName() + ", contains " + geom.GetPointCount() + " points, " + geom.GetGeometryCount() + " sub-geometries"; int numInnerRings = geom.GetGeometryCount() - 1; LinearRing[] innerRings; if (numInnerRings != 0) { innerRings = new LinearRing[numInnerRings]; } else { innerRings = null; } LinearRing outerRing = new LinearRing(); OGR.Geometry ring; //outer ring... ring = geom.GetGeometryRef(0); waitMessage.Text += "\nFound " + ring.GetGeometryName() + ", contains " + ring.GetPointCount() + " points, " + ring.GetGeometryCount() + " sub-geometries"; int pointCount = ring.GetPointCount(); Point3d[] p = new Point3d[pointCount]; for (int k = 0; k < pointCount; k++) { double x = ring.GetX(k); double y = ring.GetY(k); double[] point = { x, y }; if (needsTransformation) { coordTransform.TransformPoint(point); } p[k] = new Point3d(point[0], point[1], 0); } outerRing.Points = p; //inner rings... if (innerRings != null) { for (int i = 1; i < geom.GetGeometryCount(); i++) { ring = geom.GetGeometryRef(i); waitMessage.Text += "\nFound " + ring.GetGeometryName() + ", contains " + ring.GetPointCount() + " points, " + ring.GetGeometryCount() + " sub-geometries"; for (int j = 0; j < ring.GetPointCount(); j++) { int innerRingPointCount = ring.GetPointCount(); Point3d[] q = new Point3d[innerRingPointCount]; for (int k = 0; k < innerRingPointCount; k++) { double x = ring.GetX(k); double y = ring.GetY(k); double[] point = { x, y }; if (needsTransformation) { coordTransform.TransformPoint(point); } q[k] = new Point3d(point[0], point[1], 0); } LinearRing r = new LinearRing(); r.Points = q; innerRings[i - 1] = r; } } } Color fillColor = InterpolateColor(keyNumericValue, false); Color lineColor = InterpolateColor(keyNumericValue, true); PolygonFeature pf = new PolygonFeature( labelValue, world, outerRing, innerRings, fillColor); pf.Outline = infoSelector.NumericMinStyle.OutlinePolygons; pf.OutlineColor = lineColor; dataSubList.Add(pf); } else if (geomType == ogr.wkbMultiPoint || geomType == ogr.wkbMultiPoint25D || geomType == ogr.wkbMultiLineString || geomType == ogr.wkbMultiLineString25D || geomType == ogr.wkbMultiPolygon || geomType == ogr.wkbMultiPolygon25D) { waitMessage.Text += "\nFound " + geom.GetGeometryName() + ", contains " + geom.GetGeometryCount() + " sub-geometries"; ParseGeometry(geom, keyStringValue, keyNumericValue, labelValue); } }
public override void Initialize(DrawArgs drawArgs) { if (m_polygonFeature == null) { double offset = 0.02; Point3d[] points = new Point3d[4]; points[0] = new Point3d( m_longitude - offset, m_latitude - offset, 200000); points[1] = new Point3d( m_longitude - offset, m_latitude + offset, 200000); points[2] = new Point3d( m_longitude + offset, m_latitude + offset, 200000); points[3] = new Point3d( m_longitude + offset, m_latitude - offset, 200000); LinearRing outerRing = new LinearRing(); outerRing.Points = points; m_polygonFeature = new PolygonFeature( name, World, outerRing, null, System.Drawing.Color.Chocolate); m_polygonFeature.AltitudeMode = AltitudeMode.Absolute; m_polygonFeature.Extrude = true; m_polygonFeature.Outline = true; m_polygonFeature.OutlineColor = System.Drawing.Color.Chocolate; } FileInfo savedFlagFile = new FileInfo(SavedImagePath); FileInfo placeHolderFile = new FileInfo(SavedImagePath + ".blk"); if (savedFlagFile.Exists) { try { m_texture = ImageHelper.LoadTexture( savedFlagFile.FullName, System.Drawing.Color.Black.ToArgb()); } catch { savedFlagFile.Delete(); savedFlagFile.Refresh(); } } if (!savedFlagFile.Exists && !placeHolderFile.Exists) { if (!savedFlagFile.Directory.Exists) savedFlagFile.Directory.Create(); try { WorldWind.Net.WebDownload download = new WorldWind.Net.WebDownload(m_imageUri); download.DownloadFile(savedFlagFile.FullName); download.Dispose(); savedFlagFile.Refresh(); } catch { FileStream fs = placeHolderFile.Create(); fs.Close(); fs = null; placeHolderFile.Refresh(); } if (savedFlagFile.Exists) { m_texture = ImageHelper.LoadTexture( savedFlagFile.FullName, System.Drawing.Color.Black.ToArgb()); } } UpdateVertices(); isInitialized = true; }
public override void Initialize(DrawArgs drawArgs) { if (m_polygonFeature == null) { double offset = 0.02; Point3d[] points = new Point3d[4]; points[0] = new Point3d( m_longitude - offset, m_latitude - offset, 200000); points[1] = new Point3d( m_longitude - offset, m_latitude + offset, 200000); points[2] = new Point3d( m_longitude + offset, m_latitude + offset, 200000); points[3] = new Point3d( m_longitude + offset, m_latitude - offset, 200000); LinearRing outerRing = new LinearRing(); outerRing.Points = points; m_polygonFeature = new PolygonFeature( name, World, outerRing, null, System.Drawing.Color.Chocolate); m_polygonFeature.AltitudeMode = AltitudeMode.Absolute; m_polygonFeature.Extrude = true; m_polygonFeature.Outline = true; m_polygonFeature.OutlineColor = System.Drawing.Color.Chocolate; } FileInfo savedFlagFile = new FileInfo(SavedImagePath); FileInfo placeHolderFile = new FileInfo(SavedImagePath + ".blk"); if (savedFlagFile.Exists) { try { m_texture = ImageHelper.LoadTexture( savedFlagFile.FullName, System.Drawing.Color.Black.ToArgb()); } catch { savedFlagFile.Delete(); savedFlagFile.Refresh(); } } if (!savedFlagFile.Exists && !placeHolderFile.Exists) { if (!savedFlagFile.Directory.Exists) { savedFlagFile.Directory.Create(); } try { // Offline check if (World.Settings.WorkOffline) { throw new Exception("Offline mode active."); } MFW3D.Net.WebDownload download = new MFW3D.Net.WebDownload(m_imageUri); download.DownloadFile(savedFlagFile.FullName); download.Dispose(); savedFlagFile.Refresh(); } catch { FileStream fs = placeHolderFile.Create(); fs.Close(); fs = null; placeHolderFile.Refresh(); } if (savedFlagFile.Exists) { m_texture = ImageHelper.LoadTexture( savedFlagFile.FullName, System.Drawing.Color.Black.ToArgb()); } } if (m_vertexDeclaration == null) { VertexElement[] velements = new VertexElement[] { new VertexElement(0, 0, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Position, 0), new VertexElement(0, 12, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Normal, 0), new VertexElement(0, 24, DeclarationType.Float2, DeclarationMethod.Default, DeclarationUsage.TextureCoordinate, 0), VertexElement.VertexDeclarationEnd }; m_vertexDeclaration = new VertexDeclaration(drawArgs.device, velements); } UpdateVertices(); isInitialized = true; }
/// <summary> /// Parses Multi Polygons /// </summary> /// <param name="inNode">The node containing Polygons</param> /// <param name="layer">The layer to add the resulting Polygons to</param> private void ParseMultiGeometry(XmlNode inNode, RIcons layer) { // Parse all Placemarks that have a name and Polygon XmlNodeList placemarkNodes = inNode.SelectNodes("Placemark[name and MultiGeometry]"); Random rand = new Random((int)DateTime.Now.Ticks); foreach(XmlNode placemarkNode in placemarkNodes) { XmlNode nameNode = placemarkNode.SelectSingleNode("name"); string name = nameNode.InnerText; // change this to something that unifies the geometry into a single object instead of a user-accessible list RIcons multiGeometryList = new RIcons(name); Style style = null; // get StyleUrl XmlNode styleUrlNode = placemarkNode.SelectSingleNode("styleUrl"); if(styleUrlNode != null) { string styleUrlKey = styleUrlNode.InnerText.Trim(); if(styleUrlKey.StartsWith("#")) styleUrlKey = styleUrlKey.Substring(1, styleUrlKey.Length - 1); style = (Style)iconStyles[styleUrlKey]; } else { XmlNode styleNode = placemarkNode.SelectSingleNode("Style"); if(styleNode != null) style = GetStyle( styleNode, new Style(), ""); } if(style == null) style = new Style(); if(style.LineStyle == null) style.LineStyle = new LineStyle(); if(style.PolyStyle == null) style.PolyStyle = new PolyStyle(); XmlNodeList lineStringNodes = placemarkNode.SelectNodes("MultiGeometry/LineString"); foreach(XmlNode lineStringNode in lineStringNodes) { bool extrude = false; XmlNode extrudeNode = lineStringNode.SelectSingleNode("extrude"); if (extrudeNode != null) extrude = Convert.ToBoolean(Convert.ToInt16(extrudeNode.InnerText)); XmlNode coordinateNode = lineStringNode.SelectSingleNode("coordinates"); Point3d[] points = ParseCoordinates(coordinateNode); XmlNode altitudeModeNode = lineStringNode.SelectSingleNode("altitudeMode"); AltitudeMode altitudeMode = GetAltitudeMode(altitudeModeNode); if(points != null && points.Length > 0) { LineFeature line = new LineFeature( name, m_world, points, System.Drawing.Color.FromArgb(style.LineStyle.Color.Color) ); line.AltitudeMode = altitudeMode; if(style.PolyStyle.Color != null) line.PolygonColor = System.Drawing.Color.FromArgb(style.PolyStyle.Color.Color); line.LineWidth = (float)style.LineStyle.Width.Value; line.Extrude = extrude; multiGeometryList.Add(line); } } XmlNodeList polygonNodes = placemarkNode.SelectNodes("MultiGeometry/Polygon"); foreach(XmlNode polygonNode in polygonNodes) { bool extrude = false; XmlNode extrudeNode = polygonNode.SelectSingleNode("extrude"); if (extrudeNode != null) extrude = Convert.ToBoolean(Convert.ToInt16(extrudeNode.InnerText)); XmlNode altitudeModeNode = polygonNode.SelectSingleNode("altitudeMode"); AltitudeMode altitudeMode = GetAltitudeMode(altitudeModeNode); LinearRing outerRing = null; LinearRing[] innerRings = null; // Parse Outer Ring XmlNode outerRingNode = polygonNode.SelectSingleNode("outerBoundaryIs/LinearRing/coordinates"); if (outerRingNode != null) { Point3d[] points = ParseCoordinates(outerRingNode); outerRing = new LinearRing(); outerRing.Points = points; } // Parse Inner Ring XmlNodeList innerRingNodes = polygonNode.SelectNodes("innerBoundaryIs"); if (innerRingNodes != null) { innerRings = new LinearRing[innerRingNodes.Count]; for(int i = 0; i < innerRingNodes.Count; i++) { Point3d[] points = ParseCoordinates(innerRingNodes[i]); innerRings[i] = new LinearRing(); innerRings[i].Points = points; } } if(outerRing != null) { PolygonFeature polygonFeature = new PolygonFeature( name, m_world, outerRing, innerRings, (style.PolyStyle.Color != null ? System.Drawing.Color.FromArgb(style.PolyStyle.Color.Color) : System.Drawing.Color.Yellow) ); polygonFeature.Extrude = extrude; polygonFeature.AltitudeMode = altitudeMode; polygonFeature.Outline = style.PolyStyle.Outline; if(style.LineStyle.Color != null) polygonFeature.OutlineColor = System.Drawing.Color.FromArgb(style.LineStyle.Color.Color); multiGeometryList.Add(polygonFeature); } } XmlNode visibilityNode = placemarkNode.SelectSingleNode("visibility"); if(visibilityNode != null) multiGeometryList.IsOn = (visibilityNode.InnerText == "1" ? true : false); layer.Add(multiGeometryList); } }
/// <summary> /// Parses Polygons /// </summary> /// <param name="inNode">The node containing Polygons</param> /// <param name="layer">The layer to add the resulting Polygons to</param> private void ParsePolygons(XmlNode inNode, RIcons layer) { // Parse all Placemarks that have a name and Polygon XmlNodeList polygons = inNode.SelectNodes("Placemark[name and Polygon]"); Random rand = new Random((int)DateTime.Now.Ticks); foreach (XmlNode node in polygons) { // Extract the name from this node XmlNode nameNode = node.SelectSingleNode("name"); string name = nameNode.InnerText; Style style = null; // get StyleUrl XmlNode styleUrlNode = node.SelectSingleNode("styleUrl"); if(styleUrlNode != null) { string styleUrlKey = styleUrlNode.InnerText.Trim(); if(styleUrlKey.StartsWith("#")) styleUrlKey = styleUrlKey.Substring(1, styleUrlKey.Length - 1); style = (Style)iconStyles[styleUrlKey]; } else { XmlNode styleNode = node.SelectSingleNode("Style"); if(styleNode != null) style = GetStyle( styleNode, new Style(), ""); } if(style == null) style = new Style(); if(style.LineStyle == null) style.LineStyle = new LineStyle(); if(style.PolyStyle == null) style.PolyStyle = new PolyStyle(); // See if this LineString has to be extruded to the ground bool extrude = false; XmlNode extrudeNode = node.SelectSingleNode("Polygon/extrude"); if (extrudeNode != null) extrude = Convert.ToBoolean(Convert.ToInt16(extrudeNode.InnerText)); XmlNode altitudeModeNode = node.SelectSingleNode("Polygon/altitudeMode"); AltitudeMode altitudeMode = GetAltitudeMode(altitudeModeNode); LinearRing outerRing = null; LinearRing[] innerRings = null; // Parse Outer Ring XmlNode outerRingNode = node.SelectSingleNode("Polygon/outerBoundaryIs/LinearRing/coordinates"); if (outerRingNode != null) { Point3d[] points = ParseCoordinates(outerRingNode); Console.WriteLine(points.Length); outerRing = new LinearRing(); outerRing.Points = points; } // Parse Inner Ring XmlNodeList innerRingNodes = node.SelectNodes("Polygon/innerBoundaryIs"); if (innerRingNodes != null) { innerRings = new LinearRing[innerRingNodes.Count]; for(int i = 0; i < innerRingNodes.Count; i++) { Point3d[] points = ParseCoordinates(innerRingNodes[i]); innerRings[i] = new LinearRing(); innerRings[i].Points = points; } } if(outerRing != null) { PolygonFeature polygonFeature = new PolygonFeature( name, m_world, outerRing, innerRings, System.Drawing.Color.FromArgb(style.PolyStyle.Color.Color)); polygonFeature.Extrude = extrude; polygonFeature.AltitudeMode = altitudeMode; polygonFeature.Outline = style.PolyStyle.Outline; if(style.LineStyle.Color != null) polygonFeature.OutlineColor = System.Drawing.Color.FromArgb(style.LineStyle.Color.Color); XmlNode visibilityNode = node.SelectSingleNode("visibility"); if(visibilityNode != null) polygonFeature.IsOn = (visibilityNode.InnerText == "1" ? true : false); layer.Add(polygonFeature); } } }