private void WriteGeometry(Geometry geom, DelimitedFileWriter writer, List <string> colNames, string primaryKeyName, string geometryColumnName, bool hasGeometry) { if (geom.Metadata != null) { var row = new List <object>(); foreach (var colName in colNames) { if (hasGeometry && string.CompareOrdinal(colName, geometryColumnName) == 0) { row.Add(geom.ToString()); } else if (string.CompareOrdinal(colName, "Latitude") == 0 && geom is Point) { var p = geom as Point; if (p.IsValid()) { row.Add(p.Coordinate.Latitude.ToString("N5")); } else { row.Add(string.Empty); } } else if (string.CompareOrdinal(colName, "Longitude") == 0 && geom is Point) { var p = geom as Point; if (p.IsValid()) { row.Add(p.Coordinate.Longitude.ToString("N5")); } else { row.Add(string.Empty); } } else if (string.CompareOrdinal(colName, primaryKeyName) == 0) { row.Add(geom.Metadata.ID); } else if (geom.Metadata.Properties.ContainsKey(colName)) { row.Add(geom.Metadata.Properties[colName]); } else { row.Add(string.Empty); } } writer.WriteRow(row, true); } }
private void Write(SpatialDataSet data, Stream outputStream) { char delimiter; switch (_dataSourceType) { case BingDataSourceType.PIPE: delimiter = '|'; break; case BingDataSourceType.TAB: delimiter = '\t'; break; case BingDataSourceType.CSV: default: delimiter = ','; break; } Dictionary <string, Type> columnInfo; bool hasGeometry; string dataSourceName, entityTypeName, primaryKeyName, geometryColumnName; data = CleanDataSet(data, out columnInfo, out dataSourceName, out entityTypeName, out primaryKeyName, out geometryColumnName, out hasGeometry); var colNames = new List <string>(columnInfo.Keys); if (!columnInfo.ContainsKey(primaryKeyName)) { columnInfo.Add(primaryKeyName, typeof(string)); colNames.Insert(0, primaryKeyName); } if (!columnInfo.ContainsKey("Latitude")) { columnInfo.Add("Latitude", typeof(double)); colNames.Add("Latitude"); } if (!columnInfo.ContainsKey("Longitude")) { columnInfo.Add("Longitude", typeof(double)); colNames.Add("Longitude"); } if (hasGeometry && !columnInfo.ContainsKey(geometryColumnName)) { columnInfo.Add(geometryColumnName, typeof(string)); colNames.Add(geometryColumnName); } using (var writer = new DelimitedFileWriter(outputStream, columnInfo.Count, delimiter)) { //Add Bing Schema Information writer.WriteLine(string.Format(_schemaText, entityTypeName)); var headerCells = new List <string>(); //Generate Header Information foreach (var colName in colNames) { var name = colName + "(" + GetDelimitedPropertyType(columnInfo[colName]); if (string.CompareOrdinal(colName, primaryKeyName) == 0) { name += ",primaryKey"; } name += ")"; headerCells.Add(name); } //Write Header Information writer.WriteRow(headerCells, false); if (data != null) { //Write the rows foreach (var item in data.Geometries) { WriteGeometry(item, writer, colNames, primaryKeyName, geometryColumnName, hasGeometry); } } } }