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);
        }
Esempio n. 2
0
        private void AppendLineString(StringBuilder builder, object lineString)
        {
            var ls = _shapeConverter.FromLineString(lineString);

            builder.Append("LINESTRING");
            AppendDimensions(builder, GetDimensions(ls));
            builder.Append(" ");
            AppendLineStringInner(builder, ls);
        }
Esempio n. 3
0
        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);
        }