//-----------------------------------------------------------------------
//
// 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);
}
}
}
}