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