Récupération des coordonnées GPS et conversion en adresse chinoise via le géocodage inverse Baidu dans Unity

Dans cet article, nous explorerons comment intégrer la fonctionnalité GPS dans Unity pour obtenir des coordonnnées de latitude et longitude, puis comment utiliser l'API de géocodage inverse de Baidu pour convertri ces coordonnées en une adresse en chinois.

  1. Obtention des coordonnées GPS

Pour récupérer les données de localisation, nous créons un script C# qui gère le service GPS de l'appareil. Voici un exemple de code qui initialise et met à jour les coordonnées :

using System.Collections;
using UnityEngine;

public class CoordonneesGPS : MonoBehaviour
{
    private Vector2 _positionGeo;
    private string _statutService = "";

    void Start()
    {
        StartCoroutine(InitialiserServiceGPS());
    }

    public Vector2 ObtenirPositionActuelle()
    {
        StartCoroutine(MettreAJourServiceGPS());
        _positionGeo.x = Input.location.lastData.latitude;
        _positionGeo.y = Input.location.lastData.longitude;
        Debug.Log("Latitude: " + _positionGeo.x + ", Longitude: " + _positionGeo.y);
        return _positionGeo;
    }

    private IEnumerator InitialiserServiceGPS()
    {
        if (!Input.location.isEnabledByUser)
        {
            _statutService = "Service de localisation désactivé par l'utilisateur.";
            yield break;
        }

        Input.location.Start(10f, 10f);
        int delaiMaximal = 20;
        while (Input.location.status == LocationServiceStatus.Initializing && delaiMaximal > 0)
        {
            yield return new WaitForSeconds(1);
            delaiMaximal--;
        }

        if (delaiMaximal < 1)
        {
            _statutService = "Délai d'initialisation dépassé.";
            yield break;
        }

        if (Input.location.status == LocationServiceStatus.Failed)
        {
            _statutService = "Impossible de déterminer la position.";
            yield break;
        }

        _positionGeo.x = Input.location.lastData.latitude;
        _positionGeo.y = Input.location.lastData.longitude;
        yield return new WaitForSeconds(100);
    }

    private IEnumerator MettreAJourServiceGPS()
    {
        Input.location.Start(10f, 10f);
        yield return new WaitForSeconds(2);
        if (Input.location.status == LocationServiceStatus.Running)
        {
            _positionGeo.x = Input.location.lastData.latitude;
            _positionGeo.y = Input.location.lastData.longitude;
        }
    }

    public void ArreterServiceGPS()
    {
        Input.location.Stop();
    }
}
  1. Conversion en adresse via le géocodage inverse Baidu

Pour effectuer la conversion, nous utilisons l'API de géocodage inverse de Baidu. Il est nécessaire d'enregistrer une application de type serveur sur la plateforme Baidu Maps pour obtenir une clé API (AK). Voici un script qui envoie une requête HTTP et analyse la réponse JSON :

using Newtonsoft.Json.Linq;
using System.Collections;
using UnityEngine;

public class GeocodeurBaidu : MonoBehaviour
{
    [SerializeField] private CoordonneesGPS _coordonneesGPS;
    private string _cleAPI = "VOTRE_CLE_API_ICI";

    void Start()
    {
        Vector2 position = _coordonneesGPS.ObtenirPositionActuelle();
        EnvoyerRequeteGeocodage(position.y, position.x);
    }

    private void EnvoyerRequeteGeocodage(float longitude, float latitude)
    {
        string url = "https://api.map.baidu.com/reverse_geocoding/v3/?ak=" + _cleAPI + "&output=json&coordtype=wgs84ll&location=" + latitude + "," + longitude;
        StartCoroutine(EffectuerRequeteHTTP(url));
    }

    private IEnumerator EffectuerRequeteHTTP(string url)
    {
        WWW requete = new WWW(url);
        yield return requete;

        if (!string.IsNullOrEmpty(requete.error))
        {
            Debug.LogError("Erreur de requête: " + requete.error);
            yield break;
        }

        JObject donnees = JObject.Parse(requete.text);
        Debug.Log("Statut: " + donnees["status"]);
        JArray pointsInteret = donnees["result"]["pois"] as JArray;
        if (pointsInteret != null && pointsInteret.Count > 0)
        {
            string adresse = pointsInteret[0]["addr"].ToString();
            string nom = pointsInteret[0]["name"].ToString();
            Debug.Log("Adresse: " + adresse + ", Nom: " + nom);
        }
    }
}

public class UtilitaireJSON
{
    public static string Serialiser(object objet)
    {
        return Newtonsoft.Json.JsonConvert.SerializeObject(objet);
    }

    public static T Deserialiser<T>(string texteJSON)
    {
        return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(texteJSON);
    }
}

class ReponseGeocodage
{
    public int Statut { get; set; }
    public ResultatGeocodage Resultat { get; set; }
}

class ResultatGeocodage
{
    public Localisation Position { get; set; }
    public string AdresseFormatee { get; set; }
}

class Localisation
{
    public float Longitude { get; set; }
    public float Latitude { get; set; }
}

Pour utiliser cette fonctionnalité, assurez-vous d'avoir activé le service GPS sur l'appareil et d'avoir obtenu une clé API valide de Baidu Maps. La bibliothèque Newtonsoft.Json est requise pour l'analyse JSON ; elle peut être importée dans le projet Unity.

Étiquettes: Unity3D CSharp BaiduAPI GPS Geocoding

Publié le 29 juin à 08h16