I’m trying to retrieve coordinates for a given address using an API I found for OpenStreetMap.
The API is as follows:
package com.sges.commons.utils.coordenada;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.json.simple.parser.JSONParser;
import com.sges.commons.generic.entities.GenConcelho;
public class OpenStreetMapUtils {
private static OpenStreetMapUtils instance = null;
private JSONParser jsonParser;
public OpenStreetMapUtils() {
jsonParser = new JSONParser();
}
public static OpenStreetMapUtils getInstance() {
if (instance == null) {
instance = new OpenStreetMapUtils();
}
return instance;
}
private static String getRequest(String url) throws Exception {
final URL obj = new URL(url);
final HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int a = con.getResponseCode();
if (con.getResponseCode() != 200) {
return null;
}
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return response.toString();
}
public static Map<String, Double> getCoordinates(String address, String concelho) {
Map<String, Double> res;
StringBuffer query;
String join_morada_concelho = address + " " + concelho;
String[] split = join_morada_concelho.split(" ");
String queryResult = null;
query = new StringBuffer();
res = new HashMap<String, Double>();
query.append("http://nominatim.openstreetmap.org/search?q=");
if (split.length == 0) {
return null;
}
for (int i = 0; i < split.length; i++) {
query.append(split[i]);
if (i < (split.length - 1)) {
query.append("+");
}
}
query.append("&format=json&addressdetails=1");
try {
queryResult = getRequest(query.toString());
} catch (Exception e) {
}
if (queryResult == null) {
return null;
}
Object obj = JSONValue.parse(queryResult);
if (obj instanceof JSONArray) {
JSONArray array = (JSONArray) obj;
if (array.size() > 0) {
JSONObject jsonObject = (JSONObject) array.get(0);
String lon = (String) jsonObject.get("lon");
String lat = (String) jsonObject.get("lat");
res.put("lon", Double.parseDouble(lon));
res.put("lat", Double.parseDouble(lat));
}
}
return res;
}
}
The problem is that when it gets to the getRequest() method, it shows me that I don’t have a response code 200: variable “con”
And yes, it generates a valid URL because I pasted it on chrome and it showed me coordinates for my address. The problem seems to be the connection between my project and OpenStreetMap.
Any ideas?