AlexRomantsov писал(а): ↑27 май 2024, 13:21
Не ясно, какие значения углов leaflet вы привели. //Нижний левый -256,0 - это что? Пиксели? Метры? В каком масштабе (уровне)? С каким охватом - весь глобус? Четверть? В карте leaflet что, OpenStreetMap или свои слои?
Возможно, имеет смысл создать проекцию (систему координат) для игровых координат, тогда leaflet сможет самостоятельно проецировать ваши маркеры на свои карты.
Карта своя не географическая.
Я пытаюсь создать карту по аналогии
https://dayz.xam.nu/deerisle#4470.00;8980.00;4 под свой проект для админ панели.
Для теста пока тайтлы от туда же использую.
Там работает эта система как раз.
Это я получаю через клик в нижнем левом углу через
Код: Выделить всё
console.log('Ваши координаты карты:', e.latlng);
Я понимаю что мне нужна своя проекция но не понимаю как ее создать.
Чтобы отсчет шел с нижнего левого угла 0,0 и верхний правый угол стал 16348,16348
Мне советовали подобное:
Код: Выделить всё
function init() {
var width = 16348;
var height = 16348;
var minZoom = 2;
var maxZoom = 6;
var img = [
width,
height
];
var zoom = zoomLevel();
function zoomLevel() {
return Math.ceil(
Math.log(
Math.max(width, height) /
256
) / Math.log(2)
);
};
var map = L.map('map', {
minZoom: minZoom,
maxZoom: maxZoom,
crs: L.CRS.Simple,
});
function project(coords) {
var point = map.project(coords, zoom);
return L.point(point.x, height - point.y);
}
function unproject(coords) {
var invertedY = height - coords["1"];
var point = L.point(coords["0"], invertedY);
return map.unproject(point, zoom);
}
var maxSouthWest = unproject([0, height]);
var maxNorthEast = unproject([width, 0]);
map.setMaxBounds(new L.LatLngBounds(maxSouthWest, maxNorthEast));
map.setView(unproject([img[0] / 2, img[1] / 2]), maxZoom);
var southWest = unproject([0, 0]);
var northEast = unproject([width, height]);
L.tileLayer('https://static.xam.nu/dayz/maps/deerisle/5.3/satellite/{z}/{x}/{y}.webp', {
noWrap: true,
bounds: new L.LatLngBounds(southWest, northEast),
}).addTo(map);
map.on('click', function(e) {
console.log('Ваши координаты карты:', project(e.latlng));
});
}
Но тут Y не совпадает в обще,а вот X близко но не совсем.
P.s по шагам:

Выбрал место на карте,ставлю туда маркер:

А он берет и уезжает на 10-15 метров.Что не очень хорошо...
Консоль в ответ на:
Код: Выделить всё
L.marker(unproject([6333, 14798])).addTo(map);
Выдает:
То есть координаты совпадают с местом клика,но маркер почему-то уехал.