6

Ich habe

ein Array von BenutzeradressenHolen Sie sich das lat, lng Basis auf Adresse

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

Mein Ziel

ist die lat und lng jeder Adresse zu packen, und konstruiere so etwas

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

so kann ich sie in Google Map plotten.


Ich habe versucht:

machen eine Locke zu

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

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


Ich habe

dies als eine Antwort zurück, nachdem dekodieren es

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

Wie Sie jetzt sehen, kann ich die lat zugreifen können, lng von

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

Zugriff Man könnte sagen, wenn Sie darauf zugreifen können - Warum fragst du immer noch diese Frage?

Nun, dass lat, lng Daten, die ich zurück von der API-Antwort bekomme produzieren falsche Google Map Marker.

Ich bin mir nicht sicher, warum/wie es falsch ist, aber ich bin sicher, dass alle meine Benutzeradressen in den USA sind, und hier ist meine Google Map Marker Ergebnis. Keiner von ihnen zeigt in den USA.

Google Map Ergebnis

enter image description here


Ich bin jetzt die Ideen ausgehen.

Alle Hinweise/Hilfen/Vorschläge werden mir viel bedeuten.


aktualisiert

Dank diesen answer

ich in der Lage sein, die lat zu bekommen, lng und korrekte Markierungen in meinem Google-Map jetzt zeichnen.


Endergebnis

enter image description here

+0

Sie sind für etwas allgemeine Adresse suchen. was würde passieren, wenn du "USA" auf das Ende von ihnen getaggt hast? –

+0

Hmm guten Ruf, lass mich es versuchen. – ihue

+1

Ungeachtet des tatsächlichen Problems * ist * eine wirklich gut strukturierte Frage (+1). – Jan

Antwort

2

Sie sollten Ihre Adresse URL codieren, bevor Sie es kräuseln passieren.

urlencode($address); 

Die Leerzeichen in den Adressen, wenn sie nicht codiert sind, können zu unvorhersehbaren Problemen führen. Hier

ist ein Beispiel dafür, was passiert:

ohne URL-Codierung:

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

mit URL-Codierung:

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

Sie haben Recht! Es hat meine Probleme nach dem 'urlencode ($ address)' behoben. Aber darf ich fragen, dass ich 26 Elemente in meinem Antwortfeld habe? Woher weiß ich, welches Element mir das genaue ** lat, lng ** gibt? Bitte beraten. – ihue

+1

Es gibt die Position (en) zurück, die mit der angegebenen Abfrage übereinstimmen. Dies können mehrere Adressen sein. Wenn Sie nur den besten Vorschlag für die angegebene Abfrage wünschen, verwenden Sie das lat/lng vom ersten Ergebnis. – farooq

Verwandte Themen