Maps API 2 - Geo Coding

Autore: Lincoln Cooper
Intro:

La funzionalità di Geo Coding può essere utilizzata per controllare la validità di un indirizzo o località e/o per ritornare una lista di possibili alternative.

L'indirizzo di input è idendificato come un oggetto JSON (vedere giù per i dettagli) e il risultato restituito dal server (ad una funzione di callback) è anche un oggetto JSON.

Se viene passato un indirizzo corretto, verrà restituita una localizzazione corretta. Se viene passato un indirizzo parziale, il risultato sarà una lista di possibili indirizzi e se viene passato un indirizzo errato verrà restituito un codice di errore.

Indirizzo di input dell'oggetto JSON:

        { nazione:      PGGEO_NAT_ITALIA, // Optional, default: Italia
          provincia:    null,             // Optional
          comune:       'roma',           // Regione, Raggruppamento, Provincia, 
                                          // Comune, Frazione
          indirizzo:    'via leonina',
          civico:       23,
          onComplete:   'afterGeoCod'     // Name of callback function
        }
        
        OPPURE:
        
        { nazione:      PGGEO_NAT_ITALIA,       // Optional, default: Italia
          dove:         'via torino, milano',   // Campo unico
          onComplete:   'afterGeoCod'           // Name of callback function
        }
        
I campi nazione, regione, provincia e cap non devono essere passati. Una volta che il server ha terminato la geo-codifica, il risultato restituito sarà passato come primo parametro della funzione di 'callback'.
Se è valorizzato il campo "dove" i campi "provincia", "comune", "indirizzo" e "civico" non vengono considerati.


Possibili valori del campo nazione:

  • PGGEO_NAT_ITALIA (0)
  • PGGEO_NAT_FRANCIA (1)
  • PGGEO_NAT_GERMANIA (2)
  • PGGEO_NAT_TURCHIA (3)


Indirizzo di output dell'oggetto JSON:
        { ret:          0,
          comuneList: { i:        '1',
                        lon:      '9.19378',            // Only if single comune
                        lat:      '45.46347',           // Only if single comune
                        zoom:     '0.6',                // Only if single comune
                        zcent:    '0.6',                // Only if single comune
                        stato:    'Italia',
                        reg:      'Lombardia',
                        prov:     'MI',
                        dsProv:   'Milano',
                        com:      'Milano',
                        codCom:   '51557'               // Only if comune list
                        fraz:     'Pietro',
                        frazDesc: 'Pietro frazione di Milano (MI)',
                        codFraz:  '123',                // Only if comune list
                        dug:      'Via della',
                        ndTopo:   'Moscova',
                        topo:     'Via della Moscova',
                        civico:   '10',                 // Only if correct civico
                        cap:      '20121',              // Only if correct civico
                        zoneLoc:  1                     // La zona (solo Milano)
                      },
          addressList:{ i: 1, 
                        lat: 45.47608, 
                        lon: 9.18394, 
                        dug: "Corso", 
                        ndTopo: "Giuseppe Garibaldi", 
                        topo: "Corso Giuseppe Garibaldi" 
                      },
          raggrList:  { i: 1, 
                        stato: "Italia", 
                        reg: "Lombardia", 
                        codReg: 7, 
                        dsProv: "Milano", 
                        prov: "MI", 
                        codProv: 37, 
                        com: "Agrate Brianza", 
                        codCom: 10750
                      }
        }
        


Codici di ritorno:

  • 0: OK - Trovato Comune o Indirizzo/Comune univoco
  • 2: Trovati diversi indirizzi (ogg "addressList" popolato)
  • 3: Nessun indirizzo trovato (input incorretto)
  • 4: Nessun indirizzo trovato (ritornato il centro città)
  • 5: OK ma senza numero civico
  • 8: OK - Regione
  • 9: OK - Provincia
  • 10: Trovato comune non univoco (ogg "comuneList" popolato)
  • 40: Trovato raggruppamento (ogg "comuneList" popolato con il raggruppamento, ogg "raggrList" popolato con le ambiguitą al interno il raggruppamento)


Possibili valori del campo "t" (Tipo) - N.B. Usare i costanti "PGGEO_CD_...":

  • PGGEO_CD_STATO: Stato (ad es. "Italia")
  • PGGEO_CD_REGIONE: Regione (ad es. "Lombardia")
  • PGGEO_CD_PROVINCIA: Provincia (ad es. "mi")
  • PGGEO_CD_RAGGRUPPAMENTO: Raggruppamento (ad es. "Brianza")
  • PGGEO_CD_COMUNE: Comune (ad es. "Milano")
  • PGGEO_CD_FRAZIONE: Frazione (ad es. "Nava")
  • PGGEO_CD_STRADA: Strada (ad es. "Milano v durini")
  • PGGEO_CD_CIVICO: Civico (ad es. "Milano v durini, 24")
  • PGGEO_CD_POI: Point of Interest (poi)




Geo Code:
Questo esempio mostra i differenti risultati in base ai valori di input.

<html>
<head>
<title>PG Maps API - Geo Code Complete</title>
<script src="http://api.visual.paginegialle.it/tcolnew/mapsapi/pgMap2.js?id=abc" 
type="text/javascript"></script>

<script type="text/javascript">
function geoCode(prov, com, ind, nc) {
  var g = new PGGeoCod({provincia:    prov || null,
                        comune:       com,
                        indirizzo:    ind || null,
                        civico:       nc || null,
                        onComplete:   'afterGeoCod'});
}
function geoCodeU(dove) {
  var g = new PGGeoCod({dove:dove,
                        onComplete:   'afterGeoCod'});
}
function afterGeoCod(pgAddress) {
  var i, s = 'ret: ' + pgAddress.ret + '<br/><br/>';
  
  // 0:OK, 4:Nessun indirizzo trovato (ritornato il centro citta), 
  // 5:OK ma senza numero civico, 8:Regione, 9:Provincia
  if (pgAddress.ret == '0' || pgAddress.ret == '4' || pgAddress.ret == '5' || 
  pgAddress.ret == '8' || pgAddress.ret == '9') {
    s += getDesc(pgAddress.comuneList[0]);
  }
  //Ambiguita indirizzo
  else if (pgAddress.ret == '2') {
    for (i=0; i<pgAddress.addressList.length; i++) {
      s += pgAddress.addressList[i].toponimo + '<br/>';
    }
  }
  // Errore
  else if (pgAddress.ret == '3') {
    s += 'Error';
  }
  // Ambiguita
  else if (pgAddress.ret == '10') {
    $.each(pgAddress.comuneList, function(i, v) {
      s += getDesc(v) + '<br/>';
    });
  }
  // Raggruppamento
  else if (pgAddress.ret == '40') {
    // Raggruppamento
    s += getDesc(pgAddress.comuneList[0]) + ':<br/><br/>';
    
    // Elementi al interno al raggruppamento
    $.each(pgAddress.raggrList, function(i, v) {
      s += getDesc(v) + '<br/>';
    });
  }
  
  $('#msg').html(s);
}

function getDesc(v) {
  var s = '';
  
  if (v.t === PGGEO_CD_STATO) {
    s = 'Stato: ' + v.stato;
  }
  else if (v.t === PGGEO_CD_REGIONE) {
    s = 'Regione: ' + v.reg;
  }
  else if (v.t === PGGEO_CD_PROVINCIA) {
    s = 'Provincia: ' + '(' + v.prov + '), ' + v.reg;
  }
  else if (v.t === PGGEO_CD_RAGGRUPPAMENTO) {
    s = 'Raggruppamento: ' + v.raggr;
  }
  else if (v.t === PGGEO_CD_COMUNE) {
    s = 'Comune: ' + v.com + '(' + v.prov + '), ' + v.reg;
  }
  else if (v.t === PGGEO_CD_FRAZIONE) {
    s = 'Frazione: ' + v.fraz + ', ' + v.com + '(' + v.prov + '), ' + v.reg;
  }
  else if (v.t === PGGEO_CD_STRADA) {
    s = 'Strada: ' + v.topo + ', ' + v.com + '(' + v.prov + '), ' + v.reg;
  }
  else if (v.t === PGGEO_CD_CIVICO) {
    s = 'Civico: ' + v.civico + ', ' + v.topo + ', ' + v.com + '(' + v.prov + '), ' + v.reg;
  }
  else if (v.t === PGGEO_CD_POI) {
    s = 'Poi: ' + v.topo + ', ' + v.com + '(' + v.prov + '), ' + v.reg;
  }
  return s;
}
</script>
</head>

<body>

  <div style="float:left;">
    <ol>
      <li><a href="javascript:geoCode('', 'italia')">
      Stato (italia)</a></li>
      <li><a href="javascript:geoCode('', 'lombardia')">
      Regione (lombardia)</a></li>
      <li><a href="javascript:geoCode('', 'mi')">
      Provincia (mi)</a></li>
      <li><a href="javascript:geoCode('', 'milano')">
      Comune (milano)</a></li>
      <li><a href="javascript:geoCode('', 'milano', 'via torino')">
      Comune Indirizzo univoco (milano, via torino)</a></li>
      <li><a href="javascript:geoCode('', 'milano', 'via moscova', '10')">
      Comune, Indirizzo, Civico (milano, via moscova 10)</a></li>
      <li><a href="javascript:geoCode('', 'mila')">
      Comune ambiguità (mila)</a></li>
      <li><a href="javascript:geoCode('', 'milano', 'garibaldi')">
      
      Comune, indirizzo ambiguità (milano garibaldi)</a></li>
      <li><a href="javascript:geoCode('', 'nova')">Comune/Frazione ambiguità 
      (nova)</a></li>
      <li><a href="javascript:geoCode('', 'brianza')">
      Raggruppamento (brianza)</a></li>
      <li><a href="javascript:geoCode('', 'brianz')">
      Raggruppamento ambiguità (brianz)</a></li>
      <li><a href="javascript:geoCode('', 'qwerty')">
      Comune non esistente (qwerty)</a></li>
      <li><a href="javascript:geoCodeU('via torino, milano')">
      Campo Unico (via torino, milano)</a></li>
    </ol>
  </div>
  <div id="msg" style="float:left;margin-left:150px;"></div>

</body>
</html>