public override void Dispose() { if (m_terrainTileService != null) { m_terrainTileService.Dispose(); m_terrainTileService = null; } }
public override void Dispose() { if (this.m_terrainTileService != null) { this.m_terrainTileService.Dispose(); this.m_terrainTileService = null; } }
/// <summary> /// Initializes a new instance of the <see cref= "T:WorldWind.Terrain.TerrainDownloadRequest"/> class. /// </summary> /// <param name="tile"></param> /// <param name="owner"></param> /// <param name="row"></param> /// <param name="col"></param> /// <param name="targetLevel"></param> public TerrainDownloadRequest(TerrainTile tile, TerrainTileService owner, int row, int col, int targetLevel) : base(owner) { TerrainTile = tile; download.Url = String.Format(CultureInfo.InvariantCulture, "{0}?T={1}&L={2}&X={3}&Y={4}", owner.ServerUrl, owner.DataSet, targetLevel, col, row); }
/// <summary> /// Initializes a new instance of the <see cref= "T:WorldWind.Terrain.NltTerrainAccessor"/> class. /// </summary> /// <param name="name"></param> /// <param name="west"></param> /// <param name="south"></param> /// <param name="east"></param> /// <param name="north"></param> /// <param name="terrainTileService"></param> /// <param name="higherResolutionSubsets"></param> public NltTerrainAccessor(string name, double west, double south, double east, double north, TerrainTileService terrainTileService, TerrainAccessor[] higherResolutionSubsets) { m_name = name; m_west = west; m_south = south; m_east = east; m_north = north; m_terrainTileService = terrainTileService; m_higherResolutionSubsets = higherResolutionSubsets; }
/// <summary> /// Get fast terrain elevation at specified location from already loaded data. /// Will not trigger any download or data loading from files in cache - just memory. /// </summary> /// <param name="latitude">Latitude in decimal degrees.</param> /// <param name="longitude">Longitude in decimal degrees.</param> /// <returns>Returns NaN if no tile is available in cache.</returns> public override float GetCachedElevationAt(double latitude, double longitude) { try { if (m_terrainTileService == null) { return(0); } // Use higher res subset if any if (m_higherResolutionSubsets != null) { foreach (TerrainAccessor higherResSub in m_higherResolutionSubsets) { if (!higherResSub.IsOn) { continue; } if (latitude > higherResSub.South && latitude < higherResSub.North && longitude > higherResSub.West && longitude < higherResSub.East) { return(higherResSub.GetCachedElevationAt(latitude, longitude)); } } } // Look for a tile starting from higher res level, moving down the levels TerrainTileCacheEntry ttce = null; for (int targetLevel = m_terrainTileService.NumberLevels - 1; targetLevel >= 0; targetLevel--) { // File name and path for that level double tileSize = m_terrainTileService.LevelZeroTileSizeDegrees * Math.Pow(0.5, targetLevel); int row = TerrainTileService.GetRowFromLatitude(latitude, tileSize); int col = TerrainTileService.GetColFromLongitude(longitude, tileSize); string terrainTileFilePath = string.Format(CultureInfo.InvariantCulture, @"{0}\{4}\{1:D4}\{1:D4}_{2:D4}.{3}", m_terrainTileService.TerrainTileDirectory, row, col, m_terrainTileService.FileExtension, targetLevel); // Look in cache ttce = (TerrainTileCacheEntry)m_tileCache[terrainTileFilePath]; if (ttce != null) { // Tile found, get elevation from it ttce.LastAccess = DateTime.Now; return(ttce.TerrainTile.GetElevationAt(latitude, longitude)); } } } catch (Exception) { } // No tile found - sorry. return(float.NaN); }
public TerrainTile(TerrainTileService owner) { this.m_owner = owner; }
/* private static void addWater(XPathNodeIterator iter, World parentWorld, RenderableObjectList parentRenderable) { if (iter.Count > 0) { while (iter.MoveNext()) { string name = getInnerTextFromFirstChild(iter.Current.Select("Name")); bool isBumpMapped = getInnerTextFromFirstChild(iter.Current.Select("EffectType")).Equals("Bump"); float lat = Convert.ToSingle(getInnerTextFromFirstChild(iter.Current.Select("Latitude"))); float lon = Convert.ToSingle(getInnerTextFromFirstChild(iter.Current.Select("Longitude"))); float alt = Convert.ToSingle(getInnerTextFromFirstChild(iter.Current.Select("DistanceAboveSurface"))); float scaleFactor = Convert.ToSingle(getInnerTextFromFirstChild(iter.Current.Select("ScaleFactor"))); /* float rotX = Convert.ToSingle(getInnerTextFromFirstChild(iter.Current.SelectSingleNode("Orientation") .Select("RotationX"))); float rotY = Convert.ToSingle(getInnerTextFromFirstChild(iter.Current.SelectSingleNode("Orientation") .Select("RotationY"))); float rotZ = Convert.ToSingle(getInnerTextFromFirstChild(iter.Current.SelectSingleNode("Orientation") .Select("RotationZ"))); */ /* Water waterbody = new Water(name, parentWorld,isBumpMapped,lat,lon,alt,scaleFactor); parentRenderable.Add(waterbody); } } } */ private static TerrainAccessor[] getTerrainAccessorsFromXPathNodeIterator(XPathNodeIterator iter, string cacheDirectory) { System.Collections.ArrayList terrainAccessorList = new System.Collections.ArrayList(); while(iter.MoveNext()) { string terrainAccessorName = iter.Current.GetAttribute("Name", ""); if(terrainAccessorName == null) { // TODO: Throw exception? continue; } XPathNodeIterator latLonBoxIter = iter.Current.Select("LatLonBoundingBox"); if(latLonBoxIter.Count != 1) { // TODO: Throw exception? continue; } double north = 0; double south = 0; double west = 0; double east = 0; latLonBoxIter.MoveNext(); north = ParseDouble(getInnerTextFromFirstChild(latLonBoxIter.Current.Select("North"))); south = ParseDouble(getInnerTextFromFirstChild(latLonBoxIter.Current.Select("South"))); west = ParseDouble(getInnerTextFromFirstChild(latLonBoxIter.Current.Select("West"))); east = ParseDouble(getInnerTextFromFirstChild(latLonBoxIter.Current.Select("East"))); TerrainAccessor[] higerResolutionSubsets = getTerrainAccessorsFromXPathNodeIterator( iter.Current.Select("HigherResolutionSubsets"), Path.Combine(cacheDirectory, terrainAccessorName)); XPathNodeIterator tileServiceIter = iter.Current.Select("TerrainTileService"); if(tileServiceIter.Count == 1) { string serverUrl = null; string dataSetName = null; double levelZeroTileSizeDegrees = double.NaN; uint numberLevels = 0; uint samplesPerTile = 0; string dataFormat = null; string fileExtension = null; string compressionType = null; tileServiceIter.MoveNext(); serverUrl = getInnerTextFromFirstChild(tileServiceIter.Current.Select("ServerUrl")); dataSetName = getInnerTextFromFirstChild(tileServiceIter.Current.Select("DataSetName")); levelZeroTileSizeDegrees = ParseDouble(getInnerTextFromFirstChild(tileServiceIter.Current.Select("LevelZeroTileSizeDegrees"))); numberLevels = uint.Parse(getInnerTextFromFirstChild(tileServiceIter.Current.Select("NumberLevels"))); samplesPerTile = uint.Parse(getInnerTextFromFirstChild(tileServiceIter.Current.Select("SamplesPerTile"))); dataFormat = getInnerTextFromFirstChild(tileServiceIter.Current.Select("DataFormat")); fileExtension = getInnerTextFromFirstChild(tileServiceIter.Current.Select("FileExtension")); compressionType = getInnerTextFromFirstChild(tileServiceIter.Current.Select("CompressonType")); TerrainTileService tts = new TerrainTileService( serverUrl, dataSetName, levelZeroTileSizeDegrees, (int)samplesPerTile, fileExtension, (int)numberLevels, Path.Combine(cacheDirectory, terrainAccessorName), World.Settings.TerrainTileRetryInterval, dataFormat); TerrainAccessor newTerrainAccessor = new NltTerrainAccessor( terrainAccessorName, west, south, east, north, tts, higerResolutionSubsets); terrainAccessorList.Add(newTerrainAccessor); } //TODO: Add Floating point terrain Accessor code //TODO: Add WMSAccessor code and make it work in TerrainAccessor (which it currently doesn't) } if(terrainAccessorList.Count > 0) { return (TerrainAccessor[])terrainAccessorList.ToArray(typeof(TerrainAccessor)); } else { return null; } }
internal TerrainTile(TerrainTileService owner) { m_owner = owner; }
public TerrainTile( TerrainTileService owner ) { m_owner = owner; }