Beispiel #1
0
        public TopoObject Build()
        {
            TopoObject obj;

            switch (_type)
            {
            case "Point":
                obj = new TopoPoint(_type, _coordinates);
                break;

            case "LineString":
                obj = new TopoLineString(_type, _arcs);
                break;

            case "Polygon":
                obj = new TopoPolygon(_type, _arcs);
                break;

            case "MultiPoint":
                obj = new TopoMultiPoint(_type, _coordinates);
                break;

            case "MultiLineString":
                obj = new TopoMultiLineString(_type, _arcs);
                break;

            case "MultiPolygon":
                obj = new TopoMultiPolygon(_type, _arcs);
                break;

            case "GeometryCollection":
                obj = new TopoCollection(_type, _geometries);
                break;

            default:
                throw new ArgumentOutOfRangeException("unhandled type: " + _type);
            }
            obj.Id         = _id;
            obj.Properties = _properties;
            return(obj);
        }
        public FeatureCollection Create(TopoObject data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            string type = data.Type;

            if (String.IsNullOrEmpty(type))
            {
                throw new ArgumentException("type undefined", "data");
            }

            if (String.Equals("GeometryCollection", type))
            {
                // a TopoJSON "GeometryCollection" actually is an IFeature array
                // so we handle this stuff as a special case
                TopoCollection coll = (TopoCollection)data;
                return(CreateCollection(coll.Geometries));
            }

            IGeometry geometry;

            switch (type)
            {
            case "Point":
                TopoPoint point = (TopoPoint)data;
                geometry = CreatePoint(point.Coordinates);
                break;

            case "MultiPoint":
                TopoMultiPoint mpoint = (TopoMultiPoint)data;
                geometry = CreateMultiPoint(mpoint.Coordinates);
                break;

            case "LineString":
                TopoLineString lstring = (TopoLineString)data;
                geometry = CreateLineString(lstring.Arcs);
                break;

            case "MultiLineString":
                TopoMultiLineString mlstring = (TopoMultiLineString)data;
                geometry = CreateMultiLineString(mlstring.Arcs);
                break;

            case "Polygon":
                TopoPolygon poly = (TopoPolygon)data;
                geometry = CreatePolygon(poly.Arcs);
                break;

            case "MultiPolygon":
                TopoMultiPolygon mpoly = (TopoMultiPolygon)data;
                geometry = CreateMultiPolygon(mpoly.Arcs);
                break;

            default:
                string s = string.Format("type unsupported: {0}", type);
                throw new NotSupportedException(s);
            }

            IAttributesTable      properties = data.Properties;
            Feature               feature    = new Feature(geometry, properties);
            Collection <IFeature> collection = new Collection <IFeature> {
                feature
            };

            return(new FeatureCollection(collection));
        }