nominatim 逆地理位置解析java代码
时间: 2023-07-03 10:25:27 浏览: 76
以下是使用 Java 进行 Nominatim 逆地理位置解析的示例代码:
```java
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.HashMap;
import java.util.Map;
public class NominatimReverseGeocoding {
public static void main(String[] args) throws Exception {
// 给定坐标
double latitude = 31.2304;
double longitude = 121.4737;
// 构建请求 URL
String urlString = "https://nominatim.openstreetmap.org/reverse?"
+ "format=jsonv2&lat=" + latitude + "&lon=" + longitude;
// 发送 HTTP 请求
HttpClient httpClient = HttpClient.newHttpClient();
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(URI.create(urlString))
.build();
HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
// 解析响应 JSON
String json = httpResponse.body();
ObjectMapper objectMapper = new ObjectMapper();
TypeReference<HashMap<String, Object>> typeRef = new TypeReference<HashMap<String, Object>>() {};
Map<String, Object> map = objectMapper.readValue(json, typeRef);
// 输出位置信息
String country = (String) map.get("address.country");
String city = (String) map.get("address.city");
String postcode = (String) map.get("address.postcode");
String road = (String) map.get("address.road");
System.out.println("Country: " + country);
System.out.println("City: " + city);
System.out.println("Postcode: " + postcode);
System.out.println("Road: " + road);
}
}
```
在上述代码中,我们使用了 Java 自带的 `HttpClient` 发送 HTTP 请求,使用了 Jackson 库解析 JSON 响应。需要注意的是,Nominatim 的服务有使用限制,如有需要,可以在请求中指定用户代理等信息。