//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); } }); }
//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); } }); }
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); } }); }
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); } }); }
//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); } }); }
public abstract void FetchData(DataFetcherParameters parameters);
//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); } } }); } }
public abstract void FetchData(DataFetcherParameters parameters, bool useMapBoxElevation);