Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: nanoszenie punktów na mape
Forum PHP.pl > Forum > PHP
karolski
Problem jest nastepujacy mam punkty okreslone geograficznie poprrzez wspolzedne np:

name | lat | deg | min | sec | lon | deg | min | sec
punkt | 54,54167 | 54 | 32,000 | 30,00 | 18,77000 | 18 | 46,000 | 12,00

lat to jest wysokosc geograficzna po przeliczeniu
lon to jest dlugosc geograficzna po przeliczeniu

dla przykladu ten punkt ma byc naniesiony na ta mape

jak wiadomo funkcje rysowania na obrazku punktu w php wymagaja podnia polozenia w pixelach wzgledem x y i teraz mam problem jak to przeniesc na ta mape, jest oan wyskalowana ale dalej nie mam pojecia jak to zrobic
thornag
Sprawdzic rozpietosc geograficzna tego obszaru, i jego wymiary w pixelach.
Pozniej mamy prosta proporcje.

x = (dlugoscgeograficznapunktu * dlugoscwpixelachobrazka) / dlugoscgeograficznaobrazka. I mamy dlugosc w pikselach.

  1. <?php
  2.  
  3. $geoX = 50 // obrazek jest np od 1 stopnia do 51 czyli ma 50 :)
  4. $geoY = 50 // to samo co wyzej tylko ze szerokosc
  5. $pixX = 1000 // Obrazek ma 1000pixeli dlugosci
  6. $pixY = 1000 // Obrazek ma 1000pixeli wusokosci
  7.  
  8. $pointGeoX = 25,2 // ilosc stopni dlugosci szukanego punktu
  9.  
  10. $pointPixX = ($pixX * $pointGeoX) / $geoX;
  11.  
  12. ?>
karolski
wlasnie testuej twoje rozwiaznaie i cos mi nei wychodzi oto link:
http://karol.attu.pl/_mapa/gfx.php
a oto liting tego pliku:
  1. <?php
  2. $filename = 'mapa2.png';
  3. header('Content-type: image/png');
  4.  
  5. $geox = 3.66667; // szerokosc tak jak pisales
  6. $geoy = 1.16667; // dugosc tak jak pisales
  7. $pixx = 800; // dlugosc obrazka
  8. $pixy = 567; // szerokosc obrazka
  9.  
  10. // punkt powinien sie pojawic prawie na przecieciu tych lini na obrazku
  11. $pointGeox = 18; // szerokosc punktu
  12. $pointGeoy = 55; // dlugosc punktu 
  13.  
  14. // przeliczanie
  15. $pointPixx = ($geox * $pointGeox) / $pixx;
  16. $pointPixy = ($geoy * $pointGeoy) / $pixy;
  17.  
  18. $source = imagecreatefrompng($filename);
  19. $bialy=ImageColorAllocate($source, 158,131,73);
  20.  
  21. imagefilledarc($source, $pointPixx,$pointPixy, 10, 10, 0, 360, $bialy, IMG_ARC_PIE);
  22.  
  23. ImageString($source,4,10,10,"x:$pointPixx y:$pointPixy",$bialy);
  24. ImagePng($source);
  25. ImageDestroy($source);
  26. ?>

jak widac na obrazku cos jest nie tak
legorek
Trzeba chyba wziąć jeszcze poprawkę na odwzorowanie kartograficzne, bo inaczej zawsze bedziesz mial kilka pikseli błędu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.