using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class GetElevationFromGeoServerTMS : MonoBehaviour { public static string url = "[[geoserver link]]/{0}/{1}/{2}.png"; private OnlineMapsTileSetControl control; List tempFiles; [SerializeField] private void Start() { // Get Tileset control. control = OnlineMapsControlBase.instance as OnlineMapsTileSetControl; if (control == null) { Debug.LogError("You must use the Tileset control."); return; } OnlineMaps.instance.OnStartDownloadTile += OnStartDownloadTile; } private void OnStartDownloadTile(OnlineMapsTile tile) { TileRequest request = new TileRequest(tile); OnlineMaps.instance.StartDownloadTile(tile); StartCoroutine(SetElevationFromRequest(request)); } IEnumerator SetElevationFromRequest(TileRequest request) { if (string.IsNullOrEmpty(request.www.error) && request.tile.status != OnlineMapsTileStatus.disposed) { while (request.www == null) yield return null; try { while (!request.www.isDone) { } } catch (Exception) { } byte[] bytes = request.www.bytes; control.SetElevationData(GetElevation(bytes)); } request.Dispose(); } short[,] GetElevation(byte[] bytes) { int bRef = 0; short[,] elevation = new short[32, 32]; for (int width = 0; width < 16; width++) { for (int height = 0; height < 16; height++) { short val = (short)(bytes[bRef]); elevation[width, height] = val; bRef++; } } return elevation; } internal class TileRequest { public OnlineMapsWWW www; public OnlineMapsTile tile; public TileRequest(OnlineMapsTile tile) { url = string.Format(url, tile.zoom, tile.y, tile.x); www = new OnlineMapsWWW(url); this.tile = tile; } public void Dispose() { www.Dispose(); www = null; tile = null; } } }