Ver Mensaje Individual
  #1  
Antiguo 16-01-2009
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Reputación: 18
vejerf Va por buen camino
Ejecutar Javascript con Delphi para Google Maps

Hola a todos,

Estoy investigando un poco sobre como integrar Google Maps en una aplicación Delphi. He visto varios hilos sobre el tema y me dejan claro como insertar el mapa en mi aplicación. Ahora mi problema es que quiero en tiempo de ejecución insertar placemarks (puntos) en el mapa y no sé como hacerlo. No tengo idea de Javascript, pero reutilizando el código de los ejemplos de Google pensé que sería capaz de apañarme. Ahora mi problema tb es como ejecutar el código de javascript desde mi aplicación Delphi. En otro hilo he visto que se usa execScript, pero cuando yo lo he usado para añadir un placemark me ha dado un error de que no se encuentra la variable map que es cargada en el script de iniciación. Os dejo el código a ver si alguien sabe como insertar un placemark ejecutando código javascript.
Mi formulario consta de un TWebBrowser y de un botón. Quiero que cuando se pulse el botón se ejecute el código de un script que tengo en un fichero.

Código Delphi [-]
procedure TPrincipalForm.Button1Click(Sender: TObject);
var
  Doc2: IHTMLDocument2;
  Code : String;
  FScript : TStringList;
  I : Integer;
begin
  FScript := TStringList.Create;
  FScript.LoadFromFile(RutaFicheros+'/Script1.html');
  with WebBrowser1.Document as IHTMLDocument2 do
    with parentWindow do
      for I := 0 to FScript.Count - 1 do
        execScript(FScript.Strings[i], 'JavaScript');
  FScript.Free;
end;
procedure TPrincipalForm.FormCreate(Sender: TObject);
begin
  RutaFicheros := ExtractFileDir(ParamStr(0));
  WebBrowser1.Navigate('http://localhost/Pruebas_Google_MAps/index.html');
end;

El código del script que quiero que se ejecute cuando se pulse el botón es el siguiente tomado de un ejemplo de Google que crea 10 placemarkts

var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();
for (var i = 0; i < 10; i++) {
var point = new GLatLng(southWest.lat() + latSpan * Math.random(),
southWest.lng() + lngSpan * Math.random());
map.addOverlay(new GMarker(point));

La página de inicio que carga el navegador es:

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Control Initialization</title>
<script src="http://maps.google.com/maps?file=api&amp;"type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[

function initialize() {
if (GBrowserIsCompatible()) {
// define the crosshair tile layer and its required functions
var crossLayer = new GTileLayer(new GCopyrightCollection(""), 0, 15);
crossLayer.getTileUrl = function(tile, zoom) {
return "./include/tile_crosshairs.png";
}
crossLayer.isPng = function() {return true;}

// Create a new map type incorporating the tile layer
var layerTerCross = [ G_PHYSICAL_MAP.getTileLayers()[0],
crossLayer ];
var mtTerCross = new GMapType(layerTerCross,
G_PHYSICAL_MAP.getProjection(), "Ter+");

var map = new GMap2(document.getElementById("map_canvas"),
{ size: new GSize(1080,930) } );
map.addMapType(G_PHYSICAL_MAP);
map.addMapType(mtTerCross);
map.addMapType(G_SATELLITE_3D_MAP);
map.setCenter(new GLatLng(40,-3.5), 7); // posicion inicial
map.addControl(new GLargeMapControl())

var mapControl = new GHierarchicalMapTypeControl();

// Set up map type menu relationships
mapControl.clearRelationships();
mapControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Labels", false);
mapControl.addRelationship(G_PHYSICAL_MAP, mtTerCross, "Crosshairs");

// Add control after you've specified the relationships
map.addControl(mapControl);



}
}
//]]>
</script>
</head>

<body onload="initialize()" onunload="GUnload()">
<div id="map_canvas" style="float:left; width: 100%; height: 100%"></div>
</body>
</html>


Gracias de antemano!!!
__________________
"Patientia et constantia taelecum"
Responder Con Cita