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, // original width of image
height // original height of image
];
var zoom = zoomLevel();
function zoomLevel() {
return Math.ceil(
Math.log(
Math.max(width, height) /
256
) / Math.log(2)
);
};
// create the map
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);
}
//sets the max bounds on map
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 по шагам:
![Изображение](https://i.ibb.co/ync6DsW/image.png)
Выбрал место на карте,ставлю туда маркер:
![Изображение](https://i.ibb.co/RjYjRfb/image.png)
А он берет и уезжает на 10-15 метров.Что не очень хорошо...
Консоль в ответ на:
Код: Выделить всё
L.marker(unproject([6333, 14798])).addTo(map);
Выдает:
То есть координаты совпадают с местом клика,но маркер почему-то уехал.