private static ConvertBing transform(double lat, double lon) { ConvertBing info = new ConvertBing(); if (outOfChina(lat, lon)) { info.setChina(false); info.setLatitude(lat); info.setLongitude(lon); return(info); } double dLat = transformLat(lon - 105.0, lat - 35.0); double dLon = transformLon(lon - 105.0, lat - 35.0); double radLat = lat / 180.0 * pi; double magic = Math.Sin(radLat); magic = 1 - ee * magic * magic; double sqrtMagic = Math.Sqrt(magic); dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); dLon = (dLon * 180.0) / (a / sqrtMagic * Math.Cos(radLat) * pi); double mgLat = lat + dLat; double mgLon = lon + dLon; info.setChina(true); info.setLatitude(mgLat); info.setLongitude(mgLon); return(info); }
public static ConvertBing gcj02_To_Wgs84(double lat, double lon) { ConvertBing info = new ConvertBing(); ConvertBing gps = transform(lat, lon); double lontitude = lon * 2 - gps.getLongitude(); double latitude = lat * 2 - gps.getLatitude(); info.setChina(gps.IsChina()); info.setLatitude(latitude); info.setLongitude(lontitude); return(info); }
private void Button_Click(object sender, RoutedEventArgs e) { //打开图片 OpenFileDialog openfiledialog = new OpenFileDialog { Filter = "图像文件|*.jpg;*.png;*.jpeg;*.bmp;*.gif|所有文件|*.*" }; if ((bool)openfiledialog.ShowDialog()) { photo.Source = new BitmapImage(new Uri(openfiledialog.FileName)); } string filename = openfiledialog.FileName; exifmessage.Text = filename; StringBuilder sb = new StringBuilder(); var directories = ImageMetadataReader.ReadMetadata(filename); StringBuilder latitude = new StringBuilder(); StringBuilder longgitude = new StringBuilder(); //经度输出 foreach (var directory in directories) { foreach (var tag in directory.Tags) { if ($"{tag.Name}" == "GPS Latitude") { sb.AppendLine($"[{directory.Name}] {tag.Name} = {tag.Description}"); latitude.AppendLine($"[{directory.Name}] {tag.Name} = {tag.Description}"); exifmessage.Text = sb.ToString(); } } } //纬度输出 foreach (var directory in directories) { foreach (var tag in directory.Tags) { if ($"{tag.Name}" == "GPS Longitude") { sb.AppendLine($"[{directory.Name}] {tag.Name} = {tag.Description}"); longgitude.AppendLine($"[{directory.Name}] {tag.Name} = {tag.Description}"); exifmessage.Text = sb.ToString(); } } } //时间输出 foreach (var directory in directories) { foreach (var tag in directory.Tags) { if ($"{tag.Name}" == "Date/Time") { sb.AppendLine($"[{directory.Name}] {tag.Name} = {tag.Description}"); longgitude.AppendLine($"[{directory.Name}] {tag.Name} = {tag.Description}"); exifmessage.Text = sb.ToString(); } } } //转换经纬度 double newlatitude = 0; double newlonggitude = 0; GCJ02_WGS84 gCJ02_WGS84 = new GCJ02_WGS84(); ConvertBing convertBing = new ConvertBing(); GPSConvert gPSConvert = new GPSConvert(); newlatitude = gPSConvert.getlatitude(latitude); newlonggitude = gPSConvert.getlonggitude(longgitude); convertBing = GCJ02_WGS84.wgs84_To_Gcj02(newlatitude, newlonggitude); latitudemessage.Text = "经度:" + convertBing.getLatitude().ToString("#0.000"); longitudemessage.Text = "纬度:" + convertBing.getLongitude().ToString("#0.000"); //生成图钉 Pushpin pushpin = new Pushpin(); MapLayer mapLayer = new MapLayer(); pushpin.MouseRightButtonDown += RemovePushpin; pushpin.Location = new Location(convertBing.getLatitude(), convertBing.getLongitude()); this.mapLayer.AddChild(pushpin, pushpin.Location); bingMap.Center = new Location(convertBing.getLatitude(), convertBing.getLongitude()); bingMap.ZoomLevel = 14; //图钉标注 var image = new Image { Width = 200, Height = 200, Margin = new Thickness(8) }; image.Source = new BitmapImage(new Uri(openfiledialog.FileName)); ToolTipService.SetToolTip(pushpin, image); //生成轨迹 if (flag > 0) { MapPolyline polyline = new MapPolyline(); Location startlocation = new Location(latTag, longTag); Location endlocation = new Location(convertBing.getLatitude(), convertBing.getLongitude()); polyline.Locations = new LocationCollection { new Location(startlocation), new Location(endlocation) }; polyline.Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Red); polyline.StrokeThickness = 5; polyline.Opacity = 1;//不透明度 this.mapLayer.Children.Add(polyline); polyline.MouseRightButtonDown += RemovePolyline; } latTag = convertBing.getLatitude(); longTag = convertBing.getLongitude(); flag++; }