nominatim 地理位置解析java源代码
时间: 2024-01-10 15:04:32 浏览: 23
以下是使用 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 NominatimGeocoding {
public static void main(String[] args) throws Exception {
// 给定地址
String address = "1600 Amphitheatre Parkway, Mountain View, CA";
// 构建请求 URL
String urlString = "https://nominatim.openstreetmap.org/search?"
+ "format=jsonv2&q=" + URLEncoder.encode(address, "UTF-8");
// 发送 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>[]>() {};
HashMap<String, Object>[] maps = objectMapper.readValue(json, typeRef);
// 输出位置信息
for (HashMap<String, Object> map : maps) {
String displayName = (String) map.get("display_name");
double latitude = Double.parseDouble((String) map.get("lat"));
double longitude = Double.parseDouble((String) map.get("lon"));
System.out.println("Display name: " + displayName);
System.out.println("Latitude: " + latitude);
System.out.println("Longitude: " + longitude);
}
}
}
```
在上述代码中,我们同样使用了 Java 自带的 `HttpClient` 发送 HTTP 请求,使用了 Jackson 库解析 JSON 响应。需要注意的是,Nominatim 的服务有使用限制,如有需要,可以在请求中指定用户代理等信息。