[PHP] geocoding e geolocalizzazione

skull_beta82

Nuovo Utente
19 Feb 2018
4
0
1
42
Ciao!
devo trasformare un elenco di indirizzi in coordinate google maps per poi geolocalizzarle dove posso trovare qualche esempio?

grazie
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Questo servizio non richiede API KEY e non è stringente come google in modalità free....
https://wiki.openstreetmap.org/wiki/Nominatim

Per effettuare la chiamata:
PHP:
$indirizzo='Via pippo pippo, ROMA';
$url='https://nominatim.openstreetmap.org/search/'.$indirizzo.'?format=json';
Naturalmente dovrai effettuare delle lavorazioni per renderlo compatibile con google....

Spero sia utili
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
@marino51 Ciao....
Google blocca 2500 chiamate al giorno in free plan... Se avesse più record rimarrebbe a piedi... e solo alle 00:00 si resetta il limite.
un elenco di indirizzi ... non un'applicazione online
e ribadisco,
il servizio che hai proposto mi fornisce risultato per la città di milano ma non per il mio paese,
quindi rimane a piedi ....
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
un elenco di indirizzi ... non un'applicazione online

Sai quanti indirizzi ha????

Vabbe hai ragione tu...

@marino51 sentimi... Non so dove abiti, ma osm normalizza come google le informazioni passate...
Essendo open e non a pagamento purtroppo qualche volta non risponde come desiderato, a questo punto si utilizza google...
Poi scusa se proprio la tua strada non viene trovata.... In quel caso utilizza google... ma non generalizzare un tuo prob.....

Vabbè.... 1 problema su base italiana.... OK OK.... Trank.
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
Vabbè.... 1 problema su base italiana.... OK OK.... Trank.
non è un problema italiano, se il servizio funziona su tutto il territorio bene altrimenti devi fare due sviluppi
uno per un sistema ed il secondo per le eccezioni che rischiano di essere la regola ... avendone provato più di uno,
se vuoi provare anche tu,

HTML:
https://nominatim.openstreetmap.org/search/2%20Via%20Monastero%20Calascibetta?format=xml&polygon=1&addressdetails=1

https://nominatim.openstreetmap.org/search/14%20Via%20Larga%20Milano?format=xml&polygon=1&addressdetails=1
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Vabbe... ;)
avendone provato più di uno,
se vuoi provare anche tu,
Vabbè, ne hai provati 2-4-4000-40000, ok... Dammi una stima....

Comunque l'80/85 % del territorio è coperto da osm, se uno necessita di più dati è l'unico in modalità free...

altrimenti devi fare due sviluppi
uno per un sistema ed il secondo per le eccezioni che rischiano di essere la regola
Spiegami i 2 sviluppi perchè non capisco... Sarebbero i 2 parserini?
Se ti servono su git ci sono i miei... puoi scaricarli sono free...

Dai cmq l'eccezione di alcuni indirizzi non fanno testo...
Pensieri diversi, approcci diversi, esperienze diverse... ;)
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
questo è lo script php che uso,
PHP:
<?php
 
function lookup($string){
 
    $string = str_replace (" ", "+", urlencode($string));
    $details_url = "http://maps.googleapis.com/maps/api/geocode/json?address=".$string."&sensor=false";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $details_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response = json_decode(curl_exec($ch), true);

    // print_r($response);
    echo "<h2>curl response</h2>".show_var($response);

    // If Status Code is ZERO_RESULTS, OVER_QUERY_LIMIT, REQUEST_DENIED or INVALID_REQUEST
    if ($response['status'] != 'OK') { return null; }

    $geometry = $response['results'][0]['geometry']['location'];

    $array = array(
        'formatted_address' => $response['results'][0]['formatted_address'],
        'address_type'      => $response['results'][0]['types'][0],
        'latitude'          => $geometry['lat'],
        'longitude'         => $geometry['lng'],
    );
    return $array;
}

require_once 'myUtils/show_vars.php';

$city = '2 Via Monastero Calascibetta';
 
$array = lookup($city);

// print_r($array);
echo "<h2>received values</h2>".show_var($array);

?>
con relativo risultato
upload_2018-2-21_13-21-32.png
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
ok... Va bene...
Magari a classe....
PHP:
/**
 * Created by PhpS.
 * User: MArco. A.
 * Date: 21/02/2018
 * Time: 11:52
 */

namespace MadiGeocoding {


    use GuzzleHttp\Client;

    class Geocoding
    {


        protected $priority=['osm','google'];


        private $api='';

        private $url='';
        private $use=[];
        private $ind='';

        private $client;

        private $call_response;

        private $data=[];
        public function __construct()
        {

            $this->api=GOOGLE_API;
            $this->client=new Client();
            return $this;
        }

        public function set_ind($ind){
            $this->ind=$ind;
            return $this;
        }


        public function init(){

            if(empty($this->ind)){
                return ['data'=>[],'use'=>$this->use,'error'=>TRUE,'response'=>$this->make_error(0)];
            }else{
                foreach ($this->priority as $item){
                    if(empty($this->data)) call_user_func([$this,$item],[]);
                }
            }
            if(empty($this->data))return ['data'=>[],'use'=>$this->use,'error'=>TRUE,'response'=>$this->make_error(1)];
            else{
                return ['data'=>$this->data,'use'=>$this->use,'error'=>FALSE];
            }
        }

        private function call(){
            $this->call_response=json_decode($this->client->get($this->url)->getBody()->getContents());
        }


        private function google(){
            $this->url='https://maps.googleapis.com/maps/api/geocode/json?address='.$this->ind.'&key='.$this->api;
            $this->call();
            if($this->call_response->status=='OK'){
                if(isset($this->call_response->results[0]->formatted_address))$this->data['formatted_address']=$this->call_response->results[0]->formatted_address;
                if(isset($this->call_response->results[0]->geometry->location)){
                    $this->data['lat']=$this->call_response->results[0]->geometry->location->lat;
                    $this->data['lon']=$this->call_response->results[0]->geometry->location->lng;
                    $this->use[]='google';
                }
            }
        }

        private function osm(){
            $this->url='https://nominatim.openstreetmap.org/search/'.$this->ind.'?format=json';
            $this->call();
            if(!empty($this->call_response)){
                $this->data['lat']=$this->call_response[0]->lat;
                $this->data['lon']=$this->call_response[0]->lon;
                $this->data['formatted_address']=$this->call_response[0]->display_name;
                $this->use[]='osm';
            }
        }

        private function make_error($index){
            $error[]='Indirizzo non settato';
            $error[]='Indirizzo non trovato';
            return $error[$index];
        }

    }
}

Come si usa...
PHP:
$geo=new \MadiGeocoding\Geocoding();
print_r($geo->set_ind('INDIRIZZO DA CERCARE')->init());
@marino51 Quanto scritto è una rivisitazione di ciò che avevo in 20 minuti... ma non l'ho postata per E-PENE dell'altra volta....
Quindi credo che per scalabilità sarebbe meglio una notazione così...
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
@macus_adi
nel forum si da supporto a persone che hanno una situazione da risolvere,
non si deve dimostrare le proprie capacita per nulla e a nessuno,
si deve giungere ad una soluzione semplice e di facile applicazione agendo sul codice (quando) proposto senza sconvolgerlo

Quanto scritto è una rivisitazione di ciò che avevo in 20 minuti
bravissimo .... scusa se non l'ho guardato, non mi interessa

nel caso degli script che pubblico, moltissimi sono miei originali (uno per tutti, 730 precompilato, leggi quanti ne hanno tratto beneficio), più o meno belli (e non mi interessa il giudizio) ma tutti funzionanti
ho anche diversi script ripresi da altri spesso modificati in modo sostanziale qualche volta ripuliti dagli errori
(inutile inventare la ruota ogni volta)
ma non l'ho postata per E-PENE dell'altra volta....
se poi sei qui sempre per la tua dimensione ... mi spiace ....

con questo messaggio sappi che ignorerò tutti i tuoi interventi
at salut
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Vabbè.... Si come sopra
Vabbe hai ragione tu...

ma non l'ho postata per E-PENE dell'altra volta
Semplicemente per evitare polemiche, ma dato che con te non è così...
Quando aiuti ricordati di citare le fonti, perchè nessuno è nato imparato...
uno per tutti, 730 precompilato, leggi quanti ne hanno tratto beneficio
Non sto qui a dirti le lib. free che ho dato, magari le utilizzi anche tu... quindi...
datti una ridimensionata e non fare la prima donna....
Chiudo, la tua inutile e disperata replica...
 
Discussioni simili
Autore Titolo Forum Risposte Data
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0

Discussioni simili