java 根据经纬度获取城市信息
时间: 2023-12-03 15:05:21 浏览: 271
要根据经纬度获取城市信息,你需要使用逆地理编码(reverse geocoding)服务。以下是使用 Java 实现的示例代码,基于百度地图的逆地理编码 API:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class GeoCodingService {
private static final String BAIDU_MAP_API = "http://api.map.baidu.com/geocoder/v2/?ak=YOUR_AK&location=%s,%s&output=json&pois=0";
public static void main(String[] args) throws IOException {
String lat = "39.983424";
String lng = "116.322987";
String address = getAddressByGeoCoding(lat, lng);
System.out.println("Address: " + address);
}
public static String getAddressByGeoCoding(String lat, String lng) throws IOException {
String urlStr = String.format(BAIDU_MAP_API, lat, lng);
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
conn.connect();
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
InputStream inputStream = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder responseBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
responseBuilder.append(line);
}
reader.close();
inputStream.close();
String response = responseBuilder.toString();
// 解析 JSON 响应,获取地址信息
// 这里需要使用 JSON 解析库,例如 Jackson、Gson 等
// 这里以 Jackson 为例
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(response);
JsonNode resultNode = rootNode.get("result");
if (resultNode != null) {
JsonNode addressComponentNode = resultNode.get("addressComponent");
if (addressComponentNode != null) {
String province = addressComponentNode.get("province").asText();
String city = addressComponentNode.get("city").asText();
String district = addressComponentNode.get("district").asText();
String street = addressComponentNode.get("street").asText();
return province + city + district + street;
}
}
}
return null;
}
}
```
在示例代码中,我们使用了百度地图的逆地理编码服务,需要在 `BAIDU_MAP_API` 常量中填写你的百度地图 API 密钥。`getAddressByGeoCoding` 方法接收经纬度参数 `lat` 和 `lng`,发送 HTTP GET 请求到逆地理编码 API,获取响应后解析 JSON 响应,提取地址信息并返回。注意,示例代码仅供参考,你需要根据具体情况进行修改和优化。
阅读全文