6

mam

tablicę adresów użytkownikówGet LAT, LNG baza na adres

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 " 
    ] 
] 

Moim celem

jest chwycić lat i lng każdego adresu i skonstruować coś takiego:

[ 
    ["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] 
] 

, więc mogę je nanieść na mapę Google.


Próbowałem:

dokonywania zawinięcie do

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

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


mam

to z powrotem jako odpowiedź po dekodować go

$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" 
} 

Jak widać, teraz mogę przejść LAT, LNG poprzez dostęp

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

Można powiedzieć, czy można uzyskać dostęp do niego - dlaczego wciąż zadajesz to pytanie?

Cóż, te lat, lng dane, które otrzymuję z odpowiedzi API, generują nieprawidłowy znacznik Google Map.

Nie mam pewności, dlaczego/jak jest źle, ale jestem pewna, że wszystkie moje adresy użytkowników są w USA, a tutaj jest mój wynik Google Map Marker. Żadne z nich nie pokazuje się w USA.

Google Map Wynik

enter image description here


biegnę z pomysłów teraz.

Wszelkie wskazówki/pomocne/sugestie będą dla mnie bardzo ważne.


Aktualizacja

Dzięki tej answer

będę mógł dostać szer LNG i wykreślić odpowiednie znaczniki na mojej mapie Google teraz.


ostateczny wynik

enter image description here

+0

szukasz nieco generycznego adres. co by się stało, gdybyś otagował "USA" na końcu? –

+0

Hmm dobra rozmowa, pozwól mi spróbować. – ihue

+1

Bez względu na faktyczny problem, * to * jest naprawdę dobrze skonstruowanym pytaniem (+1). – Jan

Odpowiedz

2

Należy URL zakodować swój adres, zanim przejdzie on do zwijania.

urlencode($address); 

Przestrzenie w adresach, jeśli nie są zakodowane, mogą powodować nieprzewidziane problemy.

Oto przykład tego, co się dzieje:

Bez kodowania 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" 
} 

z kodowaniem 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

Masz rację! Naprawił moje problemy po 'urlencode ($ address)'. Ale czy mogę zapytać, czy mam 26 elementów w mojej tablicy odpowiedzi. Skąd mam wiedzieć, który element jest tym, który da mi dokładny ** lat, lng **? Proszę doradź. – ihue

+1

Zwraca lokalizację odpowiadającą danemu zapytaniu, które może być wieloma adresami. Jeśli potrzebujesz najlepszej sugestii dla danego zapytania, użyj funkcji lat/lng z pierwszego wyniku. – farooq