[Python] Google maps

Simone Ziraldo simone.ziraldo a gmail.com
Sab 18 Giu 2011 17:59:46 CEST


Ciao a tutti!

avrei un problemino con Google maps. Vorrei usare Google maps e poter interagire con la mappa in un applicazione fatta con python.
La cosa più veloce mi è sembrata utilizzare QtWebKit e aprire una pagina html in cui ho messo la mappa di Google Maps.
Un semplice esempio è questo:

import sys
import PyQt4.QtCore as QC
import PyQt4.QtGui as QG
import PyQt4.QtWebKit as QWK

app = QG.QApplication(sys.argv)
web = QWK.QWebView()
web.load(QC.QUrl("page.html"))
web.show()
sys.exit(app.exec_())

e il file page.html è il seguente:

<html>
<head>
<title>bla bla</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
    <script type="text/javascript">
    var map;
    function initialize() {
      var myOptions = {
        zoom: 18,
        center: new google.maps.LatLng(44, 10),
        disableDefaultUI: false,
        mapTypeId: google.maps.MapTypeId.SATELLITE
      }
      map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
      // Add a listener for the click event
      google.maps.event.addDomListener(map, 'click', addLatLng);
    }
    function addLatLng(event) {
      var myDiv = document.getElementById("prova");
      myDiv.appendChild(document.createTextNode("Some random text."));
    }
 </script>
</head>
  <body onload="initialize()" onunload="GUnload()">
    <div id="map_canvas"  style="width: 100%; height: 100%"></div>
    <div id="prova"></div>
  </body>
</html>

Se apro questa pagina html con il browser funziona tutto bene: quando clicco sulla mappa mi aggiunge il testo "Some random text".
Se apro questa pagina tramite QtWebKit invece l'evento click non viene eseguito. Riesco comunque ad interagire con la mappa
(ad esempio fare lo zoom) ma non mi esegue la funzione addLatLng, avete qualche idea sul motivo?
Si tratta di un bug delle api di google o di QtWebKit? Oppure è in qualche modo giusto che si comporti così?

Per superare il problema potrei modificare la funzione mousePressEvent di QWebView...ma mi sembra una soluzione "sporca"...e potrebbe complicare un po' le cose. 


Grazie mille,
Simone


Maggiori informazioni sulla lista Python