IBM Cloud Docs
Esplora le funzionalità di ricerca geospaziale di Databases for MongoDB

Esplora le funzionalità di ricerca geospaziale di Databases for MongoDB

MongoDB's consentono di eseguire in modo efficiente le query in cui la posizione geografica è un elemento fondamentale. Si pensi, ad esempio, a quanta parte della vita quotidiana riguarda la propria posizione o quella degli altri. Dove si trova il taxi Uber più vicino? Dov'è il ristorante cinese più vicino? Quale dei miei amici è più vicino in questo momento? Sono tutte domande a cui app come Uber, Google Search e Whatsapp rispondono costantemente per i loro clienti.

Questo tutorial guida l'utente attraverso i passi da compiere per importare i dati sui taxi di Londra basati sulla localizzazione in un database Databases for MongoDB e quindi interrogare tali dati in vari modi.

Databases for MongoDB è un servizio a pagamento, quindi seguire questa guida comporterà un costo.

Prima di iniziare

Prima di iniziare, assicuratevi di disporre di quanto segue:

Ottenere una chiave API per distribuire l'infrastruttura sul proprio account

Seguire questi passi per creare una IBM Cloud chiave API che consenta a Terraform di eseguire il provisioning dell'infrastruttura nel proprio account. Puoi creare fino a 20 chiavi API.

Per motivi di sicurezza, la chiave API è disponibile per essere copiata o scaricata solo durante la fase di creazione. Se la chiave API viene persa, dovrai crearne una nuova.

Clonare il progetto

Ottenere una copia locale del codice necessario clonando il repository pubblico di Github. Utilizza il seguente comando:

git clone https://github.com/IBM/ibm-mongodb-geospatial-queries

Distribuire un'istanza di Databases for MongoDB al proprio account

In questo passo si distribuisce un'istanza di Databases for MongoDB e si ottengono le informazioni chiave per connettersi ad essa.

  1. Navigare nella cartella Terraform del progetto clonato.

    cd ibm-mongodb-geospatial-queries/terraform
    
  2. In questa cartella, creare un documento denominato terraform.tfvars con i seguenti campi:

    ibmcloud_api_key = "<your_api_key_from_step_1>"
    region = "<the IBM region where you will deploy the MongoDB database>"
    admin_password = "<the password of your mongodb admin user>"
    

    Il documento terraform.tfvars contiene variabili che si desidera mantenere segrete.

  3. Installare l'infrastruttura con il seguente comando:

    terraform init
    terraform apply --auto-approve
    

Caricare i dati dei taxi

Il passaggio precedente produce due elementi necessari per accedere al database:

  • Il certificato di distribuzione (cert). Questo certificato è necessario per connettersi in modo sicuro al database. Decodificare il certificato, salvarlo in un file nella cartella principale del progetto ed esportare il nome del file come variabile d'ambiente. È possibile eseguire questa operazione sul terminale in questo modo:

    cd ..
    echo "<the_cert_from_the_output>" | base64 --decode > ca.cert
    export MONGO_CA_FILE="./ca.cert"
    
  • L'opzione url per accedere alla distribuzione. Sostituire il parametro $PASSWORD in quell'URL con la password di amministrazione del file terraform.tfvars. Quindi, esportatela come variabile d'ambiente dal terminale in questo modo:

    export MONGO_URL="<the_url_from_the_output>"
    

Siete pronti a caricare i dati. Lo script import.js utilizza un'utilità Node chiamata datamaker per generare una grande quantità di dati casuali nel formato specificato nel file taxi.json e li carica in MongoDB. Il formato è un formato standard GeoJSON, necessario affinché MongDB le query geospaziali funzionino.

Lo script crea anche un indice geo sul campo geometry dei dati, che è quello che contiene le coordinate di ciascun veicolo. In questo caso, si creerà un indice 2dsphere.

Per eseguire lo script, utilizzare il seguente comando:

npm install --save  #install all required node packages, including datamaker and mongodb
node import.js

Interrogare i dati

Esistono due script che possono essere utilizzati per interrogare i dati:

  1. find_by_point.js- Con questo script si fornisce una coppia lat/long e viene restituito il taxi più vicino a quella posizione, come nell'esempio seguente:

    node find_by_point.js --longitude="-0.13"  --latitude=50.3
    

    Si ottiene una risposta come questa:

    {
      _id: new ObjectId('66bc7dd80fbd69a0f41c029b'),
      type: 'Feature',
      geometry: { type: 'Point', coordinates: [ -0.1002, 51.3611 ] },
      properties: {
        driver_name: 'Elisabeth Acuna',
        taxi_id: 'ECJK0AG87JB00991',
        vehicle_type: 'van',
        phone_number: '+352-1224-498-598',
        timestamp: '2024-08-14T09:50:16.884Z'
      }
    }
    

    È possibile aggiungere facoltativamente un parametro num_taxis e un parametro vehicle_type per ottenere un maggior numero di risultati, oppure filtrare in base a un determinato tipo di auto (ad esempio, berlina, furgone, sevenseater, minibus). Vedi il seguente esempio.

    node find_by_point.js --longitude="-0.13"  --latitude=50.3 --num_taxis=10 --vehicle_type=minibus
    

    Lo script utilizza il $near operatore delle funzionalità geospaziali del MongoDB.

  2. find_by_bounding_box.js- Con questo script si fornisce un riquadro di delimitazione e vengono restituiti fino a cinque taxi al suo interno, come nell'esempio seguente:

    node find_by_bounding_box.js --topleftlat=51.5019647 --topleftlong=-0.1494702 --bottomrightlong=-0.1249548 --bottomrightlat=51.4881758
    

    È possibile aggiungere anche i parametri num_taxis e vehicle_type.

    Lo script utilizza il $geoWithin operatore delle funzionalità geospaziali del MongoDB.

Conclusioni e passi successivi

In questa esercitazione è stata utilizzata un'istanza Databases for MongoDB per memorizzare dati in cui la posizione è un fattore importante. Questi dati sono stati memorizzati come oggetto GeoJSON, che consente di indicizzare i dati negli indici geospaziali di MongoDB. È possibile utilizzare questi indici per cercare tra i dati i risultati più vicini a un determinato punto o all'interno di confini geografici.

È possibile esplorare altre funzioni di ricerca geospaziale nella documentazione di MongoDB.

Abbattere l'infrastruttura

Il vostro Databases for MongoDB comporta dei costi. Al termine di questa esercitazione, è possibile rimuovere tutta l'infrastruttura andando nella cartella terraform del progetto e usando il seguente comando:

terraform destroy