В моем приложении Java я использую JmapViewer; карта нарисована на jPanel. Можно ли получить масштаб карты, соответствующий текущему уровню масштабирования? Карта основана на известной проекции Меркатора:JMapViewer, получить масштаб карты OSM, Java
X = R * lon * cos(lat1);
Y = R * log(tan(lat/2 + 45)), lat1 = 0;
проекция является конформным, так что локальная линейная шкала не зависит от направления. Моя идея использует две точки, разделяющие ту же параллель:
Point p1 = new Point(0,0);
Point p2 = new Point(100,0);
final double dlon = getPosition(p2).getLon() - getPosition(p1).getLon();
final double scale = 6380000 * abs(dlon) * PI/180/100; //scale = (R * dlon)/||p1-p2||
улучшение: начальная точка p1 может быть центром зрения.
Point p1 = new Point(jPanel1.width()/2,jPanel1.height()/2);
Point p2 = new Point(jPanel1.width()/2 + 100, jPanel1.height()/2);
Координаты пикселей оцениваются «в метрах»; в формуле отсутствует размер пикселя ...
перепечатывать его как алгоритм вопроса не зависит от Java, JMapViewer, JPanel и т.д. У вас есть Lon/Lat координаты и проекции Меркатора, и вы хотите, чтобы вычислить проекцию на пиксельном поле шириной и высотой йх йу. Добавьте к вопросу о масштабировании, то есть у вас будет центральная точка масштабирования и масштабный коэффициент. Остальное не имеет значения. В текущей форме вы, скорее всего, не получите разумного ответа. –