Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][GD]Duża grafika (Mapa Świata)
Forum PHP.pl > Forum > Przedszkole
Mike122
Witam posiadam dużą grafikę (Mapa Świata) 1501x751. I Chciałbym na niej umieścić punkty więc używam
imagefilledrectangle" title="Zobacz w manualu PHP" target="_manual i na przykład Wrocław to imagefilledrectangle($im,769, 239, 780, 250, $kolor); a jak zrobić żeby nie musiał ręcznie znajdować punktu biggrin.gif Bo np. będę chciał zaznaczyć coś w Chinach to trochę trudno wpisywać tak mniej więcej (strzelając). Jest jakiś sposób? A następnie później będę chciał połączyć te punkty używając ImageLine" title="Zobacz w manualu PHP" target="_manual. Proszę o pomoc jakieś porady lub coś smile.gif Pozdrawiam
piotrd
przy takich małych rozmiarach mapy i tak każdy punk na mapie wygląda jakby był postawiony mniej więcej (strzelając). tak samo postaw punkcik orientacyjny w chinach.
Mike122
Hmm a jak by zrobić tak wpisuję położenie geograficzne 51° 07' N 17° 02' E a skrypt oblicza że to 769, 239, czy na przykład 34°03''' N 118°14''' i obliczy położenie Los Angeles. Jak to robić oczekuję jakieś porady funkcje czy coś. Proszę o pomoc.

Ktoś mi powie jak policzyć szerokość i długość geograficzną bo robię tak.
  1. <?php
  2. $x = 1501/180; //Szerokość obrazka dzielę przez 180 stopni bo 90 *2;
  3. $x = 34.03 * $x; //Szerokość geograficzna Los Angeles razy 1 stopień z poprzedniego.
  4. $y = 751/360; //Długość obrazka dzielę przez 360 bo 180 *2;
  5. $y = 118.14 * $y; //Długość geograficzną Los Angeles razy 1 stopień z poprzedniego.
  6. imagefilledrectangle($im,$x, $y, $x+5, $y+5, $kolor);
  7. ?>

I liczy ale nie dobrze, bo z obliczeń tego wynika że Los Angeles znajduje się w Kanadzie.
Jak zrobić żeby liczyło poprawnie? Proszę o pomoc.
Cosi*
Zobacz sobie skrypt Mapa na mojej stronie (adres w stopce). Tam jest mapa Polski co prawda, ale odrobina wysiłku, parę obliczeń i masz mapę świata smile.gif
Mike122
~Cosi* dziękuje Ci znów duża podpowiedź z Twojej strony biggrin.gif Co prawda gotowy skrypt ale zbytnio nie wiem jak zastąpić w skrypcie:
  1. <?php
  2. $x = stopnie("34^03'");
  3. $y = stopnie("118^13'");
  4. $x = floor(1501 * ($x - stopnie("14^07'"))/(stopnie("24^09'") - stopnie("14^07'")));
  5. $y = floor(751 * (- ($y - stopnie("49^"))/(stopnie("54^50'") - stopnie("49^"))));
  6. ?>

Jakimi szerokościami zastąpić:
- 14^07';
- 24^09';
i wysokości:
- 49^;
54^50';
Jakieś podpowiedzi jak to policzyłeś sadsmiley02.gif
Cosi*
Pomyśl smile.gif
Świat ma 360 stopni wszerz i 180 stopni wzwyż. Te wartości w moim skrypcie to są - jak się pewnie domyśliłeś - skrajne punkty Polski. W Twoim przypadku granice to będzie pewnie +/- 180 stopni wszerz i +/- 90 stopni wzwyż (jeżeli używasz mapy w odwzorowaniu Mercatora).
W ogóle radzę Ci nie korzystać z całego skryptu, tylko wyciągnąć z niego przydatne funkcje (na pewno tą przekształcającą stopnie na piksele). No i wal jak będą problemy smile.gif
Mike122
Wyciągnąłem przydatne funkcje:] Czyli stopnie();
A próbowałem już rożnych metod z 360 i 180 dry.gif
  1. <?php
  2. $x = stopnie("34^03'");
  3. $y = stopnie("118^13'");
  4. $x = floor(1501 * ($x - stopnie("0^"))/(stopnie("90^") - stopnie("0^")));
  5. $y = floor(751 * (- ($y - stopnie("0^"))/(stopnie("180^") - stopnie("0^"))));
  6. imagefilledrectangle($im,$x, $y, $x+40, $y+40, $kolor);
  7. ?>


czy

  1. <?php
  2. $x = stopnie("34^03'");
  3. $y = stopnie("118^13'");
  4. $x = floor(1501 * ($x - stopnie("90^"))/(stopnie("180^") - stopnie("90^")));
  5. $y = floor(751 * (- ($y - stopnie("180^"))/(stopnie("360^") - stopnie("180^"))));
  6. imagefilledrectangle($im,$x, $y, $x+40, $y+40, $kolor);
  7. ?>


czy

  1. <?php
  2. $x = stopnie("34^03'");
  3. $y = stopnie("118^13'");
  4. $x = floor(1501 * ($x - stopnie("90^"))/(stopnie("180^") - stopnie("90^")));
  5. $y = floor(751 * (- ($y - stopnie("180^"))/(stopnie("360^") - stopnie("180^"))));
  6. imagefilledrectangle($im,$x, $y, $x+40, $y+40, $kolor);
  7. ?>

Ale coś źle robię ohmy.gif
Cosi*
Weź pod uwagę, że masz zakres od minus 180 do 180, czyli musisz "przesunąć" zakres o 180 stopni. Więcej Ci nie mogę podpowiedzieć, bo coś mi dzisiaj nie idzie skomplikowane myślenie winksmiley.jpg
Mike122
Hmm jak by powiedzieć chyb jestem za bardzo ciemny.
~Cosi* kombinuję coś z tym ale ciągle źle wychodzi. blinksmiley.gif
Widać że geografia nie moją mocna strona dry.gif
Cosi*
Hehe, ja też nie lubiłem geografii... Ale to jest matematyka smile.gif
Układasz sobie taką proporcję:
-180^ to 0px
180^ to 1501px
x^ to Xpx

czyli:
(X - 0) / (1501 - 0) = (x^ - (-180^)) / (180^ - (-180^))

i wychodzi nam:
X = 1501 * (x^ + 180^) / 360^

Voila. Teraz ułóż taką proporcję dla Y smile.gif
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.