У меня есть класс, который выбирает координаты из OpenStreetMap.Он прекрасно работает, когда я выполняю его из обычного класса Java: я написал тестовый класс в Android Studio и просто выполнил его основной метод.
Вот мой тестовый класс, который работает и печатает правильные результаты:
public class openstreetmaptest {
static String address2 = "Platz der Republik 1, 11011 Berlin";
static String address1 = "Willy-Brandt-Straße 1, 10557 Berlin";
public static void main(String[] args) {
Location testL = new Location(address1);
Location test2 = new Location(address2);
System.out.println("distance: " + testL.distanceBetween(test2));
System.out.println("lat 1: " + testL.getLat());
System.out.println("lng 1: " + testL.getLng());
System.out.println("lat 2: " + test2.getLat());
System.out.println("lng 2: " + test2.getLng());
}
}
Важная часть класса Location:
public double distanceBetween(Location x) {
double earthRadius = 6371000; //meters
double dLat = Math.toRadians(x.getLat()-getLat());
double dLng = Math.toRadians(x.getLng()-getLng());
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(getLat())) * Math.cos(Math.toRadians(x.getLat())) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
return dist;
}
private void calculateDegrees() {
Map<String, Double> coords;
coords = OpenStreetMapUtils.getInstance().getCoordinates(address);
lat = coords.get("lat");
lng = coords.get("lon");
}
В моем проекте Android у меня есть класс, которыйрасширяет AppCompatActivity.После того, как пользователь нажимает кнопку, я получаю его входные строки из полей пользовательского интерфейса (информация об адресе).С их помощью я создаю объект Location.Здесь расчет координат больше не работает.
Кажется, здесь происходит сбой:
private String getRequest(String url) throws Exception {
final URL obj = new URL(url);
final HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
con.setRequestMethod("GET");
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();
}
Проверьте ссылку, чтобы увидеть полный код запроса к OpenStreetMap.
android.permission.INTERNET
& android.permission.ACCESS_NETWORK_STATE
areвключены в мой манифест.
Это мой справочник для получения координат: ссылка