Пример #1
0
    //tile here should be totally optional and used only not to have keep a dictionary in terrain factory base
    public override void FetchData(DataFetcherParameters parameters)
    {
        var terrainDataParameters = parameters as TerrainDataFetcherParameters;

        if (terrainDataParameters == null)
        {
            return;
        }
        var pngRasterTile = new RawPngRasterTile();

        pngRasterTile.Initialize(_fileSource, terrainDataParameters.canonicalTileId, terrainDataParameters.mapid, () =>
        {
            if (terrainDataParameters.tile.CanonicalTileId != pngRasterTile.Id)
            {
                //this means tile object is recycled and reused. Returned data doesn't belong to this tile but probably the previous one. So we're trashing it.
                return;
            }

            if (pngRasterTile.HasError)
            {
                FetchingError(terrainDataParameters.tile, pngRasterTile, new TileErrorEventArgs(terrainDataParameters.canonicalTileId, pngRasterTile.GetType(), null, pngRasterTile.Exceptions));
            }
            else
            {
                DataRecieved(terrainDataParameters.tile, pngRasterTile);
            }
        });
    }
Пример #2
0
    //tile here should be totally optional and used only not to have keep a dictionary in terrain factory base
    public override void FetchData(DataFetcherParameters parameters, bool useMapBoxElevation = true)
    {
        var vectorDaraParameters = parameters as VectorDataFetcherParameters;

        if (vectorDaraParameters == null)
        {
            return;
        }
        var vectorTile = (vectorDaraParameters.useOptimizedStyle) ? new VectorTile(vectorDaraParameters.style.Id, vectorDaraParameters.style.Modified) : new VectorTile();

        vectorDaraParameters.tile.AddTile(vectorTile);
        vectorTile.Initialize(_fileSource, vectorDaraParameters.tile.CanonicalTileId, vectorDaraParameters.mapid, () =>
        {
            if (vectorDaraParameters.tile.CanonicalTileId != vectorTile.Id)
            {
                //this means tile object is recycled and reused. Returned data doesn't belong to this tile but probably the previous one. So we're trashing it.
                return;
            }
            if (vectorTile.HasError)
            {
                FetchingError(vectorDaraParameters.tile, vectorTile, new TileErrorEventArgs(vectorDaraParameters.tile.CanonicalTileId, vectorTile.GetType(), vectorDaraParameters.tile, vectorTile.Exceptions));
            }
            else
            {
                DataRecieved(vectorDaraParameters.tile, vectorTile);
            }
        });
    }
Пример #3
0
        public override void FetchData(DataFetcherParameters parameters)
        {
            if (!(parameters is TerrainImageFetcherParameters imageDataParameters))
            {
                return;
            }

            var rasterTile = imageDataParameters.useRetina ? new RetinaRasterTile() : new RasterTile();

            rasterTile.Initialize(_fileSource, imageDataParameters.cTile.CanonicalTileId, imageDataParameters.tilesetId, () =>
            {
                if (imageDataParameters.cTile.CanonicalTileId != rasterTile.Id)
                {
                    return;
                }

                if (rasterTile.HasError)
                {
                    Debug.LogError("Terrain Image Error!");
                }
                else
                {
                    dataReceived(imageDataParameters.cTile, rasterTile);
                }
            });
        }
Пример #4
0
        public override void FetchData(DataFetcherParameters parameters)
        {
            if (!(parameters is BuildingMeshFetcherParameters fetcherParameters))
            {
                return;
            }

            var vectorTile = new VectorTile();

            vectorTile.Initialize(_fileSource, fetcherParameters.canonicalTileId, fetcherParameters.tilesetId, () =>
            {
                if (fetcherParameters.canonicalTileId != vectorTile.Id)
                {
                    return;
                }

                if (vectorTile.HasError)
                {
                    UnityEngine.Debug.LogError("Vector Tile Error!");
                }
                else
                {
                    dataReceived(fetcherParameters.cTile, vectorTile);
                }
            });
        }
Пример #5
0
    //tile here should be totally optional and used only not to have keep a dictionary in terrain factory base
    public override void FetchData(DataFetcherParameters parameters)
    {
        var imageDataParameters = parameters as ImageDataFetcherParameters;

        if (imageDataParameters == null)
        {
            return;
        }
        RasterTile rasterTile;

        if (imageDataParameters.mapid.StartsWith("mapbox://", StringComparison.Ordinal))
        {
            rasterTile = imageDataParameters.useRetina ? new RetinaRasterTile() : new RasterTile();
        }
        else
        {
            rasterTile = imageDataParameters.useRetina ? new ClassicRetinaRasterTile() : new ClassicRasterTile();
        }

        if (imageDataParameters.tile != null)
        {
            imageDataParameters.tile.AddTile(rasterTile);
        }

        rasterTile.Initialize(_fileSource, imageDataParameters.tile.CanonicalTileId, imageDataParameters.mapid, () =>
        {
            if (imageDataParameters.tile.CanonicalTileId != rasterTile.Id)
            {
                //this means tile object is recycled and reused. Returned data doesn't belong to this tile but probably the previous one. So we're trashing it.
                return;
            }

            if (rasterTile.HasError)
            {
                FetchingError(imageDataParameters.tile, rasterTile, new TileErrorEventArgs(imageDataParameters.tile.CanonicalTileId, rasterTile.GetType(), imageDataParameters.tile, rasterTile.Exceptions));
            }
            else
            {
                DataRecieved(imageDataParameters.tile, rasterTile);
            }
        });
    }
Пример #6
0
 public abstract void FetchData(DataFetcherParameters parameters);
Пример #7
0
    //tile here should be totally optional and used only not to have keep a dictionary in terrain factory base
    public override void FetchData(DataFetcherParameters parameters, bool useMapBox = true)
    {
        if (CoroutineParent == null)
        {
            CoroutineParent      = new GameObject();
            CoroutineParent.name = "CoroutineParent";
        }

        var imageDataParameters = parameters as ImageDataFetcherParameters;

        if (imageDataParameters == null)
        {
            return;
        }

        RasterTile rasterTile;

        if (imageDataParameters.mapid.StartsWith("mapbox://", StringComparison.Ordinal))
        {
            rasterTile = imageDataParameters.useRetina ? new RetinaRasterTile() : new RasterTile();
        }
        else
        {
            rasterTile = imageDataParameters.useRetina ? new ClassicRetinaRasterTile() : new ClassicRasterTile();
        }

        if (imageDataParameters.tile != null)
        {
            imageDataParameters.tile.AddTile(rasterTile);
        }

        TileInitializer(rasterTile, _fileSource, imageDataParameters.tile, imageDataParameters.mapid);


        bool useMaplarge = false; //!useMapBox;

        if (useMapBox)
        {
            RasterTile elevationTile = imageDataParameters.useRetina ? new ClassicRetinaRasterTile() : new ClassicRasterTile();
            RasterTile porosityTile  = imageDataParameters.useRetina ? new ClassicRetinaRasterTile() : new ClassicRasterTile();
            RasterTile thicknessTile = imageDataParameters.useRetina ? new ClassicRetinaRasterTile() : new ClassicRasterTile();
            RasterTile TOCTile       = imageDataParameters.useRetina ? new ClassicRetinaRasterTile() : new ClassicRasterTile();
            RasterTile vShaleTile    = imageDataParameters.useRetina ? new ClassicRetinaRasterTile() : new ClassicRasterTile();

            TileInitializer(elevationTile, _fileSource, imageDataParameters.tile, "victer.0fd7kryp", Layers.Elevation, true);
            TileInitializer(porosityTile, _fileSource, imageDataParameters.tile, "victer.2w2lzfug", Layers.Porosity, true);
            TileInitializer(thicknessTile, _fileSource, imageDataParameters.tile, "victer.3totsqo7", Layers.Thickness, true);
            TileInitializer(TOCTile, _fileSource, imageDataParameters.tile, "victer.3df23l89", Layers.TOC, true);
            TileInitializer(vShaleTile, _fileSource, imageDataParameters.tile, "victer.cejjf2l8", Layers.VShale, true);
        }
        else if (useMaplarge)
        {
            CanonicalTileId tID = imageDataParameters.tile.CanonicalTileId;

            GameObject temp = new GameObject();
            temp.name = "Temp_" + tID;
            temp.transform.SetParent(CoroutineParent.transform);
            MonoCoroutine mc = temp.AddComponent <MonoCoroutine>();


            string url = enlargeURL.Replace("${X}", tID.X.ToString())
                         .Replace("${Y}", tID.Y.ToString())
                         .Replace("${Z}", tID.Z.ToString());

            mc.GetGZipExternalMapData(url, InvokeCallback);

            void InvokeCallback(byte[] data)
            {
                LayerRawDataRecieved(imageDataParameters.tile, data, Layers.VShale);
            }
        }
        else
        {
            CanonicalTileId tID = imageDataParameters.tile.CanonicalTileId;

            foreach (Layers layer in (Layers[])Enum.GetValues(typeof(Layers)))
            {
                GameObject temp = new GameObject();
                temp.name = "Temp_" + layer + "_" + tID;
                temp.transform.SetParent(CoroutineParent.transform);
                MonoCoroutine mc = temp.AddComponent <MonoCoroutine>();

                string hash;

                switch (layer)
                {
                case Layers.Elevation: hash = ElevationHash;  break;

                case Layers.Porosity: hash = PorosityHash; break;

                case Layers.Thickness: hash = ThicknessHash; break;

                case Layers.TOC: hash = TOCHash; break;

                case Layers.VShale: hash = VShaleHash; break;

                default: return;
                }

                string address = @"https://energy.maplarge.com/Api/ProcessDirect?request={""action"":""tile/getmultitile"",""hash"":" + hash + "}&uParams=x:" + tID.X + ";y:" + tID.Y + ";z:" + tID.Z + ";w:1;h:1;layeronly:true;debug:false";

                mc.GetExternalMapData(address, InvokeCallback);

                void InvokeCallback(byte[] data)
                {
                    LayerRawDataRecieved(imageDataParameters.tile, data, layer);
                }
            }
        }

        void TileInitializer(RasterTile tile, IFileSource fileSource, UnityTile uTile, string mapId, Layers layer = Layers.Elevation, bool useLayer = false)
        {
            tile.Initialize(fileSource, uTile.CanonicalTileId, mapId, () =>
            {
                if (uTile.CanonicalTileId != tile.Id)
                {
                    //this means tile object is recycled and reused. Returned data doesn't belong to this tile but probably the previous one. So we're trashing it.
                    return;
                }

                if (tile.HasError)
                {
                    FetchingError(uTile, tile, new TileErrorEventArgs(uTile.CanonicalTileId, tile.GetType(), uTile, tile.Exceptions));
                }
                else
                {
                    if (useLayer)
                    {
                        LayerDataRecieved(uTile, tile, layer);
                    }
                    else
                    {
                        DataRecieved(uTile, tile);
                    }
                }
            });
        }
    }
Пример #8
0
 public abstract void FetchData(DataFetcherParameters parameters, bool useMapBoxElevation);