WPF Bing Map Как сосредоточиться на конкретном полигоне? - PullRequest
0 голосов
/ 28 января 2019

Я создал полигоны на основе импортированного файла .gpx.

public void LoadGPXCoordonate2(string sFile)
    {
        XDocument gpxDoc = GetGpxDoc(sFile);
        XNamespace gpx = GetGpxNameSpace();
        string comand = "INSERT INTO Coordinate_Import_Table (TI_ID,Latitude,Longitude) VALUES (@ti_id,@latitude,@longitude)";
        SqlConnection conn = new SqlConnection(connectionString);
        SqlCommand cmd2 = new SqlCommand(comand, conn);

        SqlParameter TiId = new SqlParameter("@ti_id", SqlDbType.Int);
        cmd2.Parameters.Add(TiId);
        SqlParameter LAtitude = new SqlParameter("@latitude", SqlDbType.Float);
        cmd2.Parameters.Add(LAtitude);
        SqlParameter LOngitude = new SqlParameter("@longitude", SqlDbType.Float);
        cmd2.Parameters.Add(LOngitude);
        conn.Open();
        cmd2.Prepare();
        var tracks = from track in gpxDoc.Descendants(gpx + "trk")
                     select new
                     {
                         Name = track.Element(gpx + "name") != null ?
                        track.Element(gpx + "name").Value : null,
                         Segs = (
                            from trackpoint in track.Descendants(gpx + "trkpt")
                            select new
                            {
                                Latitude = trackpoint.Attribute("lat").Value,
                                Longitude = trackpoint.Attribute("lon").Value,

                            }
                          )
                     };
        float lat;
        float lon;
        string name;
        foreach (var trk in tracks)
        {

            MapPolygon polygon = new MapPolygon();
            polygon.Fill = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Blue);
            polygon.Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Green);
            polygon.StrokeThickness = 3;
            polygon.Opacity = 0.5;
            polygon.Focusable = true;
            polygon.Locations = new LocationCollection();
            name = trk.Name.ToString();
            polygon.Name = name;
            polygon.ToolTip = name;
            foreach (var trkSeg in trk.Segs)
            {


                FillComboBox(name);
                lat = float.Parse(trkSeg.Latitude);
                lon = float.Parse(trkSeg.Longitude);

                Location loc = new Location(lat, lon);
                polygon.Locations.Add(loc);

                int tiid = int.Parse(comboBox.SelectedValue.ToString());
                TiId.Value = tiid;
                LAtitude.Value = lat;
                LOngitude.Value = lon;
                cmd2.ExecuteNonQuery();
            }
            myMap.Children.Add(polygon);
        }
        conn.Close();

    }

Все работает нормально. Я загрузил dataGrid с таблицей координат. Теперь мне нужно, чтобы я выбрал название дорожки вdataGrid, Карта для центра в многоугольнике с тем же именем.У кого-нибудь есть идеи, как я могу это сделать?Спасибо!

1 Ответ

0 голосов
/ 01 февраля 2019

Самый простой вариант - рассчитать минимальные и максимальные значения широты и долготы, а затем использовать их для создания ограничивающего прямоугольника (LocationRect), а затем использовать его для установки вида карты.Это будет обрабатывать как уровень масштабирования, так и центрирование для вас.

Это не будет хорошо работать для полигонов, которые пересекают анти-меридиан (-180/180 долготы).Чтобы справиться с этим, существует гораздо более сложный подход, включающий гораздо больше математики.

...