Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [google maps] odcztytywanie kliniętego obszaru
waldemi
post
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 5.03.2007
Skąd: Leszno

Ostrzeżenie: (0%)
-----


Witam
Potrzebuję zrobić w Google Maps następującą rzecz: na mapie zdefiniowanie są jakieś obszary (Polygone), które nie zachodzą na siebie. Współrzędne wierzchołków zapisane są w bazie danych, każdy z obszarów ma swój identyfikator. Teraz potrzebuję zrobić coś takiego że po kliknięciu na mapę skrypt odczyta współrzędne klikniętego miejsca a następnie z bazy odczyta ID obszaru na którym klinięto.
Czy jest to do zrobienia? Kiedyś widziałem coś takiego na jakiejś stronie ale teraz nie umiem tego znaleźć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
lukasz1985
post
Post #2





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Tak, to możliwe, pod warunkiem, że każdy obszar na mapie ma odpowiednie id do tego w bazie.


http://jsfiddle.net/5j4WN/1/

Go to the top of the page
+Quote Post
Mega_88
post
Post #3





Grupa: Zarejestrowani
Postów: 360
Pomógł: 34
Dołączył: 20.08.2011

Ostrzeżenie: (0%)
-----


Cytat(waldemi @ 15.10.2012, 18:53:15 ) *
Kiedyś widziałem coś takiego na jakiejś stronie ale teraz nie umiem tego znaleźć.


Zobacz tutaj, przykład pierwszy: http://gmapsapi.com/poradnik/106_zdarzenia.html?tag=apiv3
Go to the top of the page
+Quote Post
waldemi
post
Post #4





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 5.03.2007
Skąd: Leszno

Ostrzeżenie: (0%)
-----


Cytat(Mega_88 @ 16.10.2012, 09:25:51 ) *

Tak, znam to bo z tego kursu się uczyłem. Umiem pobrać współrzędne klikniętego punktu. Chodzi o to żeby przeszukać bazę danych i sprawdzić na którym obszarze się one znajdują (po załadowaniu mapy żadne obszary nie są wyświetlane), następnie ID tego obszaru ma być przekazane do dalszej "obróbki" a obszar ma być wyświetlony na mapie.
Go to the top of the page
+Quote Post
lukasz1985
post
Post #5





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


To jest droga naokoło, jeśli chcesz przetwarzać punkt i obszar po stronie serwera. Do tego służy GMaps Api.
Można zrobić tak, że przy załadowaniu strony wczytywane są wierzchołki przez JSON do JS i na ich podstawie wyświetlane są przezroczyste obszary (alpha:0), każdy obszar ma już przypisane ID, pobrane również z bazy.

Po kliknięciu w obszar, jego alpha zmienia się na 1 - obszar się pojawia na mapie
lub jeśli po kliknięciu potrzebne jest zapytanie na serwer - wysyłane są dane przez Ajax np z numerem ID, po stronie serwera wykonuje się skrypt i w momencie wykonania, po otrzymaniu odpowiedzi z serwera, klientowi zostaje wyświetlony ten obszar - dopiero po otrzymaniu odpowiedzi serera, alpha obszaru zmienia się na 1.

Jeśli interesuje Cię dalsza pomoc, proszę o dookreślenie jakie operacje mają być wykonywane.
Go to the top of the page
+Quote Post
waldemi
post
Post #6





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 5.03.2007
Skąd: Leszno

Ostrzeżenie: (0%)
-----


Tak, to by było właśnie to. Niestety nie znam GMaps API na tyle żeby to samemu rozpracować. Możesz podać jakieś przykłady? Jakiś przykładowy skrypt?
Go to the top of the page
+Quote Post
lukasz1985
post
Post #7





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Najprostsze rozwiązanie jakie widzę, to tak, że serwer wyrzuca obszary oraz ich id przy starcie strony.
Przechwytuje jest JavaScript. Najlepiej wszystko zrobić w formacie JSON.

Napisałem prostą klasę, która może wiele sprostować:

cały kod i demo znajduje się na jsfiddle: http://jsfiddle.net/GDM64/

Obsługa zdarzeń znajduje się w kodzie, można tam dopisać co się ma stać dalej po kliknięciu, jeśli chcesz użyć AJAX.

Myślę, że obszar powinien być wyświetlany od razu po kliknięciu, a nie dopiero po otrzymaniu odpowiedzi z serwera, ponieważ zwłoka może zaskoczyć użytkownika.

Kodu po stronie serwera nie pisałem lecz jeśli będziesz go potrzebował, mogę coś napisać.



  1. <!DOCTYPE html>
  2. <head>
  3. <title>Google Maps JavaScript API v3 Example: Map Simple</title>
  4. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
  5. <meta charset="utf-8">
  6. html, body, #map_canvas {
  7. margin: 0;
  8. padding: 0;
  9. height: 100%;
  10. }
  11. </style>
  12. <script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
  13.  
  14.  
  15. function Obszary () {
  16.  
  17. // zmienna 'self' trzymająca referencje do instancji - widoczna w całym kodzie klasy
  18. var self = this;
  19.  
  20. var ukryty = {
  21. strokeOpacity: 0,
  22. fillOpacity: 0
  23. }
  24. var widoczny = {
  25. strokeOpacity: 0.5,
  26. fillOpacity: 0.5
  27. }
  28. //// tablica obszarów, do której będą dodawane instancje google.maps.Polygon
  29. this.obszary = []
  30. // funkcja odpowiadająca za ukrycie obszarow na mapie
  31. this.ukryjObszary = function () {
  32. var iter = 0;
  33. for (iter = 0; iter < this.obszary.length; iter++) {
  34. var obszar = this.obszary[iter];
  35. obszar.setOptions(ukryty)
  36.  
  37. }
  38. }
  39.  
  40. // funkcja odpowiadająca za podświetlenie obszaru
  41. this.podswietlObszar = function (obszar) {
  42. obszar.setOptions(widoczny)
  43. }
  44. // funkcja zawierająca kod wykonywany po kliknięciu w obszar, przyjmuje kliknięty
  45. // obszar za argument
  46. this.klikniecie = function (obszar) {
  47. this.ukryjObszary()
  48. this.podswietlObszar(obszar);
  49.  
  50. var id = obszar.id
  51. console.log(obszar.id)
  52.  
  53. }
  54. // funkcja odpowiadająca za dodanie obszaru do mapy w stanie ukrytym oraz przypisanie zdarzenia
  55. // wywoływanego podczas kliknięcia w obszar
  56. this.dodajObszar = function (wierzcholki, id) {
  57. var alpha = 0;
  58. var color = "#ffffff";
  59. var nowyObszar = new google.maps.Polygon({
  60. paths: wierzcholki,
  61. strokeColor: color,
  62. fillColor: color,
  63. strokeOpacity: alpha,
  64. fillOpacity: alpha
  65. })
  66. nowyObszar.id = id;
  67. nowyObszar.setMap(map)
  68.  
  69.  
  70. google.maps.event.addListener(nowyObszar, 'click', function (event) {
  71. self.klikniecie(nowyObszar);
  72. })
  73. this.obszary.push(nowyObszar)
  74. }
  75. }
  76.  
  77. var map;
  78. function initialize() {
  79. var mapOptions = {
  80. zoom: 8,
  81. center: new google.maps.LatLng(-32.23052345157306, 153.43452734375),
  82. mapTypeId: google.maps.MapTypeId.ROADMAP
  83. };
  84. map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions);
  85.  
  86.  
  87.  
  88.  
  89. obszary = new Obszary();
  90.  
  91.  
  92. // Dodanie kwadratowych obszarów do mapy w celach demonstracyjnych
  93. // W rzeczywistości, jeśli dane mają pochodzić z bazy danych to najlepiej
  94. // dodać je przez np w PHP: json_encode() i przechwycić w javascript przez
  95. // JSON.parse() - przy pomocy jakiejś biblioteki lub po prostu biblioteki JSON
  96. // [url="https://github.com/douglascrockford/JSON-js"]https://github.com/douglascrockford/JSON-js[/url]
  97.  
  98. var iter;
  99. for (iter = 0; iter < 7; iter++) {
  100. var iterIter
  101. for (iterIter = 0; iterIter < 5; iterIter++) {
  102. var x = iter
  103. var y = iterIter
  104. var id = iter * iterIter;
  105.  
  106. var wierzcholki = [
  107. new google.maps.LatLng(-34 + y, 150 + x),
  108. new google.maps.LatLng(-35 + y, 150 + x),
  109. new google.maps.LatLng(-35 + y, 151 + x),
  110. new google.maps.LatLng(-34 + y, 151 + x),
  111. new google.maps.LatLng(-34 + y, 150 + x),
  112. ];
  113.  
  114. obszary.dodajObszar(wierzcholki, id)
  115. }
  116.  
  117. }
  118.  
  119.  
  120. // Construct the polygon
  121. // Note that we don't specify an array or arrays, but instead just
  122. // a simple array of LatLngs in the paths property
  123. // bermudaTriangle = new google.maps.Polygon({
  124. // paths: triangleCoords,
  125. // strokeColor: "#FF0000",
  126. // strokeOpacity: 0.0,
  127. // strokeWeight: 2,
  128. // fillColor: "#FF0000",
  129. // fillOpacity: 0.1
  130. //
  131. // });
  132. //
  133. // bermudaTriangle.setMap(map);
  134. }
  135. google.maps.event.addDomListener(window, 'load', initialize);
  136. </script>
  137. </head>
  138. <body>
  139. <div id="map_canvas"></div>
  140. </body>
  141. </html>


Ten post edytował lukasz1985 23.10.2012, 11:30:11
Go to the top of the page
+Quote Post
waldemi
post
Post #8





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 5.03.2007
Skąd: Leszno

Ostrzeżenie: (0%)
-----


Wielkie dzięki, chyba właśnie o to mi chodziło. Spróbuję to teraz dopasować do swojej strony.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 20:48