Beispiel #1
0
        /// <summary>
        /// Reads GeoJson and returns the geometry.
        /// </summary>
        /// <param name="jsonReader"></param>
        /// <returns></returns>
        internal static Geometry ReadGeometry(JsonReader jsonReader)
        {
            var             geometryType = string.Empty;
            var             coordinates  = new List <object>();
            List <Geometry> geometries   = null;

            while (jsonReader.Read())
            {
                if (jsonReader.TokenType == JsonToken.EndObject)
                { // end of geometry.
                    break;
                }

                if (jsonReader.TokenType == JsonToken.PropertyName)
                {
                    if ((string)jsonReader.Value == "type")
                    { // the geometry type.
                        geometryType = jsonReader.ReadAsString();
                    }
                    else if ((string)jsonReader.Value == "geometries")
                    { // the geometries if a geometry collection.
                        geometries = GeoJsonConverter.ReadGeometryArray(jsonReader);
                    }
                    else if ((string)jsonReader.Value == "coordinates")
                    {                      // the coordinates.
                        jsonReader.Read(); // move to first array start.
                        coordinates = GeoJsonConverter.ReadCoordinateArrays(jsonReader);
                    }
                }
            }

            // data has been read, instantiate the actual object.
            switch (geometryType)
            {
            case "Point":
                return(GeoJsonConverter.BuildPoint(coordinates));

            case "LineString":
                return(GeoJsonConverter.BuildLineString(coordinates));

            case "Polygon":
                return(GeoJsonConverter.BuildPolygon(coordinates));

            case "MultiPoint":
                return(GeoJsonConverter.BuildMultiPoint(coordinates));

            case "MultiLineString":
                return(GeoJsonConverter.BuildMultiLineString(coordinates));

            case "MultiPolygon":
                return(GeoJsonConverter.BuildMultiPolygon(coordinates));

            case "GeometryCollection":
                return(GeoJsonConverter.BuildGeometryCollection(geometries));
            }
            throw new Exception(string.Format("Unknown geometry type: {0}", geometryType));
        }
Beispiel #2
0
        internal static Geometry ReadGeometry(JsonReader jsonReader)
        {
            string          s           = string.Empty;
            List <object>   coordinates = new List <object>();
            List <Geometry> geometries  = (List <Geometry>)null;

            while (jsonReader.Read() && jsonReader.TokenType != JsonToken.EndObject)
            {
                if (jsonReader.TokenType == JsonToken.PropertyName)
                {
                    if ((string)jsonReader.Value == "type")
                    {
                        s = jsonReader.ReadAsString();
                    }
                    else if ((string)jsonReader.Value == "geometries")
                    {
                        geometries = GeoJsonConverter.ReadGeometryArray(jsonReader);
                    }
                    else if ((string)jsonReader.Value == "coordinates")
                    {
                        jsonReader.Read();
                        coordinates = GeoJsonConverter.ReadCoordinateArrays(jsonReader);
                    }
                }
            }
            // ISSUE: reference to a compiler-generated method
            long stringHash = s.GetHashCode();// \u003CPrivateImplementationDetails\u003E.ComputeStringHash(s);

            if (stringHash <= 2386032169U)
            {
                if ((int)stringHash != 1547714260)
                {
                    if ((int)stringHash != 2050635977)
                    {
                        if ((int)stringHash == -1908935127 && s == "Polygon")
                        {
                            return((Geometry)GeoJsonConverter.BuildPolygon(coordinates));
                        }
                    }
                    else if (s == "MultiLineString")
                    {
                        return((Geometry)GeoJsonConverter.BuildMultiLineString(coordinates));
                    }
                }
                else if (s == "MultiPolygon")
                {
                    return((Geometry)GeoJsonConverter.BuildMultiPolygon(coordinates));
                }
            }
            else if (stringHash <= 3786658501U)
            {
                if ((int)stringHash != -600749884)
                {
                    if ((int)stringHash == -508308795 && s == "GeometryCollection")
                    {
                        return((Geometry)GeoJsonConverter.BuildGeometryCollection(geometries));
                    }
                }
                else if (s == "MultiPoint")
                {
                    return((Geometry)GeoJsonConverter.BuildMultiPoint(coordinates));
                }
            }
            else if ((int)stringHash != -358027471)
            {
                if ((int)stringHash == -200799438 && s == "LineString")
                {
                    return((Geometry)GeoJsonConverter.BuildLineString(coordinates));
                }
            }
            else if (s == "Point")
            {
                return((Geometry)GeoJsonConverter.BuildPoint(coordinates));
            }
            throw new Exception(string.Format("Unknown geometry type: {0}", (object)s));
        }