Koodi näyttää kartan, jota klikkailemalla voi piirtää kartalle reitin, jonka pituuden koodi sitten laskee pikseleinä Pythagoraan lauseen avulla. Lisäksi käyttäjä voi syöttää mittakaavan jolla saatu pituus muutetaan metreiksi. Laitoin koodin myös mureakuha.comiin.
Testata voi osoitteessa http://koti.mbnet.fi/dredge/route.php
<?PHP // Karttapohjana käytettävä kuva. Voi olla myös URL. $kuva = "kartta.gif"; // Otin marginit pois että rastien sijoittelu // kartalle olisi helpompaa. print "<html><body topmargin=0 leftmargin=0>"; // Etsitään post-ympäristömuuttujista kaikki // c-alkuiset, eli tässä koodissa kaikki aiempia // koordinaatteja ilmaisevat, ja sijoitetaan // ne omiin taulukoihinsa. foreach($_POST as $name => $mail) { if(substr($name, 0, 1) == "c") { $crds = explode(":", $mail); $x[] = $crds[0]; $y[] = $crds[1]; } } // Jos käyttäjä on päätynyt sivulle klikkaamalla // karttaa, sijoitetaan klikkauksen koordinaatit // oikeiden taulukoiden loppuun. if((isset($_POST['m_x']))&&(isset($_POST['m_y']))) { $x[] = $_POST['m_x']; $y[] = $_POST['m_y']; } // Näytetään kuvan koko, jotta käyttäjän olisi // helpompi(?) selvittää kuvan mittakaava. $kuvax = getimagesize($kuva); $width = $kuvax[0]; $height = $kuvax[1]; // Aloitetaan formi ja näytetään pohjana oleva kuva. // Mittakaava, jolla lasketaan pituus metreinä. print "<form method='post' action='?'>"; print "<input type=image src=\"".$kuva."\" name=m>"; print "<br>Kartan leveys on ".$width." ja korkeus ".$height; print "<br>Mittakaava: <input type=text size=4 name=mk_px value=\"".$_POST['mk_px']."\">px = "; print "<input type=text size=4 name=mk_m value=\"".$_POST['mk_m']."\">m"; // Jos käyttäjä on aikaisemmin klikkaillut kuvaa // tehdään aiemmista koordinaateista pieniä rasteja // kartalle ja piilotettuja taulukkokenttiä, jotta // sivu voisi lähettää ne jälleen itselleen postilla. if((isset($x[0]))&&(isset($y[0]))) { for($i=0;$i<sizeof($x);$i++) { // Korotetaan kartalla näkyviä numeroita yhdellä. // Mielummin 123 kuin 012. $j = $i+1; // Rasteja pitää siirtää 2 px vasemmalle ja ylös, // koska rastin koko on 5*5px. Näin keskikohta // saadaan oikeaan paikkaan. $left = $x[$i] - 2; $top = $y[$i] - 2; print "<div style=\"position: absolute; left: ".$left.";"; print "top: ".$top."; font-size: 10; font-family: Tahoma\">"; print "<img src=risti.gif align=top>$j</div>"; print "<input type=hidden name=c".$i." value=\"".$x[$i].":".$y[$i]."\">"; } } // Kun reitissä on vähintään 2 pistettä, näytetään // nappula, jota painamalla reitin pituus lasketaan. if(sizeof($x)>1) { print "<br><input type=submit name=submit value=\"Laske reitin pituus\"> "; } // Jos käyttäjä halusi laskea reitin pituuden, // laskemme sen yksi väli kerrallaan käyttäen // pythagoraan lausetta. // (Tehdään suorakulmainen kolmio laskemalla peräkkäisten // pisteiden x-koordinaattien ja y-koordinaattien erotukset // ja siitä pythagoraan lauseella hypotenuusa, eli // pisteiden välinen matka) if($_POST['submit']) { for($n=0;$n<sizeof($x)-1;$n++) { if($x[$n] < $x[$n+1]) { $xx = $x[$n+1] - $x[$n]; } else { $xx = $x[$n] - $x[$n+1]; } if($y[$n] < $y[$n+1]) { $yy = $y[$n+1] - $y[$n]; } else { $yy = $y[$n] - $y[$n+1]; } $tulos += sqrt(($xx*$xx)+($yy*$yy)); } // Lasketaan mittakaavan avulla pituus metreinä. if((isset($_POST['mk_px']))&&(isset($_POST['mk_m']))) { $tulos2 = $_POST['mk_m'] / $_POST['mk_px'] * $tulos; $tulos2 = round($tulos2, 2); } else { $tulos2 = "?"; } // Pyöristetään snadisti ja syljetään tulos ulos. $tulos = round($tulos, 2); print "Reitin pituus: ".$tulos."px = <b>".$tulos2."m</b>"; } // Tehdään vielä linkki jolla koko homman voi aloittaa alusta. print "</form><a href='?restart'>Restart</a></body></html>"; ?>
Hemmetin hieno on :)
Varmasti joku saa tuosta mahtavan karttaskriptin sivuillensa kunhan vähän muokkaa omaan käyttöönsä.
iha siisti, mut noi hidden inputtien tiedot vois tunkee vaikka kekseihin tai sessioneihin.
Ei mitään keksejä.. istunnot on ihan ok.
no keksit on ainakin parempi tapa ku miljoona inputtia :)
keksit on huonoja.. istunnot ei vaadi käyttäjältä paljonkaan tukea
Todella hieno! mut sit vaa pari muutaki kaupunkia kun tampere :D
On ihan kätevä ja varmaan hyvä ku tulis muitakin kaupunkeja :)
esimerkkisivussa ei näy karttaa...
Aihe on jo aika vanha, joten et voi enää vastata siihen.