Координаты маркера неверны - PullRequest
0 голосов
/ 16 ноября 2018

Я создаю панель администратора / пользователя для игры под названием ArmA 3, используя мод под названием Exile.Изгнание помещает координаты X, Y (Z aswell) в базу данных.Я использую PHP, чтобы получить эти координаты и поместить маркер в том месте, где находится игрок, используя leaflet.js.Я использую пользовательское изображение (15360x15360).

Проблема: Допустим, я нахожусь в позиции (6340, 7801) (x, y).Маркер будет отключен от того места, где я на самом деле (см. Ниже)

(игровое местоположение) https://imgur.com/a/Nky9Oqf

(маркер листовки) https://imgur.com/a/jFco4V5

PHPcode + leaflet.js:

<?php
require_once "application.php";
?>
<html lang="en">
    <head>
        <title>Search</title>
        <link rel="stylesheet" href="leaflet.css">
        <meta charset="UTF-8">
    </head>
    <body>

<?php

if(isset($_GET["q"])) {
    $uid = $_GET["q"];

    $UCP = new UCP("localhost", "root", "root", "testdb", "3306");
    $r = $UCP->getPlayer($uid);
    if($r) {
        $coords = $UCP->getPlayerCoords($uid);
    }
}

?>

<div id="map" style="height: 100%"></div>

<script src="js/leaflet.js"></script>
<script>

var mapMinZoom = 0;
var mapMaxZoom = 4;
var map = L.map('map', {
    minZoom: mapMinZoom,
    maxZoom: mapMaxZoom,
    center: [15360, 15360],
    crs: L.CRS.Simple
});

var w = 15360,
    h = 15360,
    url = 'http://localhost/images/Chernarus_Isles_nogrid.png';

var southWest = map.unproject([0, h], mapMaxZoom);
var northEast = map.unproject([w, 0], mapMaxZoom);
var bounds = new L.LatLngBounds(southWest, northEast);

map.fitBounds(bounds);

L.imageOverlay(url, bounds).addTo(map);

<?php

    if(isset($_GET["q"])) {
        if($r) { ?>
            var pos_x_player = Math.round(<?php echo $coords["pos_x"]; ?>);
            var pos_y_player = Math.round(<?php echo $coords["pos_y"]; ?>);
            var p_loc = map.unproject([pos_y_player, pos_x_player], mapMaxZoom);
            L.marker(p_loc).addTo(map).bindPopup('Player Location');
            <?php

        }
    }

?>
</script>

Он успешно соединяется с базой данных и захватывает координаты, но листовка всегда находится вне моего местоположения.

Любая помощь будет оценена.Если я что-то пропустил, пожалуйста, дайте мне знать:)

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Точечные объекты измеряются в пикселях, поэтому да, исходное изображение и ваше изображение должны быть идентичными, чтобы получить точные координаты в этом случае без изменений. Определив разницу в размерах, вы можете создать функцию для преобразования исходных координат в координаты вашей карты.

0 голосов
/ 17 ноября 2018

Добро пожаловать в ТАК!

Первый лист карты unproject является первым параметром Point, который принимает координаты в порядке [horizontal, vertical]:

https://leafletjs.com/reference-1.3.4.html#point-factory

Ожидает массив вида [x, y]

Поэтому неправильная позиция вашего маркера очень вероятна только потому, что вы передали свои координаты в неправильном порядке:

map.unproject([pos_y_player, pos_x_player], mapMaxZoom)

... должно было быть:

map.unproject([pos_x_player, pos_y_player], mapMaxZoom)
...