private void RenderKml(sqlServerConnection sql /*, string longlatCols_, string kmlCol*/) { bool kmlFromLonglat = false; bool kmlFromSnippet = false; bool kmlName = false; bool kmlDesc = false; string longitude = ""; //column string latitude = ""; //column string snippet = ""; //column string name = ""; //column string description = ""; //column //get KML metadata var reader = sql.GetReader("select * from odpdataservicemetadata where EntitysetName='" + _entitySet + "';"); if (reader.Rows.Count > 0)//just read one { //TODO can we recycle this, see gskhasdfsfdsagf //exclude this from the OData feed var lon = reader.Rows[0]["Longitude"]; var lat = reader.Rows[0]["Latitude"]; var kml_ = reader.Rows[0]["KmlSnippet"]; var name_ = reader.Rows[0]["KmlName"]; var desc = reader.Rows[0]["KmlDescription"]; kmlFromLonglat = lon.GetType() != typeof(System.DBNull) && lat.GetType() != typeof(System.DBNull); kmlFromSnippet = !kmlFromLonglat && kml_.GetType() != typeof(System.DBNull); kmlName = name_.GetType() != typeof(System.DBNull); kmlDesc = desc.GetType() != typeof(System.DBNull); if (kmlFromLonglat) { longitude = lon.ToString(); latitude = lat.ToString(); } if (kmlFromSnippet) { snippet = kml_.ToString(); } if (kmlName) { name = name_.ToString(); } if (kmlDesc) { description = desc.ToString(); } } string columns;//to select from the table if (kmlFromLonglat || kmlFromSnippet) { if (kmlFromLonglat) { columns = longitude + ", " + latitude; } else { columns = snippet; } if (kmlName) { columns += ", " + name; } if (kmlDesc) { columns += ", " + description; } } else//geometry property { _context.Response.StatusCode = 404;//not found _context.Response.End(); return; } _context.Response.ContentType = "application/vnd.google-earth.kml+xml"; _context.Response.Write(string.Format(STARTING_KML, _entitySet)); string table = sql.GetTableName(_ogdiAlias, _entitySet); string where = sqlServerConnection.WcfToSqlFilter(_filter); string sqltest = "SELECT " + columns + " FROM " + table + (string.IsNullOrEmpty(where) ? "" : (" WHERE " + where)) + ";"; reader = sql.GetReader( "SELECT " + columns + " FROM " + table + (string.IsNullOrEmpty(where) ? "" : (" WHERE " + where)) + ";"); var format = new NumberFormatInfo() { NumberDecimalSeparator = "." }; foreach (DataRow row in reader.Rows) { if (!Convert.IsDBNull(row[0]) && !Convert.IsDBNull(row[1])) { string placemark = ""; if (kmlFromLonglat || kmlFromSnippet) { var nameVal = kmlName ? row[name].ToString() : ""; var descVal = kmlName ? row[description].ToString() : ""; string geom = ""; if (kmlFromLonglat) { geom = string.Format(POINT_KML, Convert.ToDouble(row[0]).ToString(format), Convert.ToDouble(row[1]).ToString(format));//TODO include Z if needed } else if (kmlFromSnippet) { geom = row[snippet].ToString(); if (string.IsNullOrEmpty(geom)) { continue; } } placemark = string.Format(PLACEMARK_KML, geom, nameVal, descVal); } else//from geometry otherwise we wouldn't be here { placemark = "kmlfrom geometry not implemented\n"; } _context.Response.Write(placemark); } } _context.Response.Write(ENDING_KML); }
private void RenderKml(sqlServerConnection sql/*, string longlatCols_, string kmlCol*/) { bool kmlFromLonglat = false; bool kmlFromSnippet = false; bool kmlName = false; bool kmlDesc = false; string longitude = "";//column string latitude = "";//column string snippet = "";//column string name = "";//column string description = "";//column //get KML metadata var reader = sql.GetReader("select * from odpdataservicemetadata where EntitysetName='" + _entitySet + "';"); if (reader.Rows.Count > 0)//just read one { //TODO can we recycle this, see gskhasdfsfdsagf //exclude this from the OData feed var lon = reader.Rows[0]["Longitude"]; var lat = reader.Rows[0]["Latitude"]; var kml_ = reader.Rows[0]["KmlSnippet"]; var name_ = reader.Rows[0]["KmlName"]; var desc = reader.Rows[0]["KmlDescription"]; kmlFromLonglat = lon.GetType() != typeof(System.DBNull) && lat.GetType() != typeof(System.DBNull); kmlFromSnippet = !kmlFromLonglat && kml_.GetType() != typeof(System.DBNull); kmlName = name_.GetType() != typeof(System.DBNull); kmlDesc = desc.GetType() != typeof(System.DBNull); if (kmlFromLonglat) { longitude = lon.ToString(); latitude = lat.ToString(); } if (kmlFromSnippet) snippet = kml_.ToString(); if (kmlName) name = name_.ToString(); if (kmlDesc) description = desc.ToString(); } string columns;//to select from the table if (kmlFromLonglat || kmlFromSnippet) { if (kmlFromLonglat) columns = longitude + ", " + latitude; else columns = snippet; if (kmlName) columns += ", " + name; if (kmlDesc) columns += ", " + description; } else//geometry property { _context.Response.StatusCode = 404;//not found _context.Response.End(); return; } _context.Response.ContentType = "application/vnd.google-earth.kml+xml"; _context.Response.Write(string.Format(STARTING_KML, _entitySet)); string table = sql.GetTableName(_ogdiAlias, _entitySet); string where = sqlServerConnection.WcfToSqlFilter(_filter); string sqltest = "SELECT " + columns + " FROM " + table + (string.IsNullOrEmpty(where) ? "" : (" WHERE " + where)) + ";"; reader = sql.GetReader( "SELECT " + columns + " FROM " + table + (string.IsNullOrEmpty(where) ? "" : (" WHERE " + where)) + ";"); var format = new NumberFormatInfo() { NumberDecimalSeparator = "." }; foreach(DataRow row in reader.Rows) { if (!Convert.IsDBNull(row[0]) && !Convert.IsDBNull(row[1])) { string placemark = ""; if (kmlFromLonglat || kmlFromSnippet) { var nameVal = kmlName ? row[name].ToString() : ""; var descVal = kmlName ? row[description].ToString() : ""; string geom = ""; if (kmlFromLonglat) geom = string.Format(POINT_KML, Convert.ToDouble(row[0]).ToString(format), Convert.ToDouble(row[1]).ToString(format));//TODO include Z if needed else if (kmlFromSnippet) { geom = row[snippet].ToString(); if (string.IsNullOrEmpty(geom)) continue; } placemark = string.Format(PLACEMARK_KML, geom, nameVal, descVal); } else//from geometry otherwise we wouldn't be here { placemark = "kmlfrom geometry not implemented\n"; } _context.Response.Write(placemark); } } _context.Response.Write(ENDING_KML); }