private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            dbContext = new TravelPhotoDbContext();
            dbContext.GeoObjects.Load();
            geoObjectsDataGrid.ItemsSource = dbContext.GeoObjects.ToList();
            geoObjectsDataGrid.AutoGenerateColumns = false;

            geoObjectsDataGrid.Columns.Add(new DataGridTextColumn()
            {
                Header = "Name",
                Binding = new Binding("Name"),

            });
            geoObjectsDataGrid.Columns.Add(new DataGridTextColumn()
            {
                Header = "Synonyms",
                Binding = new Binding("Synonyms"),

            });
            geoObjectsDataGrid.Columns.Add(new DataGridComboBoxColumn()
            {
                Header = "Country",
                SelectedValuePath = "ISOCode",
                DisplayMemberPath = "Name",
                SelectedValueBinding = new Binding("CountryCode"),
                ItemsSource = dbContext.Countries.OrderBy(country => country.Name).ToList()
            });
            //geoObjectsDataGrid.Columns.Add(createDateTimeColumn("Arrived","WhenArrived"));
            //geoObjectsDataGrid.Columns.Add(createDateTimeColumn("Leaved", "WhenLeaved"));
            geoObjectsDataGrid.Columns.Add(new DataGridTextColumn()
            {
                Header = "Arrived",
                Binding = new Binding("WhenArrived"),

            });
            geoObjectsDataGrid.Columns.Add(new DataGridTextColumn()
            {
                Header = "Leaved",
                Binding = new Binding("WhenLeaved"),

            });
        }
Ejemplo n.º 2
0
        public void Load()
        {
            ProgressText = "Openning KMZ file";
            var kmz = KmzFile.Open(_kmzFilename);
            var kmlFile = kmz.GetDefaultKmlFile();
            var kml = kmlFile.Root as Kml;
            if (kml != null)
            {
                ProgressText = "Parsing KML";
                List<Placemark> placemarks = new List<Placemark>();
                ExtractPlacemarks(kml.Feature, placemarks);
                var geoNamesLookup=new GeoNamesLookup();
                var dbContext=new TravelPhotoDbContext();
                Maximum = placemarks.Count;
                foreach (var placeMark in placemarks)
                {
                    Increment();
                    var geoObject = new GeoObject();
                    if (string.IsNullOrEmpty(placeMark.Name))
                    {
                        continue;
                    }
                    ProgressText = "Processing " + placeMark.Name;
                    geoObject.Name = placeMark.Name;
                    var boundingBox = placeMark.Geometry.CalculateBounds();
                    var found=new List<Toponym>();
                    if (boundingBox != null)
                    {
                        geoObject.Latitude = (float) placeMark.Geometry.CalculateBounds().Center.Latitude;
                        geoObject.Longitude = (float) placeMark.Geometry.CalculateBounds().Center.Longitude;
                        found = geoNamesLookup.FindByCoordinates(geoObject.Latitude, geoObject.Longitude);
                    }
                    if (!found.Any())
                    {
                        found = geoNamesLookup.FindByName(geoObject.Name);
                        if (found.Any())
                        {
                            ProgressText = "Found by name";
                        }
                    }
                    else
                    {
                        ProgressText = "Found by coordinates";
                    }
                    //if (found.Count > 1)
                    //{
                    //    ProgressText = "Multiple matches";
                    //}
                    if (found.Any() )
                    {
                        geoObject.GeoNameId = found.First().GeoNameId;
                        geoObject.Synonyms = found.First().Name;
                        if (found.First().AlternateNames!=null)
                        {
                            foreach (var name in found.First().AlternateNames)
                            {
                                geoObject.Synonyms += ", " + name;

                            }
                        }
                        geoObject.CountryCode = found.First().CountryCode;
                        dbContext.GeoObjects.Add(geoObject);
                        dbContext.SaveChanges();
                    }
                }
            }
        }