lat long в координатах на карте php

<?php
header("Content-type:image/png");
$image1 = imagecreatefrompng('cylindrical_map.png'); 
$image2 = imagecreatefrompng('pin.png'); 

$long = 18.96;
$lat = 72.82;
$scale_x = imagesx($image1);
$scale_y = imagesy($image1);
$pt = getlocationcoords($lat, $long, $scale_x, $scale_y);

imagecopymerge($image1, $image2, $pt["x"],$pt["y"], 0, 0, 80, 80, 98); //// place a second image on top of image 1


imagepng($image1);

function getlocationcoords($lat, $lon, $width, $height)
{  
    $x = (($lon + 180) * ($width / 360));
    $y = ((-1 * $lat)+90) * ($height / 180);
    return array("x"=>round($x),"y"=>round($y));
}

?>

У меня есть этот код, который преобразует широту и долготу в координаты, но, например, я помещаю и широту и долготу города Нью-Йорка, он не будет указывать на правильное местоположение, возникнут проблемы с преобразованием широты и долготы в координаты.

пожалуйста, помогите мне с этим.

Любая помощь приветствуется.


person webdev002    schedule 31.12.2013    source источник
comment
Насколько точна она вам нужна? Существуют разные исходные данные для размера и формы планеты.   -  person spraff    schedule 31.12.2013
comment
Взгляните на этот вопрос SO: stackoverflow.com/questions/8175265/ это С#, но ссылка в принятом ответе показывает, как преобразовать координаты.   -  person Pixelmonster    schedule 31.12.2013
comment
максимально точно.. размер карты 700 х 500..   -  person webdev002    schedule 31.12.2013
comment
Очень важно знать, какая форма у вашей карты, потому что расчеты разные. Если это равнопрямоугольная проекция, это довольно просто. bit.ly/19DJATK Другие прогнозы: en.wikipedia.org/wiki/List_of_map_projections   -  person Pixelmonster    schedule 31.12.2013
comment
проекция карты равноправноугольная цилиндрическая_карта..   -  person webdev002    schedule 31.12.2013


Ответы (1)


Вы можете использовать пакет PEAR или этот ответ SO для вычисления ваших координат.

Поток SO включает код для ваших нужд.


Наконец, у меня есть рабочий пример для вас. (Заняло несколько минут). Я полагаю, вы взяли эту статью и немного изменили ее.

Сначала нужно рассчитать смещение штифта. Я взял этот из плагина jQuery. (Я уменьшил его ширину до 50 пикселей). Это означает, что вы берете координаты x и y с кончика. Обратите внимание, что вы должны взять верхнюю левую точку в качестве исходной точки!

$pinOffsetX = 19;
$pinOffsetY = 42;

Теперь вы записываете свои координаты. Я взял координаты Нью-Йорка.

$long = -74.0059700;
$lat = 40.7142700;

Загрузите ваши изображения. Я взял эту карту, чтобы иметь большую карту и проверить точность.

$pin = imagecreatefrompng("pin.png");
$im = imagecreatefromjpeg("map.jpg");

Получить размеры изображений и рассчитать координаты

$scale_x = imagesx($im);
$scale_y = imagesy($im);
$pinWidth = imagesx($pin);
$pinHeight = imagesy($pin);
$pt = getlocationcoords($lat, $long, $scale_x, $scale_y);

Функция не изменилась. Теперь скопируйте булавку на карту. Примечание: я использую imagecopy вместо imagecopymerge.

imagecopy($im, $pin, $pt["x"] - $pinOffsetX, $pt["y"] - $pinOffsetY, 0, 0, $pinWidth, $pinHeight);

Смещение штифта необходимо вычесть, чтобы переместить наконечник в нужное место. Выведите изображение (и уничтожьте его!)

header ("Content-type: image/png");
imagepng($im);
imagedestroy($im);
person Pixelmonster    schedule 31.12.2013
comment
я уже смотрю на это, ТАК проблема в том, где находится --› $long_at_left=//Longitude of left-hand coordinates $long_at_right=//Longitude of right-hand coordinates $lat_at_left=//Latitude of left-hand coordinates $lat_at_right=//Latitude of right-hand coordinates - person webdev002; 31.12.2013
comment
Надеюсь, мой пример поможет. - person Pixelmonster; 31.12.2013
comment
Большое спасибо. Я очень ценю вашу помощь.... могу ли я скопировать весь КОД?.. если вы не возражаете: P.. еще раз спасибо.. - person webdev002; 31.12.2013
comment
Могу ли я увидеть вывод ваших изображений с булавкой и картой? - person webdev002; 31.12.2013
comment
Вот полный пакет со снимком экрана: dropbox.com/s/oc2r4ki5c588kds/map_projection.zip< /а> - person Pixelmonster; 01.01.2014
comment
Да, это работает Большое спасибо, вы действительно делаете мой новый год счастливым: P.. извините, я не могу проголосовать, потому что моя репутация в правом ряду низкая... - person webdev002; 03.01.2014