Есть ряд точек с реальными координатами, которые нужно отобразить на карте, и наоборот, получить реальные координаты по точкам на карте.
Я использую d3js, и тут есть функция scaleLinear, которая ожидает два диапазона, после чего я могу ввести любое число из первого диапазона, и получить соответствующее число из второго.
И вроде как все просто, но с учетом инверсии оси игрек (чтоб как на реальных картах), и прямоугольности карты - точки рисуются неправильно, не в масштабе и вытянуты.
Может есть какая-то формула или общий алгоритм действий?
Вот как делаю сейчас
map: {
width: 1000,
height: 500,
},
real: {
minX: 50000,
maxX: 100000,
minY: 50000,
maxY: 100000,
},
// ...
var mapCoef = this.map.height / this.map.width;
this.mapX = d3.scaleLinear().domain([this.real.minX, this.real.maxX]).range([0, this.map.width]);
this.mapY = d3.scaleLinear().domain([this.real.minX * mapCoef, this.real.maxX * mapCoef]).range([this.map.height, 0]);
// this.mapX, this.mapY - функции получения карточных координат по реальным координатам