Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ejecutar Javascript con Delphi para Google Maps (https://www.clubdelphi.com/foros/showthread.php?t=62839)

vejerf 16-01-2009 16:35:28

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!!!

vejerf 16-01-2009 17:45:00

Hola de nuevo,

Ya he conseguido hacer funcionar algo haciendo los siguientes cambios. Para empezar no se encontraba la variable map (el mapa en sí) porque estaba definida como una variable local, entonces al llamarla desde otra función pues no la encontraba. La solución de esto ha sido fácil, la he sacado de la función en la que estaba y la he declarado como variable global en el script de inicialización. Después he incluido en el script de inicialización una función llamada placemarkt y he añadido allí el código del script1 y en el script1 simplemente he puesto la llamada a la función y la cosa es q ha funcionado.
Algo más he avanzado...

madiazg 18-01-2009 21:52:21

Hola,
yo hace algún tiempo intenté interactuar con google maps pero no saqué nada en claro. Lo que pretendía era los contrario a lo que tú estás desarrollando. Concretamente, quiero marcar una posición del mapa y capturar las coordenadas de dicha posición para utilizarlas en mi programa.
¿A alguien se le ocurre la forma de hacerlo?

En cuanto a mostrar un posición determinada en un mapa lo he resuelto generando un fichero html temporal con la posición que pretendo mostrar en el mapa y las características de éste. Luego sólo tengo que cargar el fichero en el TWebBrowser.

En esta dirección puedes apreciar como queda el mapa en la aplicación:
http://imagen3d.site88.net/ayuda.htm...onamiento.html

Saludos...
Miguel Angel
http://imagen3d.site88.net/

vejerf 19-01-2009 12:34:37

Hola Miguel Angel,

Ahora que ya he conseguido situar algún placemark en el Google Map intentaré ir más allá. Por supuesto si averiguo como capturar las coordenadas te lo diré. Espero que tu hagas lo mismo puesto que me interesa jeje. Yo estoy recién comenzando con el api de Google Map y eso así que supongo que iré lento.
Yo te recomendaría que le echases un vistazo a los ejemplos del api del plugin de Google Earth sobretodo a la parte de los eventos de placemark. Ahí activando los eventos y haciendo click sobre un placemark (para ello corre tb el ejemplo de crear un placemark) salen una serie de datos como la lon/lat. El como recoger estos datos desde tu aplicación delphi no tengo ni idea de si se puede hacer directamente, si no se me ocurre escribir estos datos sobre un fichero y después leerlos con tu aplicación.
Saludos y suerte... y no te olvides de darme ideas!!!
Saludos.

madiazg 20-01-2009 12:25:55

A raíz de este hilo ( http://www.clubdelphi.com/foros/showthread.php?t=62883) voy a intentar investigar un poco por esta línea. Si consigo averiguarlo te lo comento.
Un Saludo....
Miguel Angel

StartKill 20-01-2009 19:08:15

1 Archivos Adjunto(s)
Saludos

Tambien deseamos hacer lo mismo -> Delphi con maps-google...., encontramos código en internet (javascrip, html) y lo ajustamos a la necesidad planteada....

Basicamente es diferente a lo que exponen en sus códigos...

Pero no muy satisfechos hicimos la pregunta como leer un componente de una pagina web, la misma que encontró nuestro amigo madiazg -- en el link encontrarán la repuesta dada por el amigo Roman

Les adjuntamos el archivo mapis.zip, es lo poco que logramos hacer en casa, hay que mejorarlo pero ya es una idea.

Si fueran tan amables de compartir sus codigos para aprender de ellos :).

Ss.

StartKill
Lima-Perú

madiazg 24-01-2009 13:10:35

Hola,
yo para programar utilizo TurboDelphi por lo que no he podido ejecutar el programa que has anexado.
Para la información de la API de Google Maps yo me he basado en la información obtenida de desarrolloweb.com.
De esta forma, he generado un programa de prueba para obtener las coordenadas:
googlemaps.zip
Saludos...
Miguel Angel
Imagen3D

edgwin 15-12-2009 23:22:10

Cita:

Empezado por madiazg (Mensaje 335781)
Hola,
yo para programar utilizo TurboDelphi por lo que no he podido ejecutar el programa que has anexado.
Para la información de la API de Google Maps yo me he basado en la información obtenida de desarrolloweb.com.
De esta forma, he generado un programa de prueba para obtener las coordenadas:
googlemaps.zip
Saludos...
Miguel Angel
Imagen3D

Que tal madiazg, la liga del archivo adjunto esta rota, podrias enviarme el ejemplo por mail: edgwin@gmail.com.

Gracias!


La franja horaria es GMT +2. Ahora son las 15:27:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi