public Point GetPointByLine(string line, string station) { var conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConn"].ConnectionString); conn.Open(); var cmd = new OracleCommand( string.Format( "select strlon02,strlat02 from stationclass t where levelid=1 and roadline='{0}' and (stationname like '%{1}%' or levelname like '%{1}%')", line, station.Substring(0, station.Length - 2)), conn); var dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); if (!dataReader.HasRows) { return(null); } dataReader.Read(); var gpsPoint = GPSConvert.Gcj02_To_Bd09(new GPSPoint((double)dataReader["strlon02"], (double)dataReader["strlat02"])); var point = new Point(gpsPoint.Lon.ToString(CultureInfo.InvariantCulture), gpsPoint.Lat.ToString(CultureInfo.InvariantCulture)); dataReader.Close(); cmd.Dispose(); conn.Close(); return(point); }
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++; }
public List <dynamic> GetPointsByLines(List <ScreenRec> screens) { var res = new List <dynamic>(); var lines = screens.Select( t => new { rec = t, line = t.LineName.Contains("、")? t.LineName.Split(new[] { '、' }, StringSplitOptions.RemoveEmptyEntries)[0]:t.LineName }) .ToList(); string inStr; if (lines.Count > 1000) { inStr = "roadline in (" + string.Join(",", lines.Take(1000).Select(t => "'" + t.line + "'").ToArray()) + ")"; var i = 1; while (lines.Skip(1000 * i).Any()) { var l = lines.Skip(1000 * i).ToList(); inStr += " or roadline in (" + string.Join(",", l.Take(l.Count > 1000 ? 1000 : l.Count).Select(t => "'" + t.line + "'").ToArray()) + ")"; i++; } } else { inStr = "roadline in (" + string.Join(",", lines.Select(t => "'" + t.line + "'").ToArray()) + ")"; } var conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConn"].ConnectionString); conn.Open(); var cmd = new OracleCommand( string.Format( "select roadline,stationname,levelname,strlon02,strlat02 from stationclass t where levelid=1 and ({0})", inStr), conn); var dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); if (!dataReader.HasRows) { return(null); } var dt = new DataTable(); dt.Load(dataReader); foreach (var line in lines) { var nameLike = line.rec.InstallStation.Length > 0 ? line.rec.InstallStation.Substring(0, line.rec.InstallStation.Length - 2) : ""; var dr = dt.Select("roadline='" + line.line + "' and (stationname like '%" + nameLike + "%' or levelname like '%" + nameLike + "%')") .FirstOrDefault(); if (dr == null) { continue; } var gpsPoint = GPSConvert.Gcj02_To_Bd09(new GPSPoint((double)dr["strlon02"], (double)dr["strlat02"])); var point = new Point(gpsPoint.Lon.ToString(CultureInfo.InvariantCulture), gpsPoint.Lat.ToString(CultureInfo.InvariantCulture)); res.Add(new { line.rec, point }); } dataReader.Close(); cmd.Dispose(); conn.Close(); return(res); }