public bool TryWriteGeometry(JsonWriter writer, object value, JsonSerializer serializer) { ObjectType geomType = _shapeConverter.GetObjectType(value); if (!_shapeConverter.CanConvert(geomType)) { return(false); } switch (geomType) { case ObjectType.Point: case ObjectType.LineString: case ObjectType.Polygon: case ObjectType.MultiPoint: case ObjectType.MultiLineString: case ObjectType.MultiPolygon: break; default: return(false); } writer.WriteStartObject(); writer.WritePropertyName("type"); writer.WriteValue(Enum.GetName(typeof(ObjectType), geomType)); writer.WritePropertyName("coordinates"); switch (geomType) { case ObjectType.Point: WriteJsonCoordinate(writer, _shapeConverter.FromPoint(value)); break; case ObjectType.LineString: WriteJsonCoordinates(writer, _shapeConverter.FromLineString(value)); break; case ObjectType.MultiPoint: WriteJsonCoordinates(writer, _shapeConverter.FromMultiPoint(value)); break; case ObjectType.Polygon: WriteJsonCoordinatesEnumerable(writer, _shapeConverter.FromPolygon(value)); break; case ObjectType.MultiLineString: WriteJsonCoordinatesEnumerable(writer, _shapeConverter.FromMultiLineString(value)); break; case ObjectType.MultiPolygon: WriteJsonCoordinatesEnumerable2(writer, _shapeConverter.FromMultiPolygon(value)); break; } writer.WriteEndObject(); return(true); }
private void AppendLineString(StringBuilder builder, object lineString) { var ls = _shapeConverter.FromLineString(lineString); builder.Append("LINESTRING"); AppendDimensions(builder, GetDimensions(ls)); builder.Append(" "); AppendLineStringInner(builder, ls); }
public bool TryWriteGeo(JsonWriter writer, object value, JsonSerializer serializer) { var route = value as Route; if (route != null) { writer.WriteStartObject(); writer.WritePropertyName("__geo"); writer.WriteStartObject(); writer.WritePropertyName("type"); writer.WriteValue("Route"); if (route.Metadata.Count > 0) { writer.WritePropertyName("metadata"); serializer.Serialize(writer, route.Metadata); } writer.WriteEndObject(); writer.WritePropertyName("type"); writer.WriteValue(Enum.GetName(typeof(ObjectType), ObjectType.LineString)); writer.WritePropertyName("coordinates"); WriteJsonCoordinates(writer, _shapeConverter.FromLineString(route.ToLineString())); writer.WriteEndObject(); return(true); } var track = value as Track; if (track != null) { writer.WriteStartObject(); writer.WritePropertyName("__geo"); writer.WriteStartObject(); writer.WritePropertyName("type"); writer.WriteValue("Track"); if (track.Metadata.Count > 0) { writer.WritePropertyName("metadata"); serializer.Serialize(writer, track.Metadata); } writer.WritePropertyName("times"); writer.WriteStartArray(); foreach (var segment in track.Segments) { writer.WriteStartArray(); foreach (var fix in segment.Fixes) { writer.WriteValue(fix.TimeUtc); } writer.WriteEndArray(); } writer.WriteEndArray(); writer.WriteEndObject(); writer.WritePropertyName("type"); writer.WriteValue(Enum.GetName(typeof(ObjectType), ObjectType.LineString)); writer.WritePropertyName("coordinates"); WriteJsonCoordinates(writer, _shapeConverter.FromLineString(track.ToLineString())); writer.WriteEndObject(); return(true); } return(false); }