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);
        }