Esempio n. 1
0
        public void GenerateWaterJSON(string data, GameObject Container, DVector3 PositionMeters)
        {
            mc = transform.parent.Find("terrain").GetComponent <MeshCollider>();
            TileBoundsMeters = this.transform.parent.GetComponent <MassiveTile>().TileBoundsMeters;
            Container.layer  = LayerMask.NameToLayer("Water");
            sData            = data;
            Data             = (Dictionary <string, object>)MiniJSON.Json.Deserialize(sData);

            IList features = (IList)Data["features"];

            foreach (IDictionary feature in features)
            {
                IDictionary geometry   = (IDictionary)feature["geometry"];
                string      type       = (string)geometry["type"];
                IDictionary properties = (IDictionary)feature["properties"];
                string      kind       = OSMTools.GetProperty(properties, "kind");

                List <List <Vector3> > segments = new List <List <Vector3> >();

                /*
                 * if (type == "LineString")
                 * {
                 * List<DVector3> list = new List<DVector3>();
                 * foreach (IList piece in (IList)geometry["coordinates"])
                 * {
                 *  double dx = (double)piece[0];
                 *  double dz = (double)piece[1];
                 *  DVector3 v = MapFuncs.LatLonToMeters((float)dz, (float)dx);
                 *  v -= PositionMeters;
                 *  list.Add(v);
                 * }
                 * segments.Add(list);
                 * }
                 */

                if (type == "MultiPolygon")
                {
                    IList segs = (IList)geometry["coordinates"];
                    foreach (IList part in segs)
                    {
                        segments = OSMTools.CreateMultiPolygon(part, PositionMeters);
                        GenerateGeometry(segments, Container, properties, type);
                    }
                }
                if (type == "Polygon")
                {
                    IList segs = (IList)geometry["coordinates"];
                    foreach (IList part in segs)
                    {
                        segments = OSMTools.CreatePolygon(part, PositionMeters.ToVector3());
                        GenerateGeometry(segments, Container, properties, type);
                    }
                }

                //Debug.Log(segments);
            }
        }
        public void Generate(string sData, GameObject Container, DVector3 iPositionMeters)
        {
            mc = transform.parent.Find("terrain").GetComponent <MeshCollider>();
            Container.layer  = LayerMask.NameToLayer("Buildings");
            TileBoundsMeters = this.transform.parent.GetComponent <MassiveTile>().TileBoundsMeters;
            PositionMeters   = iPositionMeters;

            Data = (Dictionary <string, object>)MiniJSON.Json.Deserialize(sData);
            IList features = (IList)Data["features"];

            foreach (IDictionary feature in features)
            {
                IDictionary geometry   = (IDictionary)feature["geometry"];
                string      type       = (string)geometry["type"];
                IDictionary properties = (IDictionary)feature["properties"];
                //string kind = OSMTools.GetProperty(properties, "kind");

                if (type == "MultiPolygon")
                {
                    IList segs = (IList)geometry["coordinates"];
                    foreach (IList segment in segs)
                    {
                        //segments = OSMTools.CreateMultiPolygon(geometry, PositionMeters);
                        List <List <Vector3> > segments = new List <List <Vector3> >();
                        segments = OSMTools.CreateMultiPolygon(segment, PositionMeters);
                        GenerateGeometry(segments, Container, properties, type);
                    }
                }
                if (type == "Polygon")
                {
                    IList segs = (IList)geometry["coordinates"];
                    foreach (IList segment in segs)
                    {
                        List <List <Vector3> > segments = new List <List <Vector3> >();
                        segments = OSMTools.CreatePolygon(segment, PositionMeters.ToVector3());
                        GenerateGeometry(segments, Container, properties, type);
                    }
                }

                //Debug.Log(segments);
            }
        }