我已经基于导入的.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();
}
Everythig一切正常,我已经在坐标表中加载了一个dataGrid,现在我想要的是当我在dataGrid中选择一个Track Name时,将Map定位在具有相同Name的Polygon的中心。 有人有什么想法吗? 谢谢!
答案 0 :(得分:0)
最简单的选择是计算最小和最大纬度和经度值,然后使用它来创建一个边界框(LocationRect),然后使用它来设置地图视图。这将为您处理缩放级别和居中。
这不适用于穿过反子午线(经度-180/180)的多边形。为了解决这个问题,有一种更复杂的方法,涉及更多的数学运算。