Я нашел код для преобразования широты/долготы в пиксели на заданном изображении и наоборот. Я портировал его на JavaScript, но получаю неправильные возвращаемые значения на широте. Я протестировал оригинальный, немодифицированный код, и он дает те же неточности. Ниже приведен код с возвращаемыми значениями.Широта/Долгота -> X/Y, X/Y -> Широта/Долгота
function degrees_pixels(latitude, longitude, width, height) {
return {
x: (longitude + 180) * (width/360),
y: (height/2) - (width * Math.log(Math.tan((Math.PI/4) + ((latitude * Math.PI/180)/2)))/(2 * Math.PI))
};
};
function pixels_degrees(pixel_x, pixel_y, width, height) {
return {
latitude: (Math.exp(-(pixel_y - (height/2))/width * (2 * Math.PI)) - Math.tan((Math.PI/4)) * 2)/(Math.PI/180),
longitude: (pixel_x - (width/2))/(width/360)
};
};
var tmp1 = degrees_pixels(40.7127, -74.0059, 256, 256);
console.log(tmp1); // Prints {"x":75.3735822222222,"y":96.2511781695169} which is correct
console.log(pixels_degrees(tmp1.x, tmp1.y, 256, 256)); // Prints {"latitude":10.3018054035438,"longitude":-74.0059} of which the latitude is incorrect
Я пробовал исправить его сам, но я борюсь с математикой. Я не совсем уверен, почему это так.
Большинство людей карты не изобретают математику и используют проекционную библиотеку (например, [D3] (https://www.jasondavies.com/maps/transition/), [proj4js] (http: // proj4js. org /) и др.), чтобы преобразовать координаты между проекциями и поместиться на экране. –
Я провел месяцы, играя с OpenLayers 3 и другими библиотеками. Для чего я хочу сделать, мне нужно создать свою собственную. Кроме того, ни один из них не конвертируется в пиксели. –