6

ho

una serie di indirizzi di utentiPrendi il lat, base lng all'indirizzo

array:5 [▼ 
    0 => array:2 [▼ 
    "name" => " Admin" 
    "address" => "111 Park AveFloor 4 New York, NY" 
    ] 
    1 => array:2 [▼ 
    "name" => "User A" 
    "address" => "12 Main Street Cambridge, MA" 
    ] 
    2 => array:2 [▼ 
    "name" => "Apple HQ" 
    "address" => "1 Infinite Loop Cupertino, California" 
    ] 
    3 => array:2 [▼ 
    "name" => "Google MA" 
    "address" => "355 Main St Cambridge, MA" 
    ] 
    4 => array:2 [▼ 
    "name" => "site HQ" 
    "address" => "300 Concord Road Billerica, MA " 
    ] 
] 

Il mio obiettivo

è per afferrare la lat e lng di ogni indirizzo, e costruisci qualcosa del genere

[ 
    ["Admin", 18.3114513, -66.9219513, 0], 
    ["User A", 25.3253982, 44.5503772, 1], 
    ["Apple HQ", 33.0241101, 39.5865834, 2], 
    ["Google MA", 43.9315743, 20.2366877, 3], 
    ["site HQ", 32.683063, 35.27481, 4] 
] 

quindi posso tracciarli in Google Map.


ho provato:

fare un ricciolo di

https://maps.googleapis.com/maps/api/geocode/json?address='.$address.'&key=*** 

$data = shell_exec('curl '.$url);


ho ottenuto

questo ritorno come una risposta, dopo decodificarlo

$data = json_decode($data);

{#278 ▼ 
    +"results": array:1 [▼ 
    0 => {#298 ▼ 
     +"address_components": array:2 [▶] 
     +"formatted_address": "PR-111, Puerto Rico" 
     +"geometry": {#300 ▼ 
     +"bounds": {#301 ▶} 
     +"location": {#304 ▼ 
      +"lat": 18.3114513 
      +"lng": -66.9219513 
     } 
     +"location_type": "GEOMETRIC_CENTER" 
     +"viewport": {#305 ▶} 
     } 
     +"place_id": "ChIJrdMXucS4AowRF4jHu2ji58U" 
     +"types": array:1 [▶] 
    } 
    ] 
    +"status": "OK" 
} 

Come potete vedere, ora posso accedere al lat, lng accedendo

$location = $data->results[0]->geometry->location;

Si potrebbe dire, se è possibile accedere ad esso - perché stai ancora facendo questa domanda?

Bene, quello lat, lng i dati che sto tornando dalla risposta dell'API producono errato indicatore di Google Map.

Non sono sicuro del motivo/come è errato, ma sono sicuro che tutti i miei indirizzi utente sono negli Stati Uniti, e qui è il mio risultato di Google Map Marker. Nessuno di loro mostra negli Stati Uniti.

Google Map Risultato

enter image description here


sto a corto di idee ora.

Qualsiasi suggerimento/aiuto/suggerimento significherà molto per me.


Aggiornamento

Grazie a questa answer

sarò in grado di ottenere il lat, lng e tracciare marcatori corretti sul mio Google Map ora.


Risultato Finale

enter image description here

+0

siete alla ricerca di un po 'l'indirizzo generico. cosa succederebbe se taggassi "USA" alla fine di loro? –

+0

Hmm buona chiamata, lasciami provare. – ihue

+1

Indipendentemente dal problema reale, * questa * è una domanda davvero ben strutturata (+1). – Jan

risposta

2

Si dovrebbe codifica URL tuo indirizzo prima di passare ad arricciare.

urlencode($address); 

Gli spazi negli indirizzi se non codificati possono causare problemi imprevedibili.

Ecco un esempio di ciò che accade:

Senza codifica URL:

curl https://maps.googleapis.com/maps/api/geocode/json?address=111 Park AveFloor 4 New York, NY 

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "111", 
       "short_name" : "PR-111", 
       "types" : [ "route" ] 
      }, 
      { 
       "long_name" : "Puerto Rico", 
       "short_name" : "PR", 
       "types" : [ "country", "political" ] 
      } 
     ], 
     "formatted_address" : "PR-111, Puerto Rico", 
     "geometry" : { 
      "bounds" : { 
       "northeast" : { 
        "lat" : 18.4485405, 
        "lng" : -66.6643718 
       }, 
       "southwest" : { 
        "lat" : 18.2420721, 
        "lng" : -67.15701799999999 
       } 
      }, 
      "location" : { 
       "lat" : 18.3114513, 
       "lng" : -66.9219513 
      }, 
      "location_type" : "GEOMETRIC_CENTER", 
      "viewport" : { 
       "northeast" : { 
        "lat" : 18.4485405, 
        "lng" : -66.6643718 
       }, 
       "southwest" : { 
        "lat" : 18.2420721, 
        "lng" : -67.15701799999999 
       } 
      } 
     }, 
     "place_id" : "ChIJrdMXucS4AowRF4jHu2ji58U", 
     "types" : [ "route" ] 
     } 
    ], 
    "status" : "OK" 
} 

con codifica URL:

curl https://maps.googleapis.com/maps/api/geocode/json?address=111+Park+AveFloor+4+New+York%2C+NY 
{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "111", 
       "short_name" : "111", 
       "types" : [ "street_number" ] 
      }, 
      { 
       "long_name" : "Park Avenue", 
       "short_name" : "Park Ave", 
       "types" : [ "route" ] 
      }, 
      { 
       "long_name" : "Midtown East", 
       "short_name" : "Midtown East", 
       "types" : [ "neighborhood", "political" ] 
      }, 
      { 
       "long_name" : "Manhattan", 
       "short_name" : "Manhattan", 
       "types" : [ "sublocality_level_1", "sublocality", "political" ] 
      }, 
      { 
       "long_name" : "New York", 
       "short_name" : "New York", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "New York County", 
       "short_name" : "New York County", 
       "types" : [ "administrative_area_level_2", "political" ] 
      }, 
      { 
       "long_name" : "New York", 
       "short_name" : "NY", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "United States", 
       "short_name" : "US", 
       "types" : [ "country", "political" ] 
      }, 
      { 
       "long_name" : "10170", 
       "short_name" : "10170", 
       "types" : [ "postal_code" ] 
      } 
     ], 
     "formatted_address" : "111 Park Ave, New York, NY 10170, USA", 
     "geometry" : { 
      "bounds" : { 
       "northeast" : { 
        "lat" : 40.7522096, 
        "lng" : -73.9773591 
       }, 
       "southwest" : { 
        "lat" : 40.7521971, 
        "lng" : -73.97736809999999 
       } 
      }, 
      "location" : { 
       "lat" : 40.7521971, 
       "lng" : -73.97736809999999 
      }... 
+0

Hai ragione! Ha risolto i miei problemi dopo I 'urlencode ($ address)'. Ma posso chiederti di avere 26 elementi nel mio array di risposta. Come faccio a sapere quale elemento è quello che mi darà il preciso ** lat, lng **? Si prega di avvisare. – ihue

+1

Restituisce la posizione (s) che corrisponde alla query specificata che può essere più indirizzi. Se vuoi solo il miglior suggerimento per la query specificata usa il lat/lng dal primo risultato. – farooq