Caricare markers da un database con MySQL e PHP (prima parte)

Una possibilità davvero interessante è quella di poter visualizzare su una Google Map dei markers le cui coordinate ed altri elementi siano caricati da un database esterno.
Questo ci consente di poter utilizzare insiemi molto grandi di coordinate lasciando sempre inalterato il codice javascript di richiamo della mappa.
In questo articolo non concluderemo il nostro lavoro, ci limiteremo a capire come costruire il nostro database, popolarlo e creare scripts Php per l’interrogazione dei dati e la realizzazione di un output XML. Ci ritroveremo dunque nella stessa situazione del precedente post: un file XML da dare “in pasto” al codice javascript affinchè i markers vengano visualizzati sulla mappa.

Questo post e il successivo fanno ampio riferimento al materiale, opportunamente semplificato e integrato nella parte divulgativa, contenuto nel bellissimo articolo (in inglese) che trovate su Google Code.

Definiamo il progetto da realizzare: una sorta di “curriculum geografico”, cioè una Google Map dove vengono visualizzati tutti i luoghi dove ho studiato o lavorato, le cui informazioni sono contenute in un database.

Essendo un progetto didattico, i dati in realtà sono molto pochi. Le potenzialità invece sono infinite, poichè potremmo inserire nel database grandi quantità di dati realizzate da terze parti e, con le opportune conoscenze tecniche, filtrarli nella maniera che più ci interessa.

Di cosa abbiamo bisogno:
1) Uno spazio web con supporto MySQL e PHP
2) Alcuni cenni su come si costruisce un database relazionale
3) Piccole conoscenze di PHP e Javascript

PUNTO 1
Ci sono due possibilità: la prima è quella di registrarsi su Internet ad un servizio di spazio web gratuito con le caratteristiche cui sopra. Vi ho già citato ilbello.com hosting, ma i servizi di questo tipo sono innumerevoli. Una selezione ai altri servizi gratuiti e ad free potete trovarla in questo post.

La seconda possibilità è lavorare in locale, cioè utilizzare il proprio PC come fosse un server web. A questo scopo potete utilizzare pacchetti software come XAMPP o EasyPHP. Per la corretta installazione potete far riferimento ai link in calce all’articolo.

PUNTO 2
Ci affideremo a un database relazionale, strutturato in tabelle (a noi ne serve solo una). Il nostro spazio web, sia esso reale o virtuale, ci consentirà di creare e popolare (inserire dati) un database attraverso il linguaggio di amministrazione PhpMyAdmin.

Per quanto riguarda il servizio ilbello.com si accederà all’interfaccia PhpMyAdmin all’indirizzo http://sql.ilbello.com/, inserendo username e password fornitici al momento della registrazione. Per gli altri servizi, cambierà ovviamente l’indirizzo di accesso ma le modalità saranno identiche.

Per creare e popolare la tabella del database si posono utilizzare diversi metodi:

1) Inserendo ciascun elemento attraverso l’interfaccia di PhpMyAdmin
2) Importando in PhpMyAdmin opportuni files sql come ad esempio questo:

CREATE TABLE `markers`(
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`denom` VARCHAR( 60 ) NOT NULL ,
`indirizzo` VARCHAR( 60 ) NOT NULL ,
`lat` FLOAT( 10, 6 ) NOT NULL ,
`long` FLOAT( 10, 6 ) NOT NULL,
`tipomarker` VARCHAR( 30 ) NOT NULL ,
) ENGINE = MYISAM ;

Cosa dico attraverso questo set di istruzioni?


crea una tabella con 6 campi: il campo id è un indice che si autoincremente; il secondo campo, denom, ha al massimo 60 caratteri; lo stesso dicasi per il campo indirizzo; lat e long sono campi numerici, al massimo di 10 cifre di cui 6 decimali; tipomarker ha al massimo 30 caratteri; MYISAM è il motore di indicizzazione del database.

3) Importando opportuni files in formato CSV (ottenuti da terze parti o dal nostro foglio elettronico).

PUNTO 3
Attingiamo adesso ad alcuni elementi di PHP per accedere ai dati del database ed elaborarli in modo da formare un documento XML. Per motivi di sicurezza si sceglie di creare due script distinti, uno con le credenziali di autenticazione e l’altro che riceve le credenziali, accede al database e forma il documento XML. Ecco i listati dei due file, credenziali.php e creaxml.php. Notate che cliccando su quest’ultimo link non viene visualizzato lo script bensì il suo risultato, cioè il file XML con i dati che visualizzeremo sulla mappa.

<?
//Ovviamente $username, $password e $database conterranno i valori comunicati dal
vostro fornitore del servizio di hosting o scelti a piacere se utilizzate un server
web in locale
$host=”localhost”;
$username=”vostrousername”;
$password=”vostrapassword”;
$database=”vostrodatabase”;
?>
<?php

// richiede i dati di accesso contenuti in credenziali.php
require(“credenziali.php”);

//Sostituisce alcuni caratteri speciali con il relativo codice entita’
function parseToXML($htmlStr)
{
$xmlStr=str_replace(‘<','<',$htmlStr);
$xmlStr=str_replace(‘>’,’>’,$xmlStr);
$xmlStr=str_replace(‘”‘,’"’,$xmlStr);
$xmlStr=str_replace(“‘”,’'’,$xmlStr);
$xmlStr=str_replace(“&”,’&’,$xmlStr);
return $xmlStr;
}

// Si connette al database
$connection=mysql_connect (localhost, $username, $password);
if (!$connection) {
die(‘Non connesso : ‘ . mysql_error());
}

$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die (‘database non selezionato : ‘ . mysql_error());
}

// Seleziona tutte le righe della tabella con i markers
$query = “SELECT * FROM markers WHERE 1”;
$result = mysql_query($query);
if (!$result) {
die(‘Query invalida: ‘ . mysql_error());
}

header(“Content-type: text/xml”);

// Genera il nodo principale del file XML
echo ‘<markers>’;

// Ciclo che crea il resto del documento XML sulla base dei dati della tabella
while ($row = @mysql_fetch_assoc($result)){
// ADD TO XML DOCUMENT NODE
echo ‘<marker ‘;
echo ‘denom=”‘ . parseToXML($row[‘denom’]) . ‘” ‘;
echo ‘indirizzo=”‘ . parseToXML($row[‘indirizzo’]) . ‘” ‘;
echo ‘lat=”‘ . $row[‘lat’] . ‘” ‘;
echo ‘long=”‘ . $row[‘long’] . ‘” ‘;
echo ‘tipomarker=”‘ . $row[‘tipomarker’] . ‘” ‘;
echo ‘/>’;
}

// Genera il tag di chiusura del nodo principale
echo ‘</markers>’;

?>

Per adesso abbiamo finito, nel prossimo articolo vedremo come integrare il tutto all’interno nella Google Map, utilizzando istruzioni di cui ormai conosciamo il significato.

Linkografia per chi desidera installare un server in locale

Per installare XAMPP
@ Corso Joomla su Second Life (consultare le slide dalla 6 alla 22)
@ Slideshare (consultare le slide dalla 6 alla 22)
@ XAMPP step by step
@ Installare XAMPP su Windows

Per installare Easy PHP
@ Guida PHP su Windows
@ Installare e configurare Php e MySQL

Annunci

15 Responses to “Caricare markers da un database con MySQL e PHP (prima parte)”


  1. 1 localMapping 30 gennaio 2009 alle 4:07 pm

    complimenti per il lavoro e per gli interessanti argomenti trattati

  2. 2 Cirdan il Timoniere 30 gennaio 2009 alle 5:01 pm

    Il tuo commento mi ha fatto molto piacere, sia per i complimenti sia per la possibilità che mi hai dato di sfogliare il tuo sito. Grazie!

  3. 3 Anonymous 5 febbraio 2009 alle 9:36 pm

    ciao non mi è chiaro il punto 2.3. importo il file csv con le coordinate (log/lat) delle città interessate.. ma se devo marcare una cinquantina di città, come faccio a crearmi il file csv in maniera automatica o quasi?grazie

  4. 4 Cirdan il Timoniere 8 febbraio 2009 alle 10:25 pm

    Puoi dare una occhiata alla sezione della API Reference di Google Maps dedicata al Geocoding:http://code.google.com/intl/it/apis/maps/documentation/geocoding/La richiesta è in formato REST e la risposta può avvenire in formato JSON, KML, XML e anche CSV.Spero di esserti stato utile

  5. 5 Anonymous 15 maggio 2009 alle 3:23 pm

    sto leggendo e studiando tutto questo tutorial ed è davvero ben fatto e ben spiegato…tantissimi complimenti devi essere davvero in gamba.

  6. 6 Giancarlo 15 settembre 2009 alle 12:37 pm

    Complimenti, ottima guida, ma……io ricevo questo errore:errore interpretazione XML:non well formedlinea numero 1 colonna 18markers marker —————^

  7. 7 Giancarlo 15 settembre 2009 alle 12:38 pm

    l'errore lo dà prima del (br \) che nel commento non compare!

  8. 8 gianko 15 settembre 2009 alle 3:37 pm

    risolto! avevo commentato la funzione per convertire i caratteri!

  9. 9 Anonymous 5 ottobre 2009 alle 12:58 pm

    io invece vorrei capire come gestire l'overlap,ad esempio, nel mio db ho una serie di coordinate, molte di queste coincidono tra di essi, ottengo così una sovrapposizione dei marker.Idee su come risolvere?

  10. 10 Anonymous 2 novembre 2009 alle 12:03 am

    domanda forse stupida eda profano. Ma in che posizione vanno salvati i tue file php all'interno delle cartelle del sito? grazie

  11. 11 Cirdan il Timoniere 2 novembre 2009 alle 7:31 pm

    Come vedi dagli esempi i file php sono tutti nella root del mio spazio web. E' naturalmente possibile mettere i file in altre posizioni modificando opportunamente i listati

  12. 12 ddl 17 novembre 2009 alle 1:46 pm

    ciao trovo questo blog utile a titolo informativoerano mesi che cercavo un modo per integrare uno script lato amministratore di questo tipo:-ho degli iscritti ad un circolo con un'anagrafica caricabile via web o via csv-voglio vederli distribuiti su mapsmi pare che tu risponda a questo secondo punto ma il primo ? come posso fare una maschera di inserimento dati accessibile solo all'amministratore del sito?grazie ciao

  13. 13 lorenzo 13 aprile 2010 alle 11:52 am

    salve, ho un problema di connessioneil mio dbase è su server remotoal puntoPOI LO RITROVO QUI// Si connette al database$connection=mysql_connect (localhost (DEVO SOSTITUIRE ANCHE QUI?), $username, $password);if (!$connection) {die('Non connesso : ' . mysql_error());}HO PROVATO, NON GENERA l'XML in nessuno dei due casi, risultato: pagina biancala connessione al db è corretta e verificataogni aiuto è benedetto, ho una scadenza a brevissimo…grazie

  14. 14 lorenzo 13 aprile 2010 alle 11:54 am

    scusa non ha postato il codice dopoAL PUNTO$host="localhost"; QUESTO LO HAI INSERITO TE, NON C'E' NEL FILE ORIGINALE$username="vostrousername";$password="vostrapassword";$database="vostrodatabase";

  15. 15 preppy 12 dicembre 2013 alle 11:22 pm

    ciao! scusa.. sto’ provando il tuo php ma ho un sacco di errori di parse…. potrei scaricare il tuo sorgente da qualche parte?????????
    Grazie!
    preppy


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...




Creative Commons License
Questo/a opera è pubblicato sotto una Licenza Creative Commons.

Addthis

AddThis Social Bookmark Button

Flickr Photos

Moods of blue

High heels

Altre foto

%d blogger hanno fatto clic su Mi Piace per questo: