Exemple #1
0
        private void _ReadGeometry(JsonReader reader, IGeometryBuilder builder, GeometryType type)
        {
            switch (type)
            {
            case GeometryType.GeometryCollection:
            case GeometryType.MultiLineString:
            //case GeometryType.MultiPoint:
            case GeometryType.MultiPolygon:
            case GeometryType.Polygon:
                if (reader.TokenType != JsonToken.StartArray)
                {
                    throw new JsonReaderException(SR.InvalidGeoJsonLineInfoException);
                }
                if (!reader.Read())
                {
                    _ThrowGeoJsonException(reader, null);
                }
                break;
            }
            builder.BeginGeometry(type);

            switch (type)
            {
            case GeometryType.MultiPolygon:
                do
                {
                    _ReadGeometry(reader, builder, GeometryType.Polygon);
                } while ((reader.TokenType != JsonToken.EndArray) && (reader.TokenType != JsonToken.EndObject));
                break;

            default:
                do
                {
                    _ReadFigure(reader, builder, type);
                } while ((reader.TokenType != JsonToken.EndArray) && (reader.TokenType != JsonToken.EndObject));
                break;
            }

            switch (type)
            {
            case GeometryType.GeometryCollection:
            case GeometryType.MultiLineString:
            //case GeometryType.MultiPoint:
            case GeometryType.MultiPolygon:
            case GeometryType.Polygon:
                if (reader.TokenType != JsonToken.EndArray)
                {
                    _ThrowGeoJsonException(reader, JsonToken.EndArray);
                }
                if (!reader.Read())
                {
                    _ThrowGeoJsonException(reader, null);
                }
                break;
            }
            builder.EndGeometry();
        }
        private void _ReadGeometry(JsonReader reader, IGeometryBuilder builder, GeometryType type)
        {
            switch (type)
            {
            case GeometryType.GeometryCollection:
            case GeometryType.MultiLineString:
            //case GeometryType.MultiPoint:
            case GeometryType.MultiPolygon:
            case GeometryType.Polygon:
                if (reader.TokenType!=JsonToken.StartArray)
                    throw new JsonReaderException(SR.InvalidGeoJsonLineInfoException);
                if (!reader.Read())
                    _ThrowGeoJsonException(reader, null);
                break;
            }
            builder.BeginGeometry(type);

            switch (type)
            {
            case GeometryType.MultiPolygon:
                do
                {
                    _ReadGeometry(reader, builder, GeometryType.Polygon);
                } while ((reader.TokenType!=JsonToken.EndArray) && (reader.TokenType!=JsonToken.EndObject));
                break;
            default:
                do
                {
                    _ReadFigure(reader, builder, type);
                } while ((reader.TokenType!=JsonToken.EndArray) && (reader.TokenType!=JsonToken.EndObject));
                break;
            }

            switch (type)
            {
            case GeometryType.GeometryCollection:
            case GeometryType.MultiLineString:
            //case GeometryType.MultiPoint:
            case GeometryType.MultiPolygon:
            case GeometryType.Polygon:
                if (reader.TokenType!=JsonToken.EndArray)
                    _ThrowGeoJsonException(reader, JsonToken.EndArray);
                if (!reader.Read())
                _ThrowGeoJsonException(reader, null);
                break;
            }
            builder.EndGeometry();
        }