Google API и map.panTo: не панорамирование - PullRequest
1 голос
/ 14 февраля 2012

Я пытаюсь улучшить свой сайт звукового проекта, но я застрял в ... панорамировании.

У меня есть карта Google, заполненная маркерами, связанными с текстом и записанным звуком. Оно работает. Я пытаюсь разрешить пользователю перемещаться по карте с помощью панорамирования, поскольку я не могу получить панорамирование карты.

Я не эксперт в php или Google API, и это мой первый пост, надеюсь, он хорошо отформатирован.

Веб-адрес проекта: soundplaces.net

Я создал функцию map_panning (), а затем попытался вызвать эту функцию с помощью

<a href="" onclick="map_panning()">please PAN</a> 

в содержании div.

Карта просто перезагружается ... даже если я попытался поместить в функцию "return false".

Я также пытался сделать панорамирование карты при нажатии на маркер

GEvent.addListener(marker, 'click', function() {
         marker.openInfoWindowHtml(html); map.panTo(marker.getPoint());  
      });

Но все равно не работает.

Кто-нибудь может мне помочь?

Это большая часть кода, который есть в моем файле default.ctp (сайт сделан с CAKE), надеюсь, это поможет.

function load() {
  if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(<?php echo $CenterMap; ?>), 13);
map.setMapType(G_SATELLITE_MAP);
GDownloadUrl("http://www.soundplaces.net/xml.php", function(data) {
  var xml = GXml.parse(data);
  var markers = xml.documentElement.getElementsByTagName("marker");
  for (var i = 0; i < markers.length; i++) {
    var name = markers[i].getAttribute("name");
var description = markers[i].getAttribute("description");
    var address = markers[i].getAttribute("address");
    var type = markers[i].getAttribute("type");
    var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                            parseFloat(markers[i].getAttribute("lng")));
var file_name = markers[i].getAttribute("file_name");
    var marker = createMarker(point, name, description, address, type, file_name);
    map.addOverlay(marker);


      }
    });
  }
}

function createMarker(point, name, description, address, type, file_name) {
  //var marker = new GMarker(point, customIcons[type]);
  markerOptions = { icon:soundIcon };
  var marker = new GMarker(point, markerOptions);
  var html = "<b>" + name + "</b> <br/>" + address + "<br />" + description + "<br />" + "<object type='application/x-shockwave-flash' data='/media/dewplayer.swf?mp3=/media/audio/"+file_name+"' width='200' height='20'><param name='movie' value='dewplayer.swf?mp3=media/audio/"+file_name+"' /></object>";
  GEvent.addListener(marker, 'click', function() {
    marker.openInfoWindowHtml(html); map.panTo(marker.getPoint());  
  });
  return marker;
}


function map_panning() {
    map.panTo(new google.maps.LatLng(44.433373,10.712251));
    return false; //cancel navigation
}

Тогда в теле

   <body onload="load()" onunload="GUnload()">



        <div id="content">
        <a href="" onclick="map_panning()">Please PAN</a>
            <?php echo $this->Session->flash(); ?>

            <?php echo $content_for_layout; ?>

        </div>
<?php echo $this->element('sql_dump'); ?>
</body>

1 Ответ

1 голос
/ 14 февраля 2012

Вы смешиваете комбинацию API Карт Google 2 и кода API 3. Два не работают вместе, вы должны использовать один или другой. API 2 устарел, поэтому желательно использовать API 3.

например. new google.maps.LatLng(44.433373,10.712251) - это API 3, но new GMarker(point, markerOptions) - это API 2.

И если вы хотите сохранить все это с помощью API 2, вам, вероятно, следует изменить свою функцию map_panning на что-то вроде:

map.panTo(new GLatLng(44.433373,10.712251));
...