Ejemplo n.º 1
0
        public PolylineBuilder(MeshData outputMeshData, Options options, Matrix4x4 transform)
        {
            this.options = options;

            var polygonOptions = new PolygonBuilder.Options();

            polygonOptions.Material  = options.Material;
            polygonOptions.Extrude   = options.Extrude;
            polygonOptions.MinHeight = options.MinHeight;
            polygonOptions.MaxHeight = options.MaxHeight;

            polygonBuilder = new PolygonBuilder(outputMeshData, polygonOptions, transform);
            polyline       = new List <Vector2>();
        }
Ejemplo n.º 2
0
        public void Start(List <FeatureStyle> featureStyling, SceneGroup root)
        {
            // Parse the GeoJSON
            // var tileData = new GeoJsonTile(address, response);
            var tileData = new MvtTile(address, response);

            // The leaf currently used (will hold the mesh data for the currently matched group)
            SceneGroup leaf = root;

            var tileGroup = OnSceneGroupData(SceneGroup.Type.Tile, address.ToString(), root, ref leaf);

            foreach (var style in featureStyling)
            {
                // TODO: group by style?

                foreach (var filterStyle in style.FilterStyles)
                {
                    var filterGroup = OnSceneGroupData(SceneGroup.Type.Filter, filterStyle.Name, tileGroup, ref leaf);

                    foreach (var layer in tileData.FeatureCollections)
                    {
                        var layerGroup = OnSceneGroupData(SceneGroup.Type.Layer, layer.Name, filterGroup, ref leaf);

                        foreach (var feature in filterStyle.Filter.Filter(layer))
                        {
                            var layerStyle = filterStyle.LayerStyles.Find(ls => ls.LayerName == layer.Name);

                            string featureName = "";
                            object identifier;

                            if (feature.TryGetProperty("id", out identifier))
                            {
                                featureName += identifier.ToString();
                            }

                            OnSceneGroupData(SceneGroup.Type.Feature, featureName, layerGroup, ref leaf);

                            if (feature.Type == GeometryType.Polygon || feature.Type == GeometryType.MultiPolygon)
                            {
                                var polygonOptions = layerStyle.GetPolygonOptions(feature, inverseTileScale);

                                if (polygonOptions.Enabled)
                                {
                                    var builder = new PolygonBuilder(leaf.meshData, polygonOptions, transform);
                                    feature.HandleGeometry(builder);
                                }
                            }

                            if (feature.Type == GeometryType.LineString || feature.Type == GeometryType.MultiLineString)
                            {
                                var polylineOptions = layerStyle.GetPolylineOptions(feature, inverseTileScale);

                                if (polylineOptions.Enabled)
                                {
                                    var builder = new PolylineBuilder(leaf.meshData, polylineOptions, transform);
                                    feature.HandleGeometry(builder);
                                }
                            }
                        }
                    }
                }
            }

            ready = true;
        }