Tôi đang cố gắng viết một ứng dụng Java, với thành phố và bán kính, trả về tất cả các thành phố lân cận. Tôi nghĩ API Google Maps sẽ có thể thực hiện điều này, nhưng tôi không nhận được may mắn với API địa điểm, API này chỉ trả về các điểm quan tâm (ví dụ: nhà hàng, ...). Có cách nào để làm điều này với google API hoặc là có một số API khác (hoặc cách làm điều này) mà bạn muốn giới thiệu?Sử dụng API Google Địa điểm để nhận các thành phố lân cận cho một địa điểm cụ thể
Trả lời
Bạn có thể đúng là bạn sẽ không muốn sử dụng API địa điểm. Bạn có thể muốn xem liệu có cách nào để sử dụng mã hóa địa lý/mã hóa địa lý đảo ngược để có được những gì bạn muốn. Xem http://code.google.com/apis/maps/documentation/geocoding/.
Tùy thuộc vào yêu cầu về hiệu suất và độ chính xác của bạn, bạn có thể không dễ dàng thực hiện điều này (đặc biệt trên toàn cầu) với API Google Maps (hoặc bất kỳ công cụ miễn phí nào khác), nhưng bạn có thể có được thứ gì đó hoạt động, đặc biệt nếu bạn có giới hạn địa lý (ví dụ: chỉ Hoa Kỳ) có thể đơn giản hóa mọi thứ.
Tôi đã viết một đoạn mã cho phép bạn lấy tất cả các thành phố lân cận bằng cách kết hợp các API Google Maps Geocoding và GeoNames.org API (bên cạnh một file_get_contents của bạn cũng có thể làm một cURL yêu cầu).
/*
* Get cities based on city name and radius in KM
*/
// get geocode object as array from The Google Maps Geocoding API
$geocodeObject = json_decode(file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address={CITY NAME},{COUNTRY CODE}'), true);
// get latitude and longitude from geocode object
$latitude = $geocodeObject['results'][0]['geometry']['location']['lat'];
$longitude = $geocodeObject['results'][0]['geometry']['location']['lng'];
// set request options
$responseStyle = 'short'; // the length of the response
$citySize = 'cities15000'; // the minimal number of citizens a city must have
$radius = 30; // the radius in KM
$maxRows = 30; // the maximum number of rows to retrieve
$username = '{YOUR USERNAME}'; // the username of your GeoNames account
// get nearby cities based on range as array from The GeoNames API
$nearbyCities = json_decode(file_get_contents('http://api.geonames.org/findNearbyPlaceNameJSON?lat='.$latitude.'&lng='.$longitude.'&style='.$responseStyle.'&cities='.$citySize.'&radius='.$radius.'&maxRows='.$maxRows.'&username='.$username, true));
// foreach nearby city get city details
foreach($nearbyCities->geonames as $cityDetails)
{
// do something per nearby city
}
được carefull với số lượng yêu cầu của bạn vì của API được giới hạn
Để biết thêm thông tin về chuyến thăm của API url sau của:
Nếu bạn cảm thấy rằng câu hỏi này là trùng lặp, vui lòng gắn cờ câu hỏi như vậy. Không đăng liên kết lên các bài đăng Stack Overflow khác làm câu trả lời. – JAL
Được rồi, rất vui được biết! Tôi nghĩ rằng nếu tôi đăng câu trả lời của tôi ở khắp mọi nơi nó có thể được đánh dấu là một câu trả lời trùng lặp ... Tôi sẽ chỉnh sửa câu trả lời và không liên kết đến bài đăng khác √ – 0x1ad2