2011-08-09 36 views
12

Giả sử tôi có địa chỉ dưới dạng văn bản:Làm thế nào để chuyển đổi địa chỉ (dưới dạng văn bản) thành tọa độ gps?

901 Cherry Ave. San Bruno, CA 94066 USA

có dịch vụ MIỄN PHÍ nào có thể giúp tôi xác định tọa độ GPS (kinh độ và vĩ độ) của địa chỉ này không? (Tôi sẽ sử dụng nó trong ứng dụng của mình, vì vậy nó phải là một loại API)

Văn bản có thể bằng bất kỳ ngôn ngữ nào.

+1

Cảm ơn các liên kết API của Google (http://code.google.com/apis/maps/documentation/geocoding/). Có chức năng tương tự cho OSM không? –

+2

Đây là liên kết cho mã hóa địa lý OSM - http://wiki.openstreetmap.org/wiki/Nominatim –

Trả lời

18

Quá trình được gọi là chuyển đổi địa chỉ thành tọa độ địa lý được gọi là mã hóa địa lý.

Tùy thuộc vào cách bạn sẽ sử dụng dữ liệu, có một API có sẵn từ Google, chi tiết here. Chúc may mắn!

+3

Cảm ơn, bằng cách sử dụng _geocoding_ từ Tôi đã tìm thấy API OSM. –

0

Nếu bạn có thể/sẵn sàng sử dụng php và Zend Framework sau đó hầu hết API Google Maps được tóm tắt bằng cách sử dụng Zend_Http_Client.

Ví dụ:

$address = '69 Some Road, Somewhere, NW1 8UJ'; 

$http = new Zend_Http_Client('google_maps_url'); 
$http->setParameterGet(array('address' => $address, 'sensor' => 'false')); 
$get = $http->request(); 
$get = json_decode($get->getBody()); 

if ($get->status == self::GOOGLE_MAPS_SUCCESS) { 
    $lat = (float) $get->results[0]->geometry->location->lat; 
    $long = (float) $get->results[0]->geometry->location->lng; 
} 
3

Nó thực sự không mather mà khuôn khổ bạn sử dụng, nguyên nhân nếu bạn muốn một cái gì đó lớn bạn có thể có một bất ngờ lớn: một giới hạn là 2,5 K request/ngày này trong trường hợp bạn không lưu trữ các thông tin đó trong xml để sử dụng sau này. Vì vậy, tại thời điểm này, bạn có thể tìm thấy một cách tốt hơn để kết hợp điều này với tính năng OSM để bản địa hóa.

1

Dưới đây là mã tôi sử dụng. Tôi đã chuẩn bị nó dựa trên mã voncox (cảm ơn). Chỉ không muốn sử dụng Zend.
Nếu bạn cần mã hóa địa lý nhiều địa chỉ, hãy đóng mã này bằng bất kỳ loại vòng lặp nào nhưng có thể có cách nhanh hơn. Tôi đã sử dụng nó chỉ cho khoảng 100 địa chỉ và mất khoảng 30 giây để xử lý.

$street="Lwowska 4"; $postcode="00-658"; $city="Warszawa"; $region="mazowieckie"; 

$a=$street.", ".$postcode.", ".$city.", ".$region; 
$address = urlencode($a); 
$link = "http://maps.google.com/maps/api/geocode/xml?address=".$address."&sensor=false"; 
$file = file_get_contents($link); 

if(!$file) { 
    echo "Err: No access to Google service: ".$a."<br/>\n"; 
}else { 
    $get = simplexml_load_string($file); 

    if ($get->status == "OK") { 
     $lat = (float) $get->result->geometry->location->lat; 
     $long = (float) $get->result->geometry->location->lng; 
     echo "lat: ".$lat."; long: ".$long."; ".$a."<br/>\n"; 
    }else{ 
    echo "Err: address not found: ".$a."<br/>\n"; 
    } 
} 
+0

Câu trả lời hay, Marcin. Nó có thể là một ý tưởng tốt để loại bỏ các phần MySQL của câu trả lời của bạn, vì nó không liên quan đến câu hỏi, và có thể gây ra một số nhầm lẫn. –

+0

Thực hiện tốt. Tôi * chỉ * cần chuyển đổi địa chỉ sang GPS và lãng phí lượng thời gian khổng lồ trên trang web của Google đang cố gắng lấy khóa API, cấp phép cho API, thử nghiệm ... vv Cách tiếp cận này không yêu cầu khóa và đơn giản cung cấp dữ liệu trở lại. Đó là tất cả những gì tôi thực sự cần ở nơi đầu tiên, không phải là bản đồ được nhúng. –

0

FYI, giấy phép cộng đồng MapQuest có 'mở' api, sử dụng nomatim/OpenStreetMap ở mặt sau.

Nó giống API (giao diện khôn ngoan) như api của Cộng đồng được cấp phép, điều này giúp dễ dàng chuyển đổi sau này.

Tôi thấy rằng phiên bản mở yêu cầu địa chỉ phải quá ít chính xác; vào ngày đầu tiên sau khi triển khai, chúng tôi đã "bỏ lỡ" một số địa chỉ. Chúng tôi nghĩ rằng dịch vụ đã ngừng hoạt động, nhưng hóa ra tên đường phố thiếu các chi tiết nhỏ như một hướng (ex SW).

Đã thử phiên bản được cấp phép và phiên bản trả về ngay cả các địa chỉ sai chính tả.

Phiên bản dữ liệu được cấp phép của Cộng đồng cũng miễn phí, nhưng bị hạn chế bởi khá nhiều thuật ngữ giống với thuật ngữ Google. Dữ liệu 'mở' bạn có thể làm với những gì bạn muốn.

Nếu bạn sắp kết thúc thanh toán, thì Boss/Geo api của Yahoo có vẻ là rẻ nhất với khối lượng thấp; họ chỉ không có phiên bản miễn phí.

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