예제 #1
0
파일: MapFeature.cs 프로젝트: hnjm/kmltosql
 private void InitializeData(Placemark placemark)
 {
     foreach (SimpleData sd in placemark.Flatten().OfType <SimpleData>())
     {
         if (sd.Name.ToLower() == "id")
         {
             sd.Name = "placemark_sd_id";
         }
         if (sd.Name.ToLower() == "name")
         {
             sd.Name = "placemark_sd_name";
         }
         Data.Add(sd.Name.Sanitize(), sd.Text.Sanitize());
     }
     foreach (Data data in placemark.Flatten().OfType <Data>())
     {
         if (data.Name.ToLower() == "id")
         {
             data.Name = "placemark_data_id";
         }
         if (data.Name.ToLower() == "name")
         {
             data.Name = "placemark_data_name";
         }
         Data.Add(data.Name.Sanitize(), data.Value.Sanitize());
     }
 }
예제 #2
0
        public Route GetRoute(Placemark placemark)
        {
            Route r = new Route {
                Name        = placemark.Name,
                Description = (placemark.Description != null) ? placemark.Description.Text : _documentDescription
            };

            LineString ls = placemark.Flatten().OfType <LineString>().FirstOrDefault();

            if (ls != null)
            {
                foreach (var coordinate in ls.Coordinates)
                {
                    BasicGeoposition bg = new BasicGeoposition()
                    {
                        Longitude = coordinate.Longitude,
                        Latitude  = coordinate.Latitude,
                        Altitude  = coordinate.Altitude ?? 0d
                    };
                    r.Coordinates.Add(bg);
                }

                return(r);
            }

            return(null);
        }
        /// <summary>
        /// Generates a List of arrays of Vectors for each Polygon in the Placemark <see cref="Placemark"/>.
        /// </summary>
        /// <param name="placemark">The placemark instance.</param>
        /// <returns>
        /// A <c>ListVector[][]</c> containing the coordinates of each <see cref="Polygon"/> of the
        /// placemark.
        /// </returns>
        /// <exception cref="ArgumentNullException">placemark is null.</exception>
        /// <exception cref="ArgumentException">placemark geometry is not a MultipleGeometry, Polygon or LineString.</exception>
        private static List <Vector[][]> ConvertToCoordinates(this Placemark placemark)
        {
            if (placemark == null)
            {
                throw new ArgumentNullException();
            }

            if (!(placemark.Geometry is MultipleGeometry) && !(placemark.Geometry is Polygon) && !(placemark.Geometry is LineString))
            {
                throw new ArgumentException("Expecting MultipleGeometry, Polygon or LineString");
            }

            if (placemark.Geometry is LineString)
            {
                return(placemark.Flatten().OfType <CoordinateCollection>().Select(x => x.AsVectorCoordinates()).ToList());
            }

            return(placemark.Flatten().OfType <Polygon>().Select(x => x.AsVectorCoordinates()).ToList());
        }
예제 #4
0
        private static Vector[] InitializePolygonCoordinates(Placemark placemark)
        {
            List <Vector> coordinates = new List <Vector>();

            foreach (var polygon in placemark.Flatten().OfType <Polygon>())
            {
                coordinates.AddRange(polygon.OuterBoundary.LinearRing.Coordinates);
            }
            return(coordinates.ToArray());
        }
예제 #5
0
 private void InitializeData(Placemark placemark)
 {
     foreach (SimpleData sd in placemark.Flatten().OfType <SimpleData>())
     {
         if (sd.Name.ToString().ToLower() == "id")
         {
             sd.Name = "sd_id";
         }
         Data.Add(sd.Name, sd.Text);
     }
     foreach (Data data in placemark.Flatten().OfType <Data>())
     {
         if (data.Name.ToString().ToLower() == "id")
         {
             data.Name = "data_id";
         }
         Data.Add(data.Name, data.Value);
     }
 }
예제 #6
0
파일: MapFeature.cs 프로젝트: hnjm/kmltosql
        private static Vector[] InitializeLineCoordinates(Placemark placemark)
        {
            List <Vector> coordinates = new List <Vector>();

            foreach (LineString element in placemark.Flatten().OfType <LineString>())
            {
                LineString lineString = element;
                coordinates.AddRange(lineString.Coordinates);
            }
            return(coordinates.ToArray());
        }
예제 #7
0
파일: MapFeature.cs 프로젝트: hnjm/kmltosql
        private static Vector[] InitializePointCoordinates(Placemark placemark)
        {
            List <Vector> coordinates = new List <Vector>();

            foreach (var point in placemark.Flatten().OfType <Point>())
            {
                Vector myVector = new Vector();
                myVector.Latitude  = point.Coordinate.Latitude;
                myVector.Longitude = point.Coordinate.Longitude;
                coordinates.Add(myVector);
            }
            return(coordinates.ToArray());
        }
예제 #8
0
파일: MapFeature.cs 프로젝트: hnjm/kmltosql
        private static Vector[][] InitializePolygonCoordinates(Placemark placemark)
        {
            List <List <Vector> > coordinates = new List <List <Vector> >();

            coordinates.Add(new List <Vector>());

            foreach (var polygon in placemark.Flatten().OfType <Polygon>())
            {
                coordinates[0].AddRange(polygon.OuterBoundary.LinearRing.Coordinates);
                coordinates.AddRange(polygon.InnerBoundary.Select(inner => inner.LinearRing.Coordinates.ToList()));
            }
            return(coordinates.Select(c => c.ToArray()).ToArray());
        }
예제 #9
0
        private static Vector[][] InitializeLineCoordinates(Placemark placemark)
        {
            List <List <Vector> > coordinates = new List <List <Vector> >();

            int lineStringIndex = 0;

            foreach (LineString lineString in placemark.Flatten().OfType <LineString>())
            {
                coordinates.Add(new List <Vector>());
                coordinates[lineStringIndex].AddRange(lineString.Coordinates);
                lineStringIndex++;
            }
            return(coordinates.Select(c => c.ToArray()).ToArray());
        }
예제 #10
0
        private Vector[] initializePointCoordinates(Placemark placemark)
        {
            List <Vector> coordinates = new List <Vector>();

            foreach (var element in placemark.Flatten())
            {
                if (element is Point)
                {
                    Point  myPoint  = (Point)element;
                    Vector myVector = new Vector();
                    myVector.Latitude  = myPoint.Coordinate.Latitude;
                    myVector.Longitude = myPoint.Coordinate.Longitude;
                    coordinates.Add(myVector);
                }
            }
            return(coordinates.ToArray());
        }
예제 #11
0
        private static Vector[] InitializePolygonCoordinates(Placemark placemark)
        {
            List <Vector> coordinates = new List <Vector>();
            Polygon       myGeometry;

            foreach (var element in placemark.Flatten())
            {
                if (element is Polygon)
                {
                    myGeometry = (Polygon)element;
                    foreach (var vector in myGeometry.OuterBoundary.LinearRing.Coordinates)
                    {
                        coordinates.Add(vector);
                    }
                }
            }
            return(coordinates.ToArray());
        }
예제 #12
0
        private static Vector[] InitializeLineCoordinates(Placemark placemark)
        {
            List <Vector> coordinates = new List <Vector>();
            LineString    lineString;

            foreach (var element in placemark.Flatten())
            {
                if (element is LineString)
                {
                    lineString = (LineString)element;
                    foreach (var vector in lineString.Coordinates)
                    {
                        coordinates.Add(vector);
                    }
                }
            }
            return(coordinates.ToArray());
        }
예제 #13
0
파일: MapFeature.cs 프로젝트: hnjm/kmltosql
 private void SetGeoTypes(Placemark placemark)
 {
     foreach (var element in placemark.Flatten())
     {
         if (element is Point)
         {
             ShapeType = ShapeType.Point;
         }
         else if (element is Polygon)
         {
             ShapeType = ShapeType.Polygon;
         }
         else if (element is LineString)
         {
             ShapeType = ShapeType.LineString;
         }
     }
 }
예제 #14
0
 private OpenGisGeometryType SetGeometryType(Placemark placemark)
 {
     foreach (var element in placemark.Flatten())
     {
         if (element is Polygon)
         {
             return(OpenGisGeometryType.Polygon);
         }
         else if (element is Point)
         {
             return(OpenGisGeometryType.Point);
         }
         else if (element is LineString)
         {
             return(OpenGisGeometryType.LineString);
         }
     }
     throw new Exception("Placemark " + Id.ToString() + "Not a line, point, or polygon");
 }
예제 #15
0
 private void SetGeoTypes(Placemark placemark)
 {
     foreach (var element in placemark.Flatten())
     {
         if (element is Point)
         {
             GeographyType = OpenGisGeographyType.Point;
             GeometryType  = OpenGisGeometryType.Point;
         }
         else if (element is Polygon)
         {
             GeographyType = OpenGisGeographyType.Polygon;
             GeometryType  = OpenGisGeometryType.Polygon;
         }
         else if (element is LineString)
         {
             GeographyType = OpenGisGeographyType.LineString;
             GeometryType  = OpenGisGeometryType.LineString;
         }
     }
 }
예제 #16
0
        /// <summary>
        /// Generates a List of arrays of Vectors for each Polygon in the Placemark <see cref="Placemark"/>.
        /// </summary>
        /// <param name="placemark">The placemark instance.</param>
        /// <returns>
        /// A <c>ListVector[][]</c> containing the coordinates of each <see cref="Polygon"/> of the
        /// placemark.
        /// </returns>
        /// <exception cref="ArgumentNullException">placemark is null.</exception>
        /// <exception cref="ArgumentException">placemark geometry is not a MultipleGeometry or Polygon.</exception>
        private static List <Vector[][]> ConvertToCoordinates(this Placemark placemark)
        {
            if (placemark == null)
            {
                throw new ArgumentNullException();
            }

            if (!(placemark.Geometry is MultipleGeometry) && !(placemark.Geometry is Polygon))
            {
                throw new ArgumentException("Expecting MultipleGeometry or Polygon");
            }

            List <Vector[][]> Polygons = new List <Vector[][]>();

            foreach (Polygon polygon in placemark.Flatten().OfType <Polygon>())
            {
                Polygons.Add(polygon.AsVectorCoordinates());
            }

            return(Polygons);
        }
예제 #17
0
        public Point GetPoint(Placemark placemark)
        {
            Point p = new Point {
                Title       = placemark.Name,
                Description = (placemark.Description != null) ? placemark.Description.Text : _documentDescription
            };

            KmlPoint point = placemark.Flatten().OfType <KmlPoint>().FirstOrDefault();

            if (point != null)
            {
                p.Position = new BasicGeoposition()
                {
                    Longitude = point.Coordinate.Longitude,
                    Latitude  = point.Coordinate.Latitude,
                    Altitude  = point.Coordinate.Altitude ?? 0d
                };

                return(p);
            }

            return(null);
        }
예제 #18
0
 public static bool IsRoutePlacemark(Placemark placemark)
 {
     return(placemark.Flatten().OfType <LineString>().Any());
 }
예제 #19
0
 private static bool HasValidElement(Placemark placemark)
 {
     return(placemark.Flatten().Any(e => e is Point || e is LineString || e is Polygon));
 }