private void OnElevationRequestComplete(string response) { const int elevationDataResolution = 32; try { bool isFirstResponse = false; if (elevationData == null) { elevationData = new short[elevationDataResolution, elevationDataResolution]; isFirstResponse = true; } Array ed = elevationData; if (OnlineMapsBingMapsElevation.ParseElevationArray(response, OnlineMapsBingMapsElevation.Output.json, ref ed)) { elevationX1 = elevationRequestX1; elevationY1 = elevationRequestY1; elevationW = elevationRequestW; elevationH = elevationRequestH; elevationDataWidth = elevationDataResolution; elevationDataHeight = elevationDataResolution; UpdateMinMax(); if (OnElevationUpdated != null) { OnElevationUpdated(); } control.UpdateControl(); } else { if (isFirstResponse) { elevationX1 = elevationRequestX1; elevationY1 = elevationRequestY1; elevationW = elevationRequestW; elevationH = elevationRequestH; elevationDataWidth = elevationDataResolution; elevationDataHeight = elevationDataResolution; } Debug.LogWarning(response); if (OnElevationFails != null) { OnElevationFails(response); } } elevationRequest = null; } catch (Exception exception) { Debug.Log(exception.Message); if (OnElevationFails != null) { OnElevationFails(exception.Message); } } map.Redraw(); }
/// <summary> /// On request Complete /// </summary> /// <param name="response">Response</param> private void OnComplete(string response) { // Log response Debug.Log(response); // You have two options: // 1. Load the result object. It's slower, but you have the entire object. // 2. Load the elevation data into array. It's fast. Supports one-dimensional and two-dimensional arrays. // 1. Load result object OnlineMapsBingMapsElevationResult result = OnlineMapsBingMapsElevation.GetResult(response, OnlineMapsBingMapsElevation.Output.json); // Log elevations length if (result != null) { Debug.Log(result.resourceSets[0].resources[0].elevations.Length); } else { Debug.Log("Result is null"); } // 2. Load the elevation data into two-dimensional array. short[,] elevations = new short[32, 32]; Array ea = elevations; OnlineMapsBingMapsElevation.ParseElevationArray(response, OnlineMapsBingMapsElevation.Output.json, ref ea); // Log first elevation value Debug.Log(elevations[0, 0]); }
private void OnTileDownloaded(Tile tile, OnlineMapsBingMapsElevation request) { if (request.status == OnlineMapsQueryStatus.error) { Debug.Log("Download error"); return; } if (OnDownloadSuccess != null) { OnDownloadSuccess(tile, request.GetWWW()); } short[,] elevations = new short[32, 32]; Array ed = elevations; if (OnlineMapsBingMapsElevation.ParseElevationArray(request.response, OnlineMapsBingMapsElevation.Output.json, ref ed)) { for (int y = 0; y < 16; y++) { for (int x = 0; x < 32; x++) { short t = elevations[x, y]; elevations[x, y] = elevations[x, 31 - y]; elevations[x, 31 - y] = t; } } SetElevationToCache(tile, elevations); SetElevationData(tile, elevations); } }
private void Start() { // Get the coordinates of the map corners double tlx, tly, brx, bry; OnlineMaps.instance.GetCorners(out tlx, out tly, out brx, out bry); // Ceate a new request and subscribe to OnComplete event OnlineMapsBingMapsElevation.GetElevationByBounds(key, tlx, tly, brx, bry, 32, 32).OnComplete += OnComplete; }
public override void CancelCurrentElevationRequest() { waitSetElevationData = false; if (elevationRequest != null) { elevationRequest.Destroy(); elevationRequest = null; } }
public override void StartDownloadElevationTile(Tile tile) { if (TryLoadFromCache(tile)) { return; } double lx, ty, rx, by; map.projection.TileToCoordinates(tile.x, tile.y, tile.zoom, out lx, out ty); map.projection.TileToCoordinates(tile.x + 1, tile.y + 1, tile.zoom, out rx, out @by); OnlineMapsBingMapsElevation request = OnlineMapsBingMapsElevation.GetElevationByBounds(OnlineMapsKeyManager.BingMaps(), lx, ty, rx, @by, tileWidth, tileHeight); request.OnFinish += r => OnTileDownloaded(tile, request); }
public void StartDownloadElevation(double sx, double sy, double ex, double ey) { elevationRequest = OnlineMapsBingMapsElevation.GetElevationByBounds(bingAPI, sx, sy, ex, ey, 32, 32); elevationRequest.OnComplete += OnElevationRequestComplete; }