Nanoszenie punktów GPS na mapę

1

Witam.
Podpowie ktoś może w jaki sposób podzielić mapę (obraz jpg,png) na współrzędne i przy pomocy funkcji dodawać punkty do mapy ?

1

a masz jakiekolwiek punkty odniesienia na tej mapie?

0

54°50'08.8'' N 14°07' E (54.835778, 14.116667) chodzi mi o mapę polski.
Coś jak ma policja policja.pl/dokumenty/zalaczniki/1/mini/1-321796_mo4.gif .
Na początek bez gifów :)

0

Może to na oko nanieśli?

Nie znam się w sumie, ale jeśli chciałbyś dokładnie to zrobić, to potrzebujesz współrzędne całego boxa (wszystkie 4 rogi mapki). A potem znając współrzędne punktu możesz wyliczyć odległość w jakiej ma się punkt znaleźć.

0

Nanieść można tylko, że chciałbym to połączyć z bazą danych przez PHP. Masz jakiś pomysł ? Ja próbowałem tak, że pobierałem rozmiar obrazu mapy i dzieliłem przez współrzędne ale nic konkretnego z tego nie wyszło....

0

Weź pokaż jakiś kod, który napisałeś.

0

Jakiegoś konkretnego kodu nie mam... rozkminiam jak to policzyć.

Próbowałem tak:

// import obrazu mapy
$im = imagecreatefrompng('map.png'); // lub => https://4programmers.net/Forum/Download/24398

// Punkt początkowy
$x1 = 54.835778;
$y1 = 14.116667;

// Punkt końca mapy
$x2 = 48.487771;
$y2 = 23.995084;

$stepX = ($x1-$x2)/imagesx($im);
$stepY = ($y2-$y1)/imagesy($im);

// Współrzędne Krakowa
$kX = 50.061583;
$kY = 19.937268;


$x = ($x1-$kX)*$stepX;
$y = ($kY-$y1)*$stepY;

$pointColor = imagecolorallocate($im, 255, 0, 0);
imagefilledrectangle($im,$x, $y, $x+5, $y+5, $pointColor);


header("Content-Type: image/png");
imagepng($im);

W załączniku mapa.

0

Jak chcesz obliczyć punkt X, to musisz skorzystać z długości geograficznej (longitude), a Ty używasz szerokości (latitude).
A dla Y powinieneś użyć szerokości, a nie długości.

I kroki dla X powinieneś liczyć tak, że długość obrazka dzielisz przez różnicę skrajnych długości. Wtedy wyjdzie Ci ile px odpowiada na 1 stopień długości geograficznej.
A dla kroku Y, wysokość obrazka dzielisz przez różnicę skrajnych szerokości.

Mam nadzieję, że nic nie pomyliłem^^

EDIT: Powinno chyba być coś takiego:

<?php
$url    = 'https://4programmers.net/Forum/Download/24398';
$image  = imagecreatefrompng($url);

// Punkt początkowy
$lat1  = 54.835778;
$long1 = 14.116667;

// Punkt końca mapy
$lat2  = 48.487771;
$long2 = 23.995084;

$stepX = imagesx($image) / abs($long1 - $long2);
$stepY = imagesy($image) / abs($lat1 - $lat2);

// Współrzędne Krakowa
$latK  = 50.061583;
$longK = 19.937268;

$x = abs($long1 - $longK) * $stepX;
$y = abs($lat1 - $latK) * $stepY;

$pointColor = imagecolorallocate($image, 255, 0, 0);
imagefilledrectangle($image, $x, $y, $x + 5, $y + 5, $pointColor);

header("Content-Type: image/png");
imagepng($image);
0

Czyli sobie pomieszałem :)
Twój kod działa ;D

Mam jeszcze takie pytanie.
Czy można jakoś poprawić dokładność punktów na mapie ?

0

Może masz niedokładnie podany punkt początkowy i końcowy? Albo mapka nie ma dobrej skali^^

0

Czy można jakoś poprawić dokładność punktów na mapie ?

Jaką chcesz mieć dokładność przy takiej skali mapy? Punktem możesz sobie wskazać dowolne miejsce na mapie - budynek, róg ulicy, kosz na śmieci tylko musi być odpowiednia skala. Chyba że ogólnie nie trafiasz w miasto to musisz sprawdzić współrzędne czy na pewno są ok lub czy na pewno mapa jest w porządku (Ziemia to jajo (na równiku jest dłuższa), więc może musisz wziąć odpowiednią mapę)

0

Kombinowałem z początkiem i końcem dla dwóch punktów było spoko. Po dodaniu większej ilości punktów już kolorowo nie było.
Pomijam fakt iż przy pobieraniu z bazy punktów wyświetla ich się kilka... :/

@OtoKamil: Jak tu wcisnąć skalę ?
Trafiam PI razy drzwi w jednio miasto np. Warszawę (zachodnią część) a dla współrzędnych Krakowa pokazuje mi okolice Okusza.

0
serek napisał(a):

Może to na oko nanieśli?

Nie znam się w sumie, ale jeśli chciałbyś dokładnie to zrobić, to potrzebujesz współrzędne całego boxa (wszystkie 4 rogi mapki). A potem znając współrzędne punktu możesz wyliczyć odległość w jakiej ma się punkt znaleźć.

Cztery rogi to za mało. Trzeba wiedzieć jakiego użyto odwzorowania.

0

INT
ERP
OLA
CJA
zmiennych x i y ze wspolrzednych. interpolacja liniowa to chyba wzor z gimnazjum/podstawowki.

0

Najlepiej iść po najniższej linii oporu... wczytać współrzędne granic a skrypt sobie je wyrysuje i gotowe :D
Za dużo roboty z dopasowywaniem map itd..

Jak ogarnąć ujemne współrzędne ? :)

0

Nie do końca na temat ale nie lepiej byłoby ci użyć https://leafletjs.com/

0
hzmzp napisał(a):

Nie do końca na temat ale nie lepiej byłoby ci użyć https://leafletjs.com/

Leaflet to biblioteka JS a ja potrzebuję obraz .png. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1