Мне нужно написать функцию, которая может проецировать некоторое местоположение, определенное широтой / долготой, в координаты x, y на карте (изображение).
Кажется, что в самой карте в качестве типа проекции используется "бельгийский Ламберт".
Я нашел некоторую официальную информацию об этой проекции и ее конфигурации: http://ign.be/FR/FR2-1-4.shtm и http://ign.be/Common/Lambert2008/Transformation_Geographic_Lambert_FR.pdf (на французском я переведу, если необходимо).
По сути, я пришел к выводу, что было бы легче использовать какую-то библиотеку (хотя здесь это не является обязательным требованием). После некоторых исследований кажется, что OpenMap должен быть в состоянии выполнить эту работу.
Итак, вот что я получил:
private Point mapCoordinatesToPoint(LatLonPoint latLonPoint) {
LatLonPoint centerLatLonPoint = new LatLonPoint(50.797815, 4.3592158333333333333333333333333);
Proj proj = new LambertConformal(centerLatLonPoint, 1, 1000, 1000, 4.3592158333333333333333333333333, 49.833333333333333333333333333333, 51.166666666666666666666666666667, 50.797815, 649328.0, 665262.0, Ellipsoid.GRS_1980);
return proj.forward(latLonPoint);
}
(зная, что мой gif - 1000x1000)
JavaDoc для конструктора LamberConformal: http://openmap.bbn.com/doc/api/com/bbn/openmap/proj/LambertConformal.html#LambertConformal%28com.bbn.openmap.LatLonPoint,%20float,%20int,%20int,%20double,%20double,%20double,%20double,%20double,%20double,%20com.bbn.openmap.proj.Ellipsoid%29
Полагаю, я неправильно настроил: некоторая точка, которая должна быть на карте, ххх, дает такой результат:
x=-1766051.0; y=-1.6355546E7;
Задание "центральной точки" (?) В качестве параметра дает
x=500.0; y=500.0;
(середина карты, которая выглядит нормально)
Кто-нибудь знаком с этим или способен определить конфигурацию по ссылкам?
EDIT:
попытался заменить последнюю строку метода следующим образом:
return proj.forward(latLonPoint.getLatitude(), latLonPoint.getLongitude(), new Point(), false);
но не лучше.