6

Tôi có

một loạt các địa chỉ sử dụngLấy lat, lng cơ sở trên địa chỉ

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

Mục tiêu của tôi

là để lấy lat, và lng của mỗi địa chỉ, và xây dựng một cái gì đó như thế này

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

để tôi có thể vẽ chúng trong Google Map.


tôi đã cố gắng:

thực hiện một curl để

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

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


tôi đã

này trở lại như một phản ứng, sau khi giải mã nó

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

Như bạn thấy, bây giờ tôi có thể truy cập vào lat, lng bằng cách truy cập

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

Bạn có thể nói, nếu bạn có thể truy cập vào nó - tại sao bạn vẫn hỏi câu hỏi này?

Vâng, rằng lat, lng dữ liệu mà tôi nhận được từ phản hồi API tạo sai Google Map Marker.

Tôi không chắc chắn tại sao/sai như thế nào, nhưng tôi là chắc chắn rằng tất cả địa chỉ người dùng của tôi đều ở Hoa Kỳ và đây là Kết quả của Google Map Marker của tôi. Không ai trong số họ hiển thị bên trong Hoa Kỳ.

Google Map Kết quả

enter image description here


Tôi đang chạy ra khỏi ý tưởng bây giờ.

Bất kỳ gợi ý/trợ giúp/đề xuất nào sẽ có ý nghĩa đối với tôi.


Cập nhật

Nhờ vậy answer

tôi có thể nhận được các lat, lng và mưu đánh dấu đúng trên Google Map của tôi bây giờ.


Kết quả cuối cùng

enter image description here

+0

bạn đang tìm kiếm địa chỉ hơi chung chung. điều gì sẽ xảy ra nếu bạn gắn thẻ "USA" vào cuối chúng? –

+0

Gọi điện tốt, hãy để tôi thử. – ihue

+1

Bất kể vấn đề thực tế, * điều này * là một câu hỏi có cấu trúc thực sự tốt (+1). – Jan

Trả lời

2

Bạn nên URL mã hóa địa chỉ của bạn trước khi bạn vượt qua nó để cuộn tròn.

urlencode($address); 

Không gian trong địa chỉ không được mã hóa có thể gây ra các vấn đề không thể đoán trước.

Dưới đây là một ví dụ về những gì sẽ xảy ra:

Nếu không có mã hóa 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" 
} 

Với mã hóa 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

Bạn nói đúng! Nó đã sửa lỗi của tôi sau khi tôi 'urlencode (địa chỉ $)'. Nhưng tôi có thể hỏi tôi có 26 phần tử trong mảng phản hồi của tôi không. Làm cách nào để biết yếu tố nào là yếu tố sẽ cho tôi chính xác ** lat, lng **? Xin cho biết. – ihue

+1

Nó trả về (các) vị trí phù hợp với truy vấn đã cho của bạn, có thể là nhiều địa chỉ. Nếu bạn chỉ muốn gợi ý tốt nhất cho truy vấn đã cho, hãy sử dụng lat/lng từ kết quả đầu tiên. – farooq

Các vấn đề liên quan