#java #geography #openmap
#java #география #openmap
Вопрос:
Я пытаюсь заставить часть кода работать (аналогично тому, что у меня есть ниже), чтобы OBJECT_LOC и CONVERTED_LOC были точно такими же. Я думал, что код был довольно простым в том, что я делал, но по какой-то причине они не получаются равными? Что я делаю не так? (Вы можете увидеть вывод ниже).
import com.bbn.openmap.LatLonPoint;
import com.bbn.openmap.proj.Length;
import com.bbn.openmap.proj.coords.DMSLatLonPoint;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// 45:20:00.0N/24:00:00.0E
LatLonPoint BASE_LOC = new DMSLatLonPoint(false, 45, 20, 00.0f, false,
24, 00, 00.0f).getLatLonPoint();
System.out.println("BASE_LOC: " BASE_LOC);
LatLonPoint OBJECT_LOC = new LatLonPoint(52.749355, 26.346556);
System.out.println("OBJECT_LOC: " OBJECT_LOC);
float distanceX = BASE_LOC.distance(new LatLonPoint(BASE_LOC
.getLatitude(), OBJECT_LOC.getLongitude()));
float distanceY = BASE_LOC.distance(new LatLonPoint(OBJECT_LOC
.getLatitude(), BASE_LOC.getLongitude()));
LatLonPoint CONVERTED_POINT = new LatLonPoint(BASE_LOC.getLatitude()
Length.DECIMAL_DEGREE.fromRadians(distanceY),
BASE_LOC.getLongitude()
Length.DECIMAL_DEGREE.fromRadians(distanceX));
System.out.println("CONVERTED_POINT " CONVERTED_POINT);
}
}
Вывод:
BASE_LOC: LatLonPoint[lat=45.333332,lon=24.0]
OBJECT_LOC: LatLonPoint[lat=52.749355,lon=26.346556]
CONVERTED_POINT LatLonPoint[lat=52.749355,lon=25.649527]
Ответ №1:
После просмотра документов API и некоторой литературы по географии похоже, что ваш метод определения второго пункта ошибочен. Правильный способ сделать это — использовать расстояние и азимут (азимут). Ниже приведен исправленный код:
import com.bbn.openmap.LatLonPoint;
import com.bbn.openmap.proj.coords.DMSLatLonPoint;
public class TestProgram {
/**
* @param args
*/
public static void main(String[] args) {
// 45:20:00.0N/24:00:00.0E
LatLonPoint BASE_LOC = new DMSLatLonPoint(false, 45, 20, 00.0f, false, 24, 00, 00.0f).getLatLonPoint();
System.out.println("BASE_LOC: " BASE_LOC);
LatLonPoint OBJECT_LOC = new LatLonPoint(52.749355, 26.0);
System.out.println("OBJECT_LOC: " OBJECT_LOC);
float distance = BASE_LOC.distance(OBJECT_LOC);
float az = BASE_LOC.azimuth(OBJECT_LOC);
LatLonPoint CONVERTED_POINT = BASE_LOC.getPoint(distance, az);
System.out.println("CONVERTED_POINT " CONVERTED_POINT);
}
}
Некоторая информация доступна здесь — http://www.movable-type.co.uk/scripts/latlong.html
Ответ №2:
Как бы то ни было, когда вы выполняете свои вызовы BASE_LOC.distance() , вы меняете местами OBJECT_LOC / BASE_LOC в аргументах для двух расстояний. OBJECT_LOC / BASE_LOC в одном, BASE_LOC / OBJECT_LOC в другом.
Комментарии:
1. Это специально. В первом вызове я установил BASE_LOC в качестве широты, чтобы я мог получить только расстояние X от OBJECT_LOC .. В следующем вызове я устанавливаю я устанавливаю BASE_LOC в качестве долготы, поэтому я могу получить только расстояние y от OBJECT_LOC