2011-12-26 35 views
23

Trong một trong các ứng dụng php của tôi, tôi phải tìm ra vĩ độ và kinh độ của địa điểm từ địa chỉ.Nhận vĩ độ và kinh độ tự động bằng cách sử dụng php, API

Tôi đã thử mã này:

$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); 
$json = json_decode($json); 

$lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; 
$long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 

Nhưng nó được hiển thị Lỗi sau:

Cảnh báo: file_get_contents (http://maps.google.com/maps/api/geocode/ json? address = technopark, Trivandrun, kerala, Ấn Độ & sensor = false & region = IND) [function.file-get-contents]: không thể mở luồng: Yêu cầu HTTP không thành công! Yêu cầu Xấu HTTP/1.0 400 trong D: \ Projects \ lon.php trên dòng 4

Hãy giúp tôi giải quyết vấn đề này.

+3

hãy [không thêm chữ ký hoặc khẩu hiệu cho bài đăng của bạn] (http://stackoverflow.com/faq#signatures). – meagar

Trả lời

39

Sử dụng curl thay vì file_get_contents:

$address = "India+Panchkula"; 
$url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=India"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_PROXYPORT, 3128); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
$response = curl_exec($ch); 
curl_close($ch); 
$response_a = json_decode($response); 
echo $lat = $response_a->results[0]->geometry->location->lat; 
echo "<br />"; 
echo $long = $response_a->results[0]->geometry->location->lng; 
+1

Có ai biết mục đích chỉ định CURLOPT_PROXYPORT 3128 ?? – sootsnoot

+0

Rất tiếc - đã vượt quá giới hạn 5 phút về chỉnh sửa nhận xét ... Tôi không quen với việc sử dụng proxy, nhưng từ bài đọc của tôi về chủ đề, tôi hy vọng rằng vì không có máy chủ proxy * nào được chỉ định , sau đó cổng proxy * sẽ bị bỏ qua. Tuy nhiên, hầu hết các bài tôi thấy trên bằng cách sử dụng curl để truy cập bản đồ google chỉ định cổng này không có máy chủ. Đây có phải là sự ô nhiễm copy-paste, hay có mục đích gì? – sootsnoot

+0

Xin chào, tôi muốn nhận vị trí hiện tại theo địa chỉ ip. Có cách nào để có được điều này? – Tarzan

4

Hai ý tưởng:

  • Are Địa chỉ và Region URL Encoded?
  • Có lẽ máy tính của bạn đang chạy mã không cho phép truy cập http. Hãy thử tải một trang khác (như 'http://www.google.com') và xem có hoạt động không. Nếu điều đó cũng không hoạt động, thì có điều gì đó sai với cài đặt PHP.
8
 
//add urlencode to your address 
$address = urlencode("technopark, Trivandrun, kerala,India"); 
$region = "IND"; 
$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); 

echo $json; 

$decoded = json_decode($json); 

print_r($decoded); 
+0

Url phải là 'http: //maps.google.com/maps/api/geocode/json? Address = $ address & sensor = false & region = $ region' –

+0

@ThomasOrlita cảm ơn. Vấn đề là & reg thay đổi thành ký tự khác nhau, vì vậy hãy sử dụng & vùng thay vì –

+0

Đúng, tôi muốn khắc phục nó nhưng bạn đã từ chối chỉnh sửa ... –

37
$address = str_replace(" ", "+", $address); 

Sử dụng mã ở trên trước khi file_get_content. có nghĩa là, sử dụng mã sau

$address = str_replace(" ", "+", $address); 

$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); 
$json = json_decode($json); 

$lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; 
$long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 

và nó sẽ hoạt động chắc chắn. Vì địa chỉ không hỗ trợ không gian, nó chỉ hỗ trợ + đăng nhập không gian.

+5

Xem các hàm php tích hợp: urlencode() và rawurlencode(); – ekerner

+0

Tôi có thể lấy mã ** ZIP ** được không? – Manwal

+0

@Manwal mã bưu điện của những gì ...? –

0

... và đừng quên "$ khu vực" cho mã để làm việc:

$address = "Salzburg"; 
$address = str_replace(" ", "+", $address); 
$region = "Austria"; 

$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); 
$json = json_decode($json); 

$lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; 
$long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 
echo $lat."</br>".$long; 
1
$address = str_replace(" ", "+", $address); 

$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); 
$json = json_decode($json); 

$lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; 
$long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 
Các vấn đề liên quan