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 ?
a masz jakiekolwiek punkty odniesienia na tej mapie?
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 :)
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źć.
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....
Weź pokaż jakiś kod, który napisałeś.
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.
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);
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 ?
Może masz niedokładnie podany punkt początkowy i końcowy? Albo mapka nie ma dobrej skali^^
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ę)
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.
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.
zobacz to https://darekk.com/UTM/ i to https://darekk.com/UTM/UTM-mapa-Polski.htm i to http://www.asgeupos.pl/index.php?wpg_type=tech_rf&sub=pswg92 no i powinieneś zacząć od https://www.google.pl/search?q=mapa+polski+z+siatką+współrzędnych
INT
ERP
OLA
CJA
zmiennych x i y ze wspolrzednych. interpolacja liniowa to chyba wzor z gimnazjum/podstawowki.
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 ? :)
Nie do końca na temat ale nie lepiej byłoby ci użyć https://leafletjs.com/
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
. ;)