Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript]Dostęp do tablicy PHP z poziomu JavaScript
Forum PHP.pl > Forum > Przedszkole
wachcio
Próbuję swoich sił w PHP i JS. Ze zlepku znalezionych przykładów w sieci powstała prosta stronka która pomaga mi w moim innym zainteresowaniu - budowaniu systemów antenowych RTV. Mianowicie po podaniu miejsca instalacji anteny skrypty obliczają dystans do nadajników w linii prostej. Strona znajduje się pod adresem link Chciałem rozbudować ją o możliwość wyświetlania najbliższych nadajników do określonego dystansu lub sortować ich listę od najbliższego do najdalszego, wyświetlić link do bliższych informacji znajdujących się na stronie Radio Polska, link do pozycji na mapie Google i może nawet profilu terenu udostępnianego również przez Google.
Skrypt strony to:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
  4. <head>
  5. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  6. <title>Obliczanie odległości do nadajników RTV</title>
  7. <script src="http://maps.google.com/maps?file=api&sensor=false&v=2&key=ABQIAAAA9G2ojpPtftQwVvAIIn2KMRRhPQ6NZkrcjP3dxOkFiWTuGHXYrxRxNm8qf05aLYVM
    sQQlw59-3fTUFg" type="text/javascript"></script>
  8.  
  9. <!-- <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA7j_Q-rshuWkc8HyFI4V2HxQYPm-xtd00hTQOC0OXpAMO40FHAxT29dNBGfxqMPq5zwdeiDSHEPL89A" type="text/javascript"></script> -->
  10.  
  11.  
  12. <!-- According to the Google Maps API Terms of Service you are required display a Google map when using the Google Maps API. see: http://code.google.com/apis/maps/terms.html -->
  13. <?php
  14. $tabl = array();
  15. $uchwyt = fopen ("nadajniki.csv","r");
  16. while (($data = fgetcsv($uchwyt, 1000, ";")) !== FALSE) {
  17. $tabl[] = $data;
  18. }
  19. fclose ($uchwyt);
  20. ?>
  21. <script type="text/javascript">
  22.  
  23. var geocoder, location1, location2;
  24.  
  25. function initialize() {
  26. geocoder = new GClientGeocoder();
  27. }
  28.  
  29. function showLocation() {
  30. geocoder.getLocations(document.forms[0].address1.value, function (response) {
  31. if (!response || response.Status.code != 200)
  32. {
  33. alert("Przepraszam ale nie potrafię znaleźć pierwszego adresu.");
  34. }
  35. else
  36. {
  37. location1 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
  38. geocoder.getLocations(document.forms[0].address2.value, function (response) {
  39. if (!response || response.Status.code != 200)
  40. {
  41. alert("Przepraszam ale nie potrafię znaleźć drugiego adresu.");
  42. }
  43. else
  44. {
  45. location2 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
  46. calculateDistance();
  47. }
  48. });
  49. }
  50. });
  51. }
  52.  
  53. function calculateDistance()
  54. {
  55. try
  56. {
  57. var glatlng1 = new GLatLng(location1.lat, location1.lon);
  58. var glatlng2 = new GLatLng(location2.lat, location2.lon);
  59. var miledistance = glatlng1.distanceFrom(glatlng2, 3959).toFixed(1);
  60. var kmdistance = (miledistance * 1.609344).toFixed(1);
  61.  
  62. document.getElementById('results').innerHTML = '<strong>Adres 1: </strong>' + location1.address + '<br /><strong>Adres 2: </strong>' + location2.address + '<br /><strong>Dystans: </strong>' + kmdistance + ' kilometrów (lub ' + miledistance + ' mil)';
  63. }
  64. catch (error)
  65. {
  66. alert(error);
  67. }
  68. }
  69.  
  70. </script>
  71.  
  72. </head>
  73.  
  74. <body onload="initialize()">
  75.  
  76. <form action="#" onsubmit="showLocation(); return false;">
  77. <p>
  78. <input type="text" name="address1" value="" class="address_input" size="40" />
  79. <select name="address2" class="address_input" size="1">
  80. <?
  81. $x=0;
  82. while($x <= count($tabl))
  83. {
  84. echo '<option value="' .$tabl[$x][0]. '">' .$tabl[$x][1]. '</option>';
  85.  
  86. $x++;
  87.  
  88. }
  89. ?>
  90.  
  91.  
  92. <br />
  93. </select>
  94.  
  95. <input type="submit" name="find" value="Oblicz" />
  96. </p>
  97. </form>
  98. <p id="results"></p>
  99. <?
  100.  
  101. ?>
  102. </body>
  103. </html>


Pobiera on dane z pliku csv o strukturze: pozycja geograficzna;nazwa nadajnika;link do opisu
"49.85 19.33333;Andrychow;http://radiopolska.pl/wykaz/pokaz_lokalizacja.php?pid=601
49.89583 19.3625;Andrychow *Wieprz*;http://radiopolska.pl/wykaz/pokaz_lokalizacja.php?pid=316"

Niestety utknąłem w miejscu gdzie muszę przesłać dane pomiędzy PHP i JS aby obliczyć odległości od miejsca montażu anteny do wszystkich nadajników oraz zapisać je do tablicy PHP oraz posortować je według odległości.
Jak rozwiązać mój problem? Z góry dziękuję za wszystkie podpowiedzi.


EDIT:

Znalazłem rozwiązanie gdzieś w necie przesyłania tablic z PHP do JS

  1. <script TYPE="text/javascript">
  2. var tabl = eval(<?php echo json_encode($tabl)?>);
elmozaur
w sumie jak danych bedzie duzo to w kodzie zrobi sie syf i strona bedzie ciezka. Gdybym mial czas to zrobilbym to na ajaxie

edit:
jest jeszcze cos takiego http://phpjs.org/pages/home to sa funkcje php w JSie moze sie przyda
#luq
@wachcio tylko nie z eval! Po co on tam?

Wystarczy
  1. var tab1 = <?=json_encode($tab1)?>;
wachcio
#luq dlatego, że taki przykład znalazłem... Twój też działa. Jaka jest różnica z i bez "eval".

Kod dodany i strona działa jak powinna link. Teraz muszę wymyślić jak najlepiej - najszybciej. Obliczyć najbliższe nadajniki i posortować tabelę aby móc wyświetlić wyniki np. 50 km od miejsca podanego przez użytkownika.

No i niestety nie działa tak jak powinna. Niby współrzędne pobiera z listy ale Google nie wiadomo czemu znajduje sobie jakiś upatrzony bliski punkt i liczy według niego. Na mapie zaznacza dwa punkty. Ten do którego liczy (czerwony) i do którego powinien (zielony). Co może być grane?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
  4. <head>
  5. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  6. <title>Obliczanie odległości do nadajników RTV</title>
  7. <script src="http://maps.google.com/maps?file=api&amp;sensor=false&amp;v=2&amp;key=ABQIAAAA9G2ojpPtftQwVvAIIn2KMRRhPQ6NZkrcjP3dxOkFiWTuGHXYrxRxNm8qf05a
    LYVMsQQlw59-3fTUFg" type="text/javascript"></script>
  8.  
  9. <!-- <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA7j_Q-rshuWkc8HyFI4V2HxQYPm-xtd00hTQOC0OXpAMO40FHAxT29dNBGfxqMPq5zwdeiDSHEPL89A" type="text/javascript"></script> -->
  10.  
  11.  
  12. <!-- According to the Google Maps API Terms of Service you are required display a Google map when using the Google Maps API. see: <a href="http://code.google.com/apis/maps/terms.html" target="_blank">http://code.google.com/apis/maps/terms.html</a> -->
  13. <?php
  14.  
  15.  
  16. $tabl = array();
  17. $uchwyt = fopen ("nadajniki.csv","r");
  18. while (($data = fgetcsv($uchwyt, 1000, ";")) !== FALSE) {
  19. $tabl[] = $data;
  20. }
  21. fclose ($uchwyt);
  22.  
  23.  
  24. ?>
  25. <script TYPE="text/javascript">
  26. var tabl = <?php echo json_encode($tabl)?>;
  27.  
  28. </SCRIPT>
  29.  
  30. <script type="text/javascript">
  31.  
  32. var geocoder, location1, location2;
  33.  
  34. function initialize() {
  35. geocoder = new GClientGeocoder();
  36. }
  37.  
  38. function showLocation() {
  39. geocoder.getLocations(document.forms[0].address1.value, function (response) {
  40. if (!response || response.Status.code != 200)
  41. {
  42. alert("Przepraszam ale nie potrafię znaleĽć pierwszego adresu.");
  43. }
  44. else
  45. {
  46. location1 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
  47. geocoder.getLocations(document.forms[0].address2.value, function (response) {
  48. if (!response || response.Status.code != 200)
  49. {
  50. alert("Przepraszam ale nie potrafię znaleĽć drugiego adresu.");
  51. }
  52. else
  53. {
  54. location2 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
  55.  
  56.  
  57. calculateDistance();
  58. }
  59. });
  60. }
  61. });
  62. }
  63.  
  64. function calculateDistance()
  65. {
  66. try
  67. {
  68. var zaznaczony_nadajnik = document.forms[0].address2.selectedIndex;
  69. var glatlng1 = new GLatLng(location1.lat, location1.lon);
  70. var glatlng2 = new GLatLng(location2.lat, location2.lon);
  71. var miledistance = glatlng1.distanceFrom(glatlng2, 3959).toFixed(1);
  72. var kmdistance = (miledistance * 1.609344).toFixed(1);
  73.  
  74.  
  75. document.getElementById('results').innerHTML = '<strong>Adres 1: </strong>' + location1.address + ' (' + location1.lat + ',' + location1.lon + ')<br /><strong>Adres 2: </strong>' + location2.address + ' &nbsp;&nbsp;&nbsp;&nbsp;Liczy do (' + location2.lat + ',' + location2.lon + ') a powinien do ' +tabl[zaznaczony_nadajnik][0]+ ' <br /><strong>Dystans: </strong>' + kmdistance + ' kilometrów (lub ' + miledistance + ' mil) <br /><a href=http://radiopolska.pl/wykaz/pokaz_lokalizacja.php?pid=' +tabl[zaznaczony_nadajnik][2]+ ' target="radiopolska" title="Zobacz więcej informacji o nadajniku">Zobacz więcej informacji o tym nadajniku na RadioPolska</a><br /><br /><iframe width="425" height="425" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.pl/maps?f=q&amp;source=s_q&amp;hl=pl&amp;q=' +tabl[zaznaczony_nadajnik][0]+ '&amp;markers=' +tabl[zaznaczony_nadajnik][0]+ '&amp;center=' +tabl[zaznaczony_nadajnik][0]+ '&amp;ie=UTF8&amp;output=embed"></iframe><br /><small><a href="http://maps.google.pl/maps?f=q&amp;source=embed&amp;hl=pl&amp;q=' +tabl[zaznaczony_nadajnik][0]+ '&amp;ll=' +tabl[zaznaczony_nadajnik][0]+ '&amp;markers=' +tabl[zaznaczony_nadajnik][0]+ '&amp;ie=UTF8&amp" style="color:#0000FF;text-align:left">Wyświetl większą mapę</a></small>' ;
  76.  
  77.  
  78.  
  79. }
  80. catch (error)
  81. {
  82. alert(error);
  83. }
  84. }
  85.  
  86. </script>
  87.  
  88.  
  89. </head>
  90.  
  91. <body onload="initialize()">
  92.  
  93. <form action="#" onsubmit="showLocation(); return false;">
  94. <p>
  95. <input type="text" name="address1" value="" class="address_input" size="40" />
  96. <select name="address2" class="address_input" size="1">
  97. <?
  98. $x=0;
  99. while($x < count($tabl))
  100. {
  101. echo '<option value="' .$tabl[$x][0]. '">' .$tabl[$x][1]. '</option>';
  102.  
  103. $x++;
  104.  
  105. }
  106. ?>
  107.  
  108.  
  109. <br />
  110. </select>
  111.  
  112. <input type="submit" name="find" value="Oblicz" />
  113. </p>
  114. </form>
  115. <p id="results"></p>
  116.  
  117. </body>
  118. </html>
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.