示例#1
0
        public List <Folder> GetFolders()
        {
            Kml kml = kf.Root as Kml;

            if (kml != null)
            {
                return(new List <Folder>(kml.Flatten().OfType <Folder>()));
            }

            return(new List <Folder>());
        }
示例#2
0
        private static IEnumerable <MapFeature> EnumerablePlacemarks(Kml kml)
        {
            int id = 1;

            foreach (var placemark in kml.Flatten().OfType <Placemark>())
            {
                MapFeature mapFeature = new MapFeature(placemark, id);
                id++;
                yield return(mapFeature);
            }
        }
示例#3
0
        public KmlDocument(String data)
        {
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(data));

            kf = KmlFile.Load(ms);
            Kml      kml = kf.Root as Kml;
            Document doc = kml?.Flatten().OfType <Document>().FirstOrDefault();

            if (doc != null)
            {
                _documentDescription = (doc.Description != null) ? doc.Description.Text : "";
            }
        }
示例#4
0
        private IEnumerable <MapFeature> GetMapFeatures(Kml kml)
        {
            int id = 1;

            foreach (var placemark in kml.Flatten().OfType <Placemark>())
            {
                if (HasValidElement(placemark))
                {
                    MapFeature mapFeature = new MapFeature(placemark, id, Configuration);
                    yield return(mapFeature);
                }
                id++;
            }
        }
示例#5
0
        static void Main(string[] args)
        {
            TextReader reader = File.OpenText("C:\\Users\\Yaseenh\\Desktop\\New folder\\Fibrehoods2.kml");
            KmlFile    file   = KmlFile.Load(reader);

            _kml = file.Root as Kml;

            var csv = new StringBuilder();

            if (_kml != null)
            {
                var Headings = string.Format("{0},{1},{2}", "Name\t\t", "Longitude", "Latitude");
                csv.AppendLine(Headings);

                //foreach (var placemark in _kml.Flatten().OfType<Placemark>())
                //{

                int count = 0;
                foreach (var polygon in _kml.Flatten().OfType <Polygon>())
                {
                    var name = ((Placemark)polygon.Parent).Name;
                    Console.WriteLine(name + "\n");
                    csv.Append(name);
                    csv.Append("\n");
                    count++;

                    var coorD = polygon.OuterBoundary.LinearRing.Coordinates;
                    foreach (var item in coorD)
                    {
                        var latitude    = item.Latitude;
                        var longitude   = item.Longitude;
                        var coordinates = string.Format("{0},{1},{2}", "", longitude, latitude);
                        Console.WriteLine(coordinates);
                        csv.AppendLine(coordinates);
                    }
                    File.WriteAllText("C:\\Users\\Yaseenh\\Desktop\\New folder\\KMLExtraction.csv", csv.ToString());
                    break; //Take out to get all coordinates
                }
                Console.WriteLine(count);
            }
            else
            {
                Console.WriteLine("File is empty");
                csv.AppendLine("File is empty");
                File.WriteAllText("C:\\Users\\Yaseenh\\Desktop\\New folder\\KMLExtraction.csv", csv.ToString());
            }
        }
示例#6
0
        private string ExtractWKTFromKML(Stream stream, int points)
        {
            NetTopologySuite.Geometries.Geometry finalgeometry = null;
            try {
                stream.Seek(0, SeekOrigin.Begin);
            }catch (Exception) {}
            KmlFile file = KmlFile.Load(stream);
            Kml     kml  = file.Root as Kml;

            var placemarks = kml.Flatten().OfType <Placemark>();

            foreach (var placemark in placemarks)
            {
                try {
                    NetTopologySuite.Geometries.Geometry geometry = KmlGeometryToGeometry(placemark.Geometry);
                    if (finalgeometry == null)
                    {
                        finalgeometry = geometry;
                    }
                    else
                    {
                        finalgeometry = finalgeometry.Union(geometry);
                    }
                } catch (Exception) {
                    //throw new Exception(string.Format("Error with placemark {0}", placemark.Name));
                }
            }
            string wkt = null;

            if (finalgeometry != null)
            {
                finalgeometry = SimplifyGeometry(finalgeometry, points);
                foreach (var p in finalgeometry.Coordinates.ToArray())
                {
                    p.X = Math.Round(p.X, 2);
                    p.Y = Math.Round(p.Y, 2);
                    if (p is CoordinateZ)
                    {
                        p.Z = Math.Round(p.Z, 2);
                    }
                }
                wkt = finalgeometry.AsText();
            }
            return(wkt);
        }
示例#7
0
        public List <Coordinates> ImportFile(Stream input, bool isKmz)
        {
            var coordinates = new List <Coordinates>();

            try
            {
                KmlFile file;
                if (isKmz)
                {
                    var kmz = KmzFile.Open(input);
                    file = kmz.GetDefaultKmlFile();
                }
                else
                {
                    file = KmlFile.Load(input);
                }


                Kml kml = file.Root as Kml;
                if (kml != null)
                {
                    foreach (var placemark in kml.Flatten().OfType <Placemark>())
                    {
                        Console.WriteLine(placemark.Name);

                        var coords = new Coordinates();
                        coords.Latitude  = placemark.CalculateBounds().Center.Latitude;
                        coords.Longitude = placemark.CalculateBounds().Center.Longitude;

                        coordinates.Add(coords);
                    }
                }
            }
            catch
            {
            }

            return(coordinates);
        }
示例#8
0
        /// <summary>
        /// Extracts KML files
        /// </summary>
        private void ExtractKmlFilesAndBuildModel(List <Polygon1kmInfo> polygonInfos, List <NovadsPagasts> novadsPagastsMapping, List <PagastsPolygon1km> pagastsPolygon1kmMapping, List <Polygon1km> polygons1km, List <Novads> novadsList, List <Pagasts> pagastsList)
        {
            using (var reader = new StreamReader(_dataFilePath + "1km_lv.kml"))
            {
                KmlFile file = KmlFile.Load(reader);

                Kml kml = file.Root as Kml;
                if (kml != null)
                {
                    foreach (var placemark in kml.Flatten().OfType <Placemark>())
                    {
                        var polygonInfo = polygonInfos.FirstOrDefault(x => x.Id == placemark.Name);

                        if (polygonInfo == null)
                        {
                            continue;
                        }

                        polygons1km.Add(new Polygon1km()
                        {
                            Id = placemark.Name,
                            CoordinatesPolygon = placemark.Geometry,
                            Info = polygonInfo,
                        });
                    }
                }
            }

            using (var reader = new StreamReader(_dataFilePath + "pagasti_pol.kml"))
            {
                KmlFile file = KmlFile.Load(reader);

                Kml kml = file.Root as Kml;
                if (kml != null)
                {
                    foreach (var placemark in kml.Flatten().OfType <Placemark>())
                    {
                        // Transform from mapping structure to relational structure
                        var polygonsInThisPagasts = pagastsPolygon1kmMapping.Where(mappingDto => mappingDto.PagastsId == int.Parse(placemark.Name))
                                                    .Select(mappingDto => polygons1km.First(polygon1km => polygon1km.Id == mappingDto.Polygon1kmId))
                                                    .ToList();

                        pagastsList.Add(new Pagasts()
                        {
                            Id   = int.Parse(placemark.Name),
                            Name = novadsPagastsMapping.First(p => p.PagastsId == int.Parse(placemark.Name)).PagastsName,
                            CoordinatesPolygon = placemark.Geometry,
                            Polygon1kmList     = polygonsInThisPagasts,
                        });
                    }
                }
            }

            using (var reader = new StreamReader(_dataFilePath + "novadi_pol.kml"))
            {
                KmlFile file = KmlFile.Load(reader);

                Kml kml = file.Root as Kml;
                if (kml != null)
                {
                    foreach (var placemark in kml.Flatten().OfType <Placemark>())
                    {
                        // Transform from mapping structure to relational structure
                        var pagastsInThisNovads = novadsPagastsMapping.Where(mappingDto => mappingDto.NovadsId == int.Parse(placemark.Name))
                                                  .Select(mappingDto => pagastsList.FirstOrDefault(pagasts => pagasts.Id == mappingDto.PagastsId))
                                                  .Where(item => item != null) // Incomplete list of Pagasts, some that are in mapping are not in our data
                                                  .ToList();

                        novadsList.Add(new Novads()
                        {
                            Id   = int.Parse(placemark.Name),
                            Name = placemark.Description.Text,
                            CoordinatesPolygon = placemark.Geometry,
                            PagastsList        = pagastsInThisNovads,
                        });
                    }
                }
            }
        }
示例#9
0
        private void btnReadKMLPoly_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                /* Get kml filename */

                string kml_file = openFileDialog1.FileName;

                if (kml_file.Contains(".kml"))
                {
                    System.IO.TextReader    stream = System.IO.File.OpenText(kml_file);
                    SharpKml.Engine.KmlFile file   = KmlFile.Load(stream);
                    Kml _kml = file.Root as Kml;

                    SharpKml.Dom.Placemark[] tempPlaceMarks = new SharpKml.Dom.Placemark[1000];
                    SharpKml.Dom.Placemark   tmp_placemark  = new SharpKml.Dom.Placemark();
                    CoordinateCollection     coordinates    = new CoordinateCollection();
                    Form1.Globals.poly_point_count = 0;

                    if (_kml != null)
                    {
                        SharpKml.Base.Vector vector;
                        double lat;
                        double lon;
                        double alt;
                        string name = "";

                        foreach (var placemark in _kml.Flatten().OfType <SharpKml.Dom.Placemark>())
                        {
                            name = placemark.Name;
                        }

                        Models.Shape shape = new Models.Shape();
                        shape.name = name;

                        foreach (var linering in _kml.Flatten().OfType <LinearRing>())
                        {
                            coordinates = linering.Coordinates;
                            int num = coordinates.Count;

                            LinkedList <PolyPoint> shape_points = new LinkedList <PolyPoint>();

                            for (int i = 0; i < num; i++)
                            {
                                PolyPoint point = new PolyPoint();
                                vector    = coordinates.ElementAt(i);
                                lat       = vector.Latitude;
                                lon       = vector.Longitude;
                                alt       = (double)vector.Altitude;
                                point.lat = lat;
                                point.lon = lon;
                                point.alt = alt;
                                shape_points.AddLast(point);
                                //dgvWaypoints.Rows.Add(Globals.waypoint_count, Convert.ToString(lat), Convert.ToString(lon), Convert.ToString(30));
                            }
                            shape.points  = shape_points;
                            shape.visible = true;
                            _wpg.AddShape(shape);
                            _gmap.Add_gMapPoly(shape, true);
                        }
                    }
                }
                GMAPTree.Update_GMapTree(_wpg, _treeview);
                this.Close();
            }
        }
        private void btnSelectKMLFile_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                /* Get kml filename */

                string kml_file = openFileDialog1.FileName;

                if (kml_file.Contains(".kml"))
                {
                    Form1.Globals.kml_filename = kml_file;
                    rtbKMLRead.AppendText("KML File : " + kml_file + "\n");
                    rtbKMLRead.AppendText("\n");

                    /* Open KML File */

                    System.IO.TextReader    stream = System.IO.File.OpenText(kml_file);
                    SharpKml.Engine.KmlFile file   = KmlFile.Load(stream);
                    Kml _kml = file.Root as Kml;

                    SharpKml.Dom.Placemark[] tempPlaceMarks = new SharpKml.Dom.Placemark[1000];
                    SharpKml.Dom.Placemark   tmp_placemark  = new SharpKml.Dom.Placemark();
                    CoordinateCollection     coordinates    = new CoordinateCollection();


                    Form1.Globals.kml_point_count = 0;

                    //rtbKMLRead.AppendText("Waypoint Count : " + Convert.ToString(Globals.waypoint_count) + "\n");

                    int numOfPlaceMarks = 0;

                    if (_kml != null)
                    {
                        foreach (var placemark in _kml.Flatten().OfType <SharpKml.Dom.Placemark>())
                        {
                            string placename = placemark.Name;
                            rtbKMLRead.AppendText("Placemark Name : " + placename + "\n");
                            tmp_placemark.Name = placename;
                            numOfPlaceMarks++;
                        }
                        rtbKMLRead.AppendText("Number of Placemarks : " + Convert.ToString(numOfPlaceMarks) + "\n");


                        int num_linestring = 0;
                        SharpKml.Base.Vector vector;
                        double lat;
                        double lon;
                        double alt;

                        foreach (var linestring in _kml.Flatten().OfType <LineString>())
                        {
                            coordinates = linestring.Coordinates;
                            int num = coordinates.Count;
                            rtbKMLRead.AppendText("Num Coordinates : " + Convert.ToString(num) + "\n");
                            for (int i = 0; i < num; i++)
                            {
                                vector = coordinates.ElementAt(i);
                                lat    = vector.Latitude;
                                lon    = vector.Longitude;
                                alt    = (double)vector.Altitude;
                                rtbKMLRead.AppendText("Lat/Lon : " + Convert.ToString(lat));
                                rtbKMLRead.AppendText(", " + Convert.ToString(lon) + "Altitude : " + Convert.ToString(alt) + "\n");
                                _kml_points[_kml_point_count, 0] = lat;
                                _kml_points[_kml_point_count, 1] = lon;
                                _kml_points[_kml_point_count, 2] = alt;
                                _kml_point_count++;
                                //dgvWaypoints.Rows.Add(Globals.waypoint_count, Convert.ToString(lat), Convert.ToString(lon), Convert.ToString(30));
                            }
                            num_linestring++;
                        }
                        rtbKMLRead.AppendText("Number of Linestrings : " + Convert.ToString(num_linestring) + "\n");

                        BuildKMLPath();
                    }
                }
                else
                {
                    MessageBox.Show("Wrong file type!", "GPS Grid:", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                }
            }
        }
示例#11
0
        static void Main(string[] args)
        {
            AreaList wantedAreas = new AreaList();
            int      count       = 0;

            TextReader reader = File.OpenText("C:\\Users\\Yaseenh\\Desktop\\New folder\\Fibrehoods2.kml");
            KmlFile    file   = KmlFile.Load(reader);

            _kml = file.Root as Kml;

            var api = new Api("https://rest.trackmatic.co.za/api/v1", "110", "9408065009082");

            api.Authenticate("yase191!");

            if (_kml != null)
            {
                foreach (var polygon in _kml.Flatten().OfType <Polygon>())
                {
                    foreach (var area in wantedAreas.areas)
                    {
                        if (((Placemark)polygon.Parent).StyleUrl.OriginalString == "#fibrehoods_style")
                        {
                            var name = ((Placemark)polygon.Parent).Name;
                            if (area == name)
                            {
                                if (!name.Any(c => char.IsDigit(c)))
                                {
                                    count++;
                                    Console.WriteLine(name + "\n");

                                    var coorD  = polygon.OuterBoundary.LinearRing.Coordinates;
                                    var Coords = new List <OCoord>();
                                    foreach (var item in coorD)
                                    {
                                        var latitude    = item.Latitude;
                                        var longitude   = item.Longitude;
                                        var coordinates = string.Format("{0},{1},{2}", "", longitude, latitude);
                                        Console.WriteLine(coordinates);

                                        var testcor = new OCoord();
                                        testcor.Longitude = longitude;
                                        testcor.Latitude  = latitude;
                                        testcor.Radius    = 0;
                                        Coords.Add(testcor);
                                    }

                                    var z = new OZone
                                    {
                                        ClientId = "110",
                                        Name     = name,
                                        Coords   = Coords,
                                        Id       = $"110/{Guid.NewGuid()}",
                                        Shape    = EZoneShape.Polygon,
                                        Type     = EOZoneType.Stay
                                    };
                                    api.ExecuteRequest(new SaveZone(api.Context, z));
                                    //break;
                                }
                            }
                        }
                    }
                }
            }
            Console.WriteLine("Total Entries :" + count);
            Console.ReadLine();
        }