//----------------------------------------------------------------------- // // Copyright (c) 2016 Mapbox. All rights reserved. // //----------------------------------------------------------------------- namespace Mapbox.Examples { using Mapbox.Unity; using System; using UnityEngine; using UnityEngine.UI; using Mapbox.Geocoding; using Mapbox.Utils; using Mapbox.Unity.Utilities; /// /// Peforms a reverse geocoder request (search by latitude, longitude) whenever the InputField on *this* /// gameObject is finished with an edit. /// Expects input in the form of "latitude, longitude" /// [RequireComponent(typeof(InputField))] public class ReverseGeocodeUserInput : MonoBehaviour { InputField _inputField; ReverseGeocodeResource _resource; Geocoder _geocoder; Vector2d _coordinate; bool _hasResponse; public bool HasResponse { get { return _hasResponse; } } public ReverseGeocodeResponse Response { get; private set;} public event EventHandler OnGeocoderResponse; void Awake() { _inputField = GetComponent(); _inputField.onEndEdit.AddListener(HandleUserInput); _resource = new ReverseGeocodeResource(_coordinate); } void Start() { _geocoder = MapboxAccess.Instance.Geocoder; } /// /// An edit was made to the InputField. /// Unity will send the string from _inputField. /// Make geocoder query. /// /// Search string. void HandleUserInput(string searchString) { _hasResponse = false; if (!string.IsNullOrEmpty(searchString)) { _coordinate = Conversions.StringToLatLon(searchString); _resource.Query = _coordinate; _geocoder.Geocode(_resource, HandleGeocoderResponse); } } /// /// Handles the geocoder response by updating coordinates and notifying observers. /// /// Res. void HandleGeocoderResponse(ReverseGeocodeResponse res) { _hasResponse = true; Response = res; if (OnGeocoderResponse != null) { OnGeocoderResponse(this, EventArgs.Empty); } } } }