Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]GoogleMaps - problem z markerem
Forum PHP.pl > Forum > Przedszkole
northwest
Witam,
Mam problem ze zmianą ikonki w GoogleMaps markera.
Mam następujące pliki:
index.php:
<code>
<title></title>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=....." type="text/javascript"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="maps.js"></script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 600px; height: 600px"></div>
</body>
</code>

Plik maps.js:
<code>
var map = null;
var refreshTime = 100;
var prevData = null;


function load()
{
if (GBrowserIsCompatible())
{
map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(1, 1), 6);
map.addControl(new GSmallMapControl());
reloadPoints();
} }

function loadPointData()
{
$.get('points.php', null, addPoints);
}

function addPoints(data)
{
if (prevData != data || data == null)
{
prevData = data;
eval("points = ("+data+")");
pointsCount = points.length;
map.clearOverlays();
for (var i=0; i<pointsCount; i++)
{

var point = new GLatLng(points[i]['lat'],points[i]['lng']);
map.addOverlay(createMarker(point,points[i]['satellite']));
var label = new ELabel(new GLatLng(points[i]['lat'],points[i]['lng']), '<div style="background-color:#ccccff;border:2px solid black"><small>Jestemsamochodzik1</small></div>', null, new GSize(6,-30), 75);

map.addOverlay(label);


map.setCenter(point, 13);
}
}
}

function createMarker(point, satellite, data)
{
var icon = new GIcon();
icon.image = "http://maps.google.com/mapfiles/kml/pal2/icon47.png";
icon.shadow = "points[i]['shadow']";
icon.iconAnchor = new GPoint(6, 20);
icon.infoWindowAnchor = new GPoint(5, 1);
var marker = new GMarker(point, icon);
marker.value = satellite;
GEvent.addListener(marker, "click", function(){
var myHtml = satellite;
map.openInfoWindowHtml(point, myHtml);
});
return marker;
}

function reloadPoints()
{
loadPointData();
setTimeout(reloadPoints,refreshTime);
}
</code>

i plik:
points.php (który generuje dane dla mapy):
[{"lat":"53.1692","lng":"18.9787","satellite":"11 ","shadow":"http://maps.google.com/mapfiles/kml/pal2/icon47.png"}]

Problem w tym że współrzędne skrypt łyka bez problemu i nanosi na mapę, ale za to cienia markera (shadow) nie chce:/ na mapie nie wyświetla mi cienia :/

Wiecie może co mam źle??
sowiq
Ja bym obstawiał taki sam obrazek cienia i markera smile.gif
northwest
cień powinien siedzieć w tym: points[i]['shadow'] - nie??smile.gif
a skrpyt go nie widzi i nie wyświetla;/
sowiq
Chodziło mi o to, że obrazek cienia i markera jest taki sam, dlatego możesz po prostu nie widzieć tego cienia, mimo tego, że jest.

Wiesz, ja to robiłem trochę inaczej: http://web4you.com.pl/6.html
northwest
hmmm.. zmieniłem obrazki i jest ten sam problem...
Jak wpisze statycznie adresy obrazków to jest okey, tak jakby skrypt nie widział zmiennej od Cienia...:/
sowiq
Kod
function createMarker(point, satellite, data){
[...]
icon.shadow = "points[i]['shadow']";
[...]


Nie
Kod
icon.shadow = "points[i]['shadow']";


tylko
Kod
icon.shadow = point[i]['shadow'];
winksmiley.jpg
northwest
jak jest bez cudzysłowowa to nie działa nanoszenie punktu w ogóle ://
sowiq
Dziwię się, że Ci to w ogóle działało.

Deklarujesz funkcję
Kod
function createMarker(point, satellite, data)


a potem wywołujesz ją:
Kod
createMarker(point,points[i]['satellite'])
//linijka: map.addOverlay(createMarker(point,points[i]['satellite']));

Zwróć uwagę na ilość argumentów - nie zgadza się.

Polecam zaopatrzyć się w Firefoxa i Firebug'a/Console^2.

A co do tych cudzyszłowów - jeśli ich użyjesz, wstawisz do zmiennej wartość "points[i]['shadow']" (jako tekst), a nie zawartość pola 'shadow' tablicy 'points[i]'.

[edit]
Zamień
Kod
function createMarker(point, satellite, data){

na
Kod
function createMarker(point, satellite){

plus to, co Ci napisałem wcześniej i powinno być ok.
northwest
zmieniłem tą linijkę na:
map.addOverlay(createMarker(point,points[i]['satellite'])));

usunąłem cudzysłowy, zmieniłem nazwę funkcji i teraz mam tak samo ja było wcześniej - wszystko działa,
ale bez cienia sad.gif
coś jeszcze jest nie tak:/

mam teraz taki kod:
  1. <?php
  2. var map = null;
  3. var refreshTime = 100;
  4. var prevData = null;
  5.  
  6.  
  7. function load()
  8. {
  9. if (GBrowserIsCompatible())
  10. {
  11. map = new GMap2(document.getElementById("map"));
  12. map.setCenter(new GLatLng(1, 1), 6);
  13. map.addControl(new GSmallMapControl());
  14. reloadPoints();
  15. } }
  16.  
  17. function loadPointData()
  18. {
  19. $.get('points.php', null, addPoints);
  20. }
  21.  
  22. function addPoints(data)
  23. {
  24. if (prevData != data || data == null)
  25. {
  26. prevData = data;
  27. eval("points = ("+data+")");
  28. pointsCount = points.length;
  29. map.clearOverlays();
  30. for (var i=0; i<pointsCount; i++)
  31. {
  32.  
  33. var point = new GLatLng(points[i]['lat'],points[i]['lng']);
  34. map.addOverlay(createMarker(point,points[i]['satellite']));
  35.  var label = new ELabel(new GLatLng(points[i]['lat'],points[i]['lng']), '<div style="background-color:#ccccff;border:2px solid black"><small>Jestemsamochodzik1</small></div>', null, new GSize(6,-30), 75);
  36.  
  37. map.addOverlay(label);
  38.  
  39.  
  40. map.setCenter(point, 13);
  41. }
  42. }
  43. }
  44.  
  45. function createMarker(point, satellite)
  46. {
  47.  
  48. var icon = new GIcon();
  49.  icon.image = "http://maps.google.com/mapfiles/kml/pal2/icon47.png";
  50.  icon.shadow = points[i]['shadow'];
  51.  icon.iconAnchor = new GPoint(6, 20);
  52.  icon.infoWindowAnchor = new GPoint(5, 1);
  53. var marker = new GMarker(point, icon);
  54. marker.value = satellite;
  55. GEvent.addListener(marker, "click", function(){
  56. var myHtml = satellite;
  57. map.openInfoWindowHtml(point, myHtml);
  58. });
  59. return marker;
  60. }
  61.  
  62. function reloadPoints()
  63. {
  64. loadPointData();
  65.  setTimeout(reloadPoints,refreshTime);
  66. }
  67. ?>
sowiq
Ehhh...

Kod
map.addOverlay(createMarker(point, points[i]['satellite'], points[i]['shadow']));


Piszę jeszcze raz:
polecam zaopatrzyć się w Firefoxa i wtyczkę - Firebug lub Console^2.


[edit]
Moja irytacja sięga zenitu... Zamiast odpisać mi pod spodem, to wyedytowałeś posta.

Ta linijka ma wyglądać tak:
Kod
icon.shadow = point[i]['shadow'];

a nie tak:
Kod
icon.shadow = points[i]['shadow'];


Nie points[i]['shadow'], tylko point[i]['shadow']; W argumentach podajesz tablicę o nazwie 'point', a nie 'points'!
northwest
poprawiłem już na to co kazałeś - tylko mineliśmy się wpisaniu - zobacz aktualny kod:)
ten kod co podałeś :
map.addOverlay(createMarker(point, points[i]['satellite'], points[i]['shadow']));
powoduje wyświetlanie się mapy bez markera...
już szukam tego programu:)
sowiq
Skoro inaczej nie umiesz...

Kod
var map = null;
var refreshTime = 100;
var prevData = null;


function load(){
    if (GBrowserIsCompatible()){
        map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(1, 1), 6);
        map.addControl(new GSmallMapControl());
        reloadPoints();
    }
}

function loadPointData(){
    $.get('points.php', null, addPoints);
}
        
function addPoints(data){
    if (prevData != data || data == null){
        prevData = data;
        eval("points = ("+data+")");
        pointsCount = points.length;
        map.clearOverlays();
        for (var i=0; i<pointsCount; i++){
            var point = new GLatLng(points[i]['lat'],points[i]['lng']);
            map.addOverlay(createMarker(point,points[i]['satellite']));
            var label = new ELabel(new GLatLng(points[i]['lat'],points[i]['lng']), '<div style="background-color:#ccccff;border:2px solid black"><small>Jestemsamochodzik1</small></div>', null, new GSize(6,-30), 75);
            map.addOverlay(label);
            map.setCenter(point, 13);
        }
    }
}

function createMarker(point, satellite){
    var icon = new GIcon();
    icon.image = "http://maps.google.com/mapfiles/kml/pal2/icon47.png";
    icon.shadow = point[i]['shadow'];
    icon.iconAnchor = new GPoint(6, 20);
    icon.infoWindowAnchor = new GPoint(5, 1);
    var marker = new GMarker(point, icon);
    marker.value = satellite;
    GEvent.addListener(marker, "click", function(){
        var myHtml = satellite;
        map.openInfoWindowHtml(point, myHtml);
    });
    
    return marker;
}

function reloadPoints(){
    loadPointData();
}
setInterval(reloadPoints,refreshTime);
northwest
qurcze, nie wiem co robię źle...:/ wkleiłem Twój kod i też nie działa... tzn pokazuje się mapka, ale nie pokazują się w ogóle punkty...:sad.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.