(Español) GMLib – Google Maps Library

 

Sorry, this entry is only available in European Spanish.

  367 Responses to “(Español) GMLib – Google Maps Library”

  1. Hola que tal, excelente tu pagina, apenas he dado con ella y se me hace muy interesante, estoy probando tus componentes para Google Maps y despues de jugar un poco con los ejemplos que vienen con las librerias, me puse a checar el que permite insertar etiquetas en el mapa “GMMarker” y quisiera saber si me puedes indicar como puedo hacer para insertar un marcador por codigo, lo que pasa es que si deseo poner marcadores desde el Componente con el “Marker Editor” me funciona excelente.

    Pero en mi caso yo lo quiero utilizar con una base de datos, tengo mis campos Longitud, Latitud, Titulo y HTMLContent y me gustaria saber como agregarle las cordenas que filtro para que me las muestre segun las que cumplan con la condicion que seleccione supongo que sera algo como

    Procedure TForm1.CargarMarcadores;
    var
    i: Integer;
    begin
    for i:0 to Table1.RecordCount do
    GMMarker1.VisualObjects //// Agregarle la Longitud, Latitud conforme encuentra los registros
    ….

    He intentado con la ayuda que da el propio delphi cuando escribes y te muestra la lista de opciones pero no sabria cual es la que me permite agregarlo manualmente, te agradeceria mucho me pudieras comentar cual seria esta forma 🙂

    Saludos

    P.D. Muchas gracias por compartir tu codigo es muy util y educativo

    • Buenas,

      Ante todo gracias por probar los componentes y hacer de “conejillo de indias” dada la “juventud” de los mismos (no son ni beta jejejeje)

      Lo que quieres es sencillo de hacer. Desde la clase TGMMarker tienes un método para ello y podría ser algo así

      procedure TForm1.bAddMarkerClick(Sender: TObject);
      var
        Marker: TMarker;
      begin
        // con esta simple linea lo tienes añadido
        Marker := GMMarker1.Add;
        // a partir de aquí ya puedes informar las propiedades a tu gusto
        Marker.Position.Lat := 10.543345;
        Marker.Position.Lng := -4.344567;
        Marker.Title := 'título para el marcador';
        .....
      end;
      

      Si sólo le vas a dar valor a la lat/lon y título, puedes hacerlo directamente desde el método Add.

      procedure TForm1.bAddMarkerClick(Sender: TObject);
      var
        Marker: TMarker;
      begin
        // con esta simple linea lo tienes añadido
        Marker := GMMarker1.Add(10.543345, -4.344567, 'título para el marcador');
      end;
      

      Espero te sea de ayuda

      Nos leemos
      cadetill

      • Cadetill muchas gracias por tu respuesta, me ayudo mucho pero aun sigo con el detalle de que si tengo yo las ubicaciones en mi base de datos (restaurantes, cines, parques, etc) y por ejemplo filtro “restaurantes” el resultado me muestra en un DBGrid las columnas Latitud, Longitud y Titulo o Nombre si lo hago uno por uno tocandolo no hay problema, pero si quiero que me carge el X numero de restaurantes que tengo en mi base y que cumplen el criterio de mi consulta que se muestran en el dbgrid se traba mi aplicacion.

        Mi aplicacion es sencilla y utilizo mysql donde almaceno direcciones y lugares y ahora que veo la posibilidad de ubicarlos en un mapa me parecio muy buena idea

        Mi consulta es basicamente


        SELECT
        MainDB.ID,
        MainDB.LUGAR,
        MainDB.LATITUD,
        MainDB.LONGITUD
        FROM
        MainDB
        WHERE
        MainDB.LUGAR = 'RESTAURANT'

        Y ya que me los muestra en la DBGrid los intento leer de la siguiente manera


        procedure TForm1.Button2Click(Sender: TObject);
        var
        Marker: TMarker;
        Lat, Long: Real;
        begin
        Lat:= Table1.FieldbyName('Latitud').ASFloat;
        Long:= Table1.FieldbyName('Longitud').ASFloat;
        UniTable1.First;
        While Not UniTable1.Eof do
        Marker := GMMarker1.Add(Lat , Long, 'título para el marcador');
        Unitable1.Next;
        end;

        No se si haya una mejor forma de hacerlo directo desde una consulta pero si es asi no sabria por donde leer los datos para que los carge directos al mapa mientras realiza la consulta, por eso ya que tengo los datos en la DbGrid los intento cargar uno por uno 🙂

        Cualquier sugerencia se agradece 😀

        • Por cierto una observación igual no se si sea relevante pero a mi si me parece curioso y creo que por eso no me carga las coordenadas aunque se las ponga manuales, yo me encuentro en México y aquí el símbolo decimal es el “.” y veo que en España es “,” de hecho cuando compilo tus ejemplos que incluyes e intento cargar las coordenadas que vienen de ejemplo me dice que hay un error y para que me funcione lo tengo que poner con “.” 🙂 saludos

          —————————
          Gmmarker_demo
          —————————
          ‘41,380908’ is not a valid floating point value.

        • Buenas

          La forma en que cargas los marcadores es la correcta. No hay otra manera que hacer el bucle. Aun no hay un “TDBMarker” jejejeje Quizás en un futuro 😉

          Sólo un comentario. Si no vas a usar el TMarker creado, puedes obviar la variable 😉

          En cuanto al tema del separador decimal, pues es cierto, la demo está pensada para la gente que use como separador decimal la coma, no el punto. No obstante, eso sólo afecta a la demo, no al componente, ¿correcto?

          Nos leemos
          cadetill

          • Muchas gracias mi estimado Cadetill, por alguna razon he notado que cuando cargo alguna corrdinada me sale un error que en estos momentos no tengo el dato, busque en google y corresponde si mal no recuerdo al mismo script de carga de google maps.

            Pues de la forma en que cargo los marcadores aunque algo rudimentaria 😀 por no decir mas jajajaja me esta dando errores, ya que cada que ejecuto el codigo el programa se traba y tengo que cerrarlo, pero si lo ejecuto

            ( disculpame si no queda las etiquetas de codigo porque intente ponerselas pero no me salio 😀 )


            procedure TForm1.Button2Click(Sender: TObject);
            var
            Marker: TMarker;
            Lat, Long: Real;
            begin
            Lat:= Table1.FieldbyName('Latitud').ASFloat;
            Long:= Table1.FieldbyName('Longitud').ASFloat;
            Marker := GMMarker1.Add(Lat , Long, 'título para el marcador');
            Unitable1.Next;
            end;

            Por cada ves que oprimo el boton me carga perfectamente los marcadores claro que no es lo ideal 😀 intentare probar de otras formas para ver porque se bloquea mi programa.

            Por cierto lo de un TDBMarker no estaria nada descabellado 😉

          • Pd. En efecto lo de la coma por punto solo afecta la demo, el componente funciona excelente 😀

    • hola, bueno estoy tratando de hacer algo parecido a tu programa y al principio me tope con que esta version no es compatible con firemonkey x3. ahora bien como hace para capturar en tu base de datos la logitud y latitud?

      • Buenas

        Sólo decirte que los componentes sí son compatibles con FMX. Lo que pasa es que al no haber un navegador compatible con esta versión de Delphi, no tiene sentido instalar los componentes en FMX 😉

        Nos leemos

  2. Buen inicio de semana Cadetill, pues bien a base de ensayo y error ya pude hacer que de manera “automatica” me carge los marcadores, al principio me costo trabajo debido a que me faltaba una line a que hacia referencia a que utilizaria la Tabla, por eso se bloqueaba, despues el problema surgio porque queria leer directamente de los DBEdits, y solo me cargaba el primer marcador, asi que lo que se me ocurrio es que al recorrer los registros encontrados me leyera el valor directo de cada “campo” de mi base de datos, y quedo de la siguiente forma por si alguien mas le llega a interesar:

    procedure TForm1.Button2Click(Sender: TObject);
    var
    Marker: TMarker;
    begin
    with Form1.Table1 do begin
    First;
    while not eof do begin
    Marker := GMMarker1.Add(Table1.FieldByName('Latitud').AsFloat , Table1.FieldByName('Longitud').AsFloat, Table1.FieldByName('Lugar').AsString);
    Next;
    end;
    end;
    end;

  3. Nuevamente saludando Cadetill, mira intente buscar algún procedimiento desde tu componente para quitar las etiquetas, pero no lo encontre 😀

    Asi que me invente un pequeño procedimiento

    procedure TForm1.LimpiarMarcadores;
    var
    i: Integer;
    begin
    for I := 1 to Table1.RecordCount do
    GMMarker1.Delete(0);
    end;

    El unico detalle es que debe de haber marcadores si no marcara error “List index out of bounds (0)” lo cual es logico considerando que quiero borrar y no hay nada que borrar 🙂

    Otra pregunta, intento cargar desde mi FormShow

    procedure TForm1.FormShow(Sender: TObject);
    begin
    GMMap1.RequiredProp.Center.Lat := Latitud;
    GMMap1.RequiredProp.Center.Lng := Longitud;
    GMMap1.RequiredProp.Zoom := 8;
    GMMap1.DoMap;
    end;

    Pero me devuelve el siguiente error: “Página inicial aun no cargada.”

    Ese mismo codigo lo pongo en un boton y me funciona perfectamente.

    Hay algun metodo o forma o estoy omitiendo algo que evita que pueda cargar la pagina de forma automatica??

    Por cierto de verdad muchas gracias por tu paciencia 😀 y comentarios 😀

    • Buenas,

      Todo componente descendiente de TGMLinkedComponent (léase TGMMarker, TGMInfoWindows,….) tienen el método Clear, con lo que con un simple GMMarker1.Clear, borras los marcadores.

      Con un bucle también podrías hacerlo, pero en lugar de basarte en la tabla, recorrer directamente los marcadores que tienes

      for i := GMMarker1.VisualObjects.Count – 1 downto 0 do GMMarker1.Delete(i);

      Respecto al otro problema, como digo en la ayuda, lo primero que se tiene que hacer es activar el TGMMap (Active := true)para cargar el HTML básico que se necesita para operar con el componente. Esto dispara el evento AfterPageLoaded con el parámetro First a true, que puedes usar para disparar el DoMap o habilitar el botón que lo muestro o activar un TTimer que al cabo de x milisegondos se dispare y realice el DoMap,….

      Espero te ayude y gracias a ti por probarlo

      Nos leemos
      cadetill

  4. Excelente!!! trabajo. Los voy a probar.
    Saludos

  5. Estimado Cadetill gracias por tus comentarios pero no se si sea solo a mi pero el metodo Clear, me da error al compilar, lo pongo de la misma manera “GMMarker1.Clear” y no me permite continuar incluso cuando lo escribo manualmente, despues del punto en la lista de funciones y procedimientos no me aparece la funcion o metodo CLEAR

    No se si lo puedas checar para ver si en tu delphi si funciona, saludos

    • jejeje, perdón, no me acordaba que es un método que he añadido para la próxima versión de los componentes que no tardará en salir (y que contendrá el objeto TGMPolyline) 🙂

      Si “tienes prisa” puedes usar el bucle que te comentaba y, cuando suba la nueva versión, pues ya lo sustituyes por el nuevo método 🙂

      Nos leemos
      cadetill

      • 😀 Ya decia yo que no me aparecia, por mientras lo estoy dejando como te mencione, porque el bucle que me indicas por alguna razon no me lo compila asi con DownTO pero igual es por algun detalle lo voy a checar, ya que si la nueva version contiene CLEAN estaria excelente y mas limpio, porque de mi forma noto que de repente me borra todos los marcadores pero despues cuando cargo otros me deja los anteriores, supongo porque como me djiste lo baso en mis registros encontrados no en los marcadore.

        En horabuena por la siguiente version y esperandola para probarla 😀 Saludos

  6. Saludos Cadetill aqui de nuevo saludando 😀

    Un comentario o detalle que he notado no si sea por la cuestion de precision del componente o por alguna otra cuestion, ya que solo en mis ratos libres estoy trabajando en mi programita 😀

    Lo que pasa es que cuando copio las latitudes y longitudes desde los mapas de google con el explorador o firefox me las muestra correctamente con el componente, pero si las copio de google maps la aplicacion, las cordenadas me aparecen diferentes incluso si las ocupo en las del explorador me da otra ubicacion, no es algo tan malo ya que en mapas cargados desde la pagina las ubicaciones me dan exactas en donde selecciono, pero me parece curiosa la diferencia, saludos

    • Buenas,

      No entiendo lo que quieres decir. ¿Puedes ponerme un ejemplo? Por que…. no será la precisión que puedes especificar en el componentes TGMMaps, ¿no?

      • Perdon por contestar hasta ahorita pero he estado con mucho trabajo y no he podido checarlo pero espero en estos dias te checo bien en que parte es si en la precision o en los mapas que maneja google con algun ejemplo 😀

        Mientras tanto un saludo Cadetill

  7. Llevaba tiempo buscando una librería que me permitiese trabajar en Delphi 5.. y la encontré !!

    He conseguido compilar GMLib 0.1.1 en Delphi 5 (eliminando las llamadas a ShowCollectionEditor y retocando ligeros detalles) sin errores, así como las Demos.

    Sólo tengo una pequeña sugerencia (por el uso que quiero darle) y es que (aun, espero) no permite elegir el icono de los Marcadores.

    De todas formas, funciona genial, gran trabajo !!

    • Hola Fernando,

      Me alegra saber que has podido compilar sin muchos problemas con una versión tan vieja de Delphi 🙂 La verdad es que no me pensaba que hubiera gente que aun programara en versiones anteriores a Delphi 6 jejejeje Por casa debo de tener alguna versión de Delphi 3, 4 y 5. Miraré de instalarlas a ver si para la próxima versión puedo hacer que se compile también en estas versiones de Delphi

      Gracias por probar los componentes

      Nos leemos
      cadetill

  8. Hola a todos:
    Llevo tiempo manejando una página con planos de Google Maps que desarrollo en modo artesanal (o sea, con mucho trabajo) y me gustaría que la página que mostrara resultados (marks) se generara dinamicamente. estoy buscando a alguien que me pueda hacer el trabajo. O sea, la base de datos con los datos que necesito pasar al mapa, el interface de entrada de información a dicha base de datos y los códigos PHP que generen el plano a partir de los datos de búsqueda introducidos por el visitante de la página. ¿Sabeis de alguien que me lo pudiera hacer?

  9. Hola, intente instalarlo en Delphi XE, pero sin éxito, veo que los paquetes de los componentes existen actualmente para D6, D7, D2007, D2010, DXE2 pero no para DXE, tienes algún tip para esta instalación?

    • Buenas Erasmo

      No tengo el XE para poder hacer el paquete ni probarlo, pero vamos, imagino que el paquete de D2010 o DXE2 debería de servirte y compilar en XE. Si no te compila, dime qué errores te da para poder ayudarte a compilarlo

      Nos leemos

      • Hola cadetill,

        De antemano gracias!, te comento que efectivamente, logre compilar y registrar los componentes en DelphiXE con el paquete D2010 realizando estos cambios en en la sentencia
        {$IF CompilerVersion < 22} la cambie por {$IF CompilerVersion < 23}.

        Ahora! realizando el hola mundo con estos componentes, no logro que en los eventos me de las coordenadas (LatLng: TLatLng) estas siempre me las da en cero. por ejemplo, en el evento GMMap1CenterChanged(Sender: TObject; LatLng: TLatLng), siempre que se dispara, LatLng siempre bienen en Cero; incluso en los demos en el log de eventos, me vienen en cero. Sabes si es algo que tenga que ver con el lenguaje, soy de Mexico.

        • Disculpas, el cambio que te mencione anteriormente lo realice en GMMap.pas y el mensaje de error fue:

          [DCC Error] GMMap.pas(1621): E2009 Incompatible types: ‘Parameter lists differ’

          nos leemos.

          • Ya encontré cual es el detalle… y efectivamente tenia que ver con el regionalismo, comente la linea linea 164 del WebControl.pas, la funcion quedo de la siguiente manera:


            function TWebControl.GetFloatField(const aFormName, aField: string;
            DefaultValue: Real): Real;
            var
            Strg: string;
            Val: Extended;
            begin
            Result := DefaultValue;

            WebFormNames;

            if Forms.IndexOf(aFormName) = -1 then Exit;

            WebFormFields(aFormName);

            if Fields.IndexOf(aField) -1 then
            begin
            Strg := Trim(WebFormFieldValue(Forms.IndexOf(aFormName), aField));
            //Strg := StringReplace(Strg, '.', ',', [rfReplaceAll]);
            if (Strg '') and TryStrToFloat(Strg, Val) then
            Result := Val;
            end;
            end;

          • Hola Erasmo

            Me alegra que hayas podido instalar los componentes. Miraré de hacer el cambio que mencionas en el código para poder instalarlo en XE sin problemas 🙂

            Con respecto al problema que has tenido con el LatLng, no termino de entender por qué no te funciona. Se supone que las funciones de Google necesitan un numérico con un separador de decimales de punto. La función esa lo único que hace es eso, reemplazar las comas (separador decimal usado en España) por puntos (separador decimal americano y, por ende, usado por Google).

            Intentaré investigar un poco el tema. Si descubres algo más, te estaré agradecido si lo comentas

            Nos leemos

          • Buenas,

            Instalando la ultima actualización me di cuanta que las coordenadas me las sigue dando en Cero, entonces regrese a la linea 164 de WebControl.pas, analice los comentarios en donde me dices lo que hace esa linea, remplazar el punto por la coma

            Strg := StringReplace(Strg, ‘,’, ‘.’, [rfReplaceAll]);

            esto es valido en tu región, en donde se separa los decimales con coma, pero en México no funciona,

            Coloque una validación, que solo se ejecute esa linea mientras exista un separador decimal con coma.

            if DecimalSeparator = ‘,’ then Strg := StringReplace(Strg, ‘.’, ‘,’, [rfReplaceAll]);

            Me dices que te parece.

            Saludos.

          • Buenas Erasmo,

            Pues me parece genial, simple y sencillo. En la próxima versión ya aparecerá el cambio (ya lo he realizado)

            Gracias 😉

  10. Excelente trabajo. Apenas he encontrado tus componentes y estoy experimentando con ellos. Al principio me encontré igualmente con el problema de los separadores decimales y de millares como Erasmo con la configuración regional de México.

    Se me ha ocurrido, no hay una manera de “seleccionar” un área del mapa con el ratón y que esa área sea un cuadrado traslucido mientras se este seleccionando? O al menos que se note con un rectángulo de selección.

    Gracias nuevamente

    • Buenas Ricardo

      Muchas gracias por aunque sea probarlos 🙂

      Respecto a lo que me comentas, no termino de entender lo que quieres. ¿Puedes explicarte algo mejor?

      • En esencia, es seleccionar un área del mapa, tipo selección de Autocad, sólo eso. Ya obtuve las coordenadas de la selección usando el método OnClick del GMMap pero me falta lo “visual” para indicar que se está seleccionando. Tal vez ya esté implementado en alguna de las funciones de Java pero desconozco la API de Google Maps. Gracias

        • Buenas,

          Lo que no entiendo es eso de la selección. Es decir, entiendo que quieres que aparezca un rectángulo mientras estás seleccionando un área del mapa, lo que no veo es la utilidad o qué quieres conseguir seleccionando una zona del mapa. Por otro lado, desde el API de Google Maps no hay ninguna opción que lo permita, se tendría que implementar mediante JavaScript de alguna manera. También se tendría que tener en cuenta que el mapa no se pudiera “mover” con el ratón (propiedad Draggable).

          Nos leemos
          cadetill

          • Ya he pensado en esos detalles y hasta este momento debido a mis escasos conocimientos de la manipulación del TWebBrowser / GoogleMaps API / Java son casi insalvables para mí 🙁

            Para efectos de pruebas solamente uso un clic para definir la primera esquina y un segundo clic para la definir la segunda, esto es para hacer zoom a la zona seleccionada de manera mas rápida y no dar clic varias veces en el control o usar la rueda del ratón repetidamente, un zoom rápido a una zona específica del mapa.

  11. Un saludo de nuevo. He descubierto otra falla, no sé si alguien más lo ha hecho, he aquí el escenario:

    De acuerdo a las instrucciones de http://code.google.com/p/vcl-styles-utils/ o http://theroadtodelphi.wordpress.com/2012/03/20/delphi-vcl-styles-and-twebbrowser-source-code-released/ para sustituir el TWebBrowser por un TVclStylesWebBrowser con una clase superpuesta y dar soporte completo de VCL Styles, ya no aparece nada de mapas en el browser asociado al GMMap.

    Reportaré de igual manera el problema al desarrollador de vcl-styles-utils

  12. Buenas cadetill,

    Trabajando con los markers, tengo la necesidad de relacionarlo con otro objeto, en mi caso específicamente con un registro de una consulta sql, veo que en la mayoría de componentes que manejan TColecction tienen una propiedad que se llama object, en la cual puedes asignar cualquier tipo de objeto y así también un propiedad Tag.

    Estaria muy bien también contar con estas propiedades en lo TMarker.

    ¿Que te parece la idea?

    Nos leemos.

    • Buenas Erasmo

      TCollectionItem no posee ninguna de estas propiedades que comentas. No obstante es factible y fácil el ponerlas. Si realmente encuentras que es interesante, no hay problema en incorporarlas 😉

      Nos leemos

      • Hola,

        Buen inicio de semana cadetill…

        Efectivamente me parece interesante la propuesta, esto con el objetivo de darle una mayor capacidad de implementación…. claro también me gusta mucho la idea de TDBMarkar.

        Por cierto, ¿como le hago para postear código formateado delphi?, lo intente con etiquetas codigo pero no se nota visualmente.

        Saludos!

  13. Buenas cadetill,

    Ahora con una consulta, para implementar iconos personalizados, en que lugar debo de colocar la lista de iconos disponibles.

    Nos leemos.

  14. Buenos dias Cadetill:
    Enhorabuena por tu trabajo, y gracias por compartirlo.

    He estado haciendo pruebas con tu codigo y me parece magnifico. Se me ocurren algunas sugerencias como el ya comentado TDBMarker, y una utilidad que me parece tambien interesante y es obtener las coordenadas de un lugar a partir de la direccion tal y como lo hace Google Maps. Hasta ahora yo las consigo pasando la direcccion a traves de la url que usa Google Maps y extrayendo de la respuesta que devuelve googlemap los datos que me interesan. Supongo que habra mil formas mejores de hacerlo pero ….
    URLDownloadToFile(nil, PChar('http://maps.google.com/maps?output=kml&q='+direccion) ...

    • Buenas Jesús

      Antetodo gracias por probar los componentes. Con respecto a lo que comentas, efectivamente tengo pensado hacer un componente para pasar de una dirección a coordenadas. De hecho aquí en mi blog ya he hablado de ese tema y sería “sólo” pasar ese código a componente. Eso se llama geocodificación y, si te pasas por esta página (http://www.cadetill.com/?page_id=6) en el apartado de Google Maps puede ver los 4 primero artículos que hablo sobre ello.

      Más o menos mi “roadmap” es terminar con las figuras y luego ponerme con los servicios que ofrece Google Maps como la geocodificación 🙂

      Nos leemos
      cadetill

  15. Very usefull and intuitive component, i hope that this project will grow up strong!

  16. very nice components, i have been trying them and come across an issue when use the onclick for the GMmap component always returned 0 for both the Lat and Lng.

    Am i doing something wrong?

    I also noticed that the demos also do this.

    • Hi Shaun

      Before all, thanks for test the componentes.

      Concerning your problem, I have test it and OnClick event return the correct Lat/Lng. Is possible that the problem is the regional configuration. Try to change your regional configuration (, for decimal separator) and say me if this is the problem.

      Thanks
      cadetill

      • i can confirm that after changing my decimal symbol from . to , i now get the Lat/Lng values in the onclick event.

        • Ok, I will search why this and I will try to fix in the next version 🙂

          Thanks

          • Hi

            I will keep a look out for the update

            Just to let you now i am using these components in c++ Builder XE2 Update 4 and so far that is the only issue i have come across,

            is there any way to change the marker icon, also are there any plans to add Geocoding/Geolocation components

          • Hi Shaun

            Is perfect that you use this components in BC++ XE2 🙂

            At the moment you can’t change the marker icon. In the next revision perhaps is posible.

            My “roadmap” is about this: first, finish with rectangle and cercle and after, do components for the services like geocoding. And by the way, improve the existing components with new features

            Thanks again

            PS: I will try to translate this page to english in the futur 🙂

  17. […] Tienen muy buena pinta. Podéis revisar el diagrama completo de la estructura de clases aquí, y la descripción de todas las clases en la siguiente página. […]

  18. Hi,

    I just want to thank you for sharing these components.
    You did a great work and I’m looking forward for your next version….

    Best regard,

    SW

  19. […] ha visto la luz la siguiente versión de los componentes de Cadetill para trabajar con Google Maps. La librería GMLib; En este caso la versión 0.1.5a. Añaden bastantes correcciones y nuevas funcionalidades respecto […]

  20. Buenas tardes:

    Veo que los componentes siguen evolucionando. Enhorabuena por tu magnifico tranajo y por compartirlo con los novatillos en delphi. Seria interesante poder extraer de TAddressComponent o de alguna manera partes de esa direccion completa, por ejemplo, el Codigo Postal

    Un saludo y gracias por compartir tu trabajp

    • Hola Jesus

      Imagino que te referirás al componente TGMGeoCode, verdad? Una geocodificación puede dar cero o varios resultados. Cuando se produce al menos 1 resultado, éste (o éstos en el caso de que sean varios) se guardan en el array GeoResult del TGMGeoCode. Cada posición del array GeoResult contiene un objeto de la clase TGeoResult. Estos objetos TGeoResult tienen una propiedad, la AddrCompList de la clase TAddressComponentsList que, como podrás imaginar por la coletilla de “List”, es una colección de TAddressComponent. Pues bien, esta lista de TAddressComponent lo que contiene es una “fracción” de la dirección geocodificada. Por ejemplo, si geocodifico “C/ reial 60, tarragona” obtendré 7 TAddressComponent y uno de ellos es el código postal. Así pues, sólo tienes que recorrer esta lista y buscar el tipo “postal_code” (en la propiedad AddrCompTypeList del TAddressComponent).

      Te invito a que hagas la prueba de una geocodificación en la MegaDemo que se incluye junto a los componentes y compruebes lo que te comento.

      Saludos y gracias
      cadetill

  21. Felicitaciones amigo Cadetill,
    También desde Argentina estamos probando tu componente.

    Que hay en cuánto a la generación de Rutas de Viaje?

    Me refiero a si es posible, tal cual lo hace la web de GMaps, poner una direccion de partida y un destino para que trace el recorrido utilizando las vías existentes y sus sentidos de dirección habilitados. para la circulación…

    No hablar de si es posible crear una ruta al estilo “Viajante de comercio” ( TSP, Travelling Salesman Problem) con destinos concatenados.

    Abrazo cordial,
    YAKO

    • Hola YAKO

      Antetodo gracias por probar la GMLib 🙂

      Referente a la pregunta, es precisamente en lo que estoy trabajando en estos momentos, en el servicio de direccionamiento de Google Maps. Ya no queda mucho para que esté terminado, así que imagino que en breve podré sacar una nueva versión con este componente (y otras mejoras que he ido haciendo desde que cerré la versión 0.1.5).

      Saludos
      cadetill

  22. Buenos dias:

    Gracias de nuevo por tu esfuerzo y por compartirlo….Animo y ahora que casi lo tienes terminado :P…. a ver si le metes mano al API de Google Calendar. Seria la caña manejar el Calendar de Google desde Delphi

    Saludos y gracias de nuevo

  23. Hola cadetill ! Exelente trabajo, Felicitaciones

    Tengo problemas con el componente GMPolyline1.
    Creo un polyline con la interfaz grafica.

    Hago un boton con :
    GMPolyline1[0].AddLinePoint(20, -99);
    GMPolyline1[0].AddLinePoint(21, -100);

    Si no creo antes un LinePoint en la interfez graphica, me saca un msg de error.
    Entonces agrege un LinePoint en la interfaz graphica y agrege al boton:
    GMPolyline1[0].DeleteLinePoint(0);

    Si hago con otro boton: GMPolyline1[0].ClearLinePoints; (ahi todo muy bien, la linea desaparece)
    Pero si vuelvo a oprimir el boton de antes para crear una linea, el delphi no esta feliz y me dice “este objeto no tiene relacion en javacript”

    Tambien si hago un loop para poner muchos puntos (1000 por ejemplo), se tarda mucho para aparecer.
    Ahi creo tiene que ver con el autoUpdate. Debo desabilitar el auto update y autoupdatepath y poner depues del loop un GMPolyline1[0].Setpath ?

    Seguro hay algo que hago mal 🙁
    Muchas gracias y Saludos !

    • Hola cephi

      Antetodo gracias por usar los componentes.

      Referente a la primera pregunta, es cierto, es un bug de los componentes que tengo localizado y que será corregido en la próxima versión.
      Y con lo que respecta a la segunda pregunta, pues la verdad es que no he probado a crear un polyline con tantos puntos, por lo que no podría decirte. En cuanto vuelva de vacaciones miro de hacer alguna prueba a ver 😉

      Nos leemos

  24. hi cadetill,

    thanks for the component it sure help me a lot after you help me back then i need to ask one more dumb question. how could i create a polygon at runtime i have two seperate tstrings which contains long and lat respectively. i cannot see how you do it in your demo. thanks again

    • Hi Charlie

      You can add a TPolyline with Add method of TGMPolyline, and you can add TLinePoint with AddLinePoint method of TPolyline, BUT at the moment TPolyline have a bug, and you have an error if you don’t define at design time minimum one TPoliLine. To the next version this bug will be fixed

      Regards

      • hi cadetill,

        can you set me a small sample? i was again getting confused? thanks!!! and will wait for your update i just want to try it out. i can actually did use every component you made and was great so far except this one hehehe!! please provide me a sample? just a simple procedure for it. thanks again

        • Yes, no problem, this is an example (but remember, this not work correctly until the next version)

          procedure TForm1.Button1Click(Sender: TObject);
          var
            Polyline: TPolyline;
          begin
            // create a TPolyline
            Polyline := GMPolyline1.Add;
            // set properties
            Polyline.Editable := True;
            Polyline.StrokeColor := clRed;
            Polyline.StrokeOpacity := 0.5;
          
            // create TLinePoint
            Polyline.AddLinePoint(41.2254, 2.22354);
            Polyline.AddLinePoint(41.2000, 2.22354);
            Polyline.AddLinePoint(41.3654, 2.23344);
            Polyline.AddLinePoint(41.4566, 2.23454);
          end;
          
          • Hi Cadetill,

            Thanks For The Sample, So That’s How It Was, I Just Thought The Linepoint has to be assigned too. thanks for the help. will wait for your next awesome version… getting too excited already.. thanks again

  25. Hola, estoy probando tus libreririas y me ha surgido una pregunta referente a si hay alguna forma de limitar la region del mapa que yo quiero ver solamente. Ej. enviarle la coordenadas x1,y1,x2,y2.

    Nada en espera de tu respuestas.

    Gracias por estos componentes.

    • Buenas Luis

      Ante todo gracias por probar los componentes.

      Respecto a la duda, si quieres que tu mapa mantenga unos límites (bounds) tienes que retocar 3 cosas del mapa

      1. quitarle el control de zoom (propiedad VisualProp.ZoomCtrl.Show
      2. que no pueda moverse (propiedad NonVisualProp.Options.Draggable)
      3. que no pueda hacerse dobleclick (propiedad NonVisualProp.Options.DisableDoubleClickZoom)

      Si los límites son conocidos, puedes usar el método LatLngBoundsSetBounds de TGMMap para establecerlos.

      Espero sea lo que quieres

      Nos leemos

      • Gracias por tu repuesta, lo probare en el día de hoy, y te hago saber.

        Aparte de todo, déjame felicitarte por estas librerías, son un gran aporte.

        Los frutos vendrán muy pronto.

        Gracias.

  26. Hola, estoy intentando obtener la ubicación de unas coordenadas (lat, lng) y cuando invoco el metodo de GMGeoCode1.Geocode(lat, lng), este me trae el tres resultado y por ende me pinta tres marker en el mapa, no se supone que debe traer solamente un solo resultado.

    La idea es enviarle las coordenada y este me devuerva los datos de esa coordenada.

    Nada en espera de tu respuesta.

    Gracias.

    • Buenas Luis

      Cuando geocodificas una lat/lng, Google puede devolver más de un resultado. Por ejemplo, si coges las coordenadas de una calle de una ciudad te devolverá (ej: 41,38086598 – 2,12257899):

      1. La dirección completa – type: street_address (Av de Juan XXIII, 10-12, 08028 Barcelona, España)
      2. El código postal – type: postal_code (08028 Barcelona, España)
      3. La localidad – type: locality, political (Barcelona, España)
      4. La provincia – type: administrative_area_level_2, political (Barcelona, España)
      5. La comunidad autonómica – type: administrative_area_level_1, political (Cataluña, España)
      6. Y el país – type: country, political (España)

      Si lo que quieres es saber la dirección, tendrás que ir a buscar el resultado que sea de type = street_address

      Espero haberte ayudado

      Nos leemos

      • Si estoy de acuerdo, pero cuando estoy realizando la búsqueda, se supone que toda esa información debe ser referente a las coordenadas mencionada, pero por lo que he visto, en el componente es que esta pinta o dibuja tres marker con información diferente.

  27. Otra coas, me gustaría saber si puedo realizar algunos cambios a los componentes, esto los haría si tu me lo permites, pero todo el código te lo enviaría para que lo valides y lo pongas como siempre lo haces publico.

    en espera de tu respuesta ?

  28. Un saludo, no se si a alguien mas le ha tocado el error que me da el browser, recien acabo de instalar la 0.1.5 y la 0.1.6 claro no ambas a la vez, pero las dos me tiran el error:

    Error en el script de Internet Explorer
    Error en el script de esta página
    Linea: 1062
    Carácter: 16
    Error: ‘google’ is undefined
    Código: 0
    URL: about:blank
    ¿Desea continuar ejecutando scripts en esta página?

    Y ya no despliega mapa alguno

    A alguien le ha ocurrido? Alguna solución?

    • Por cierto, despues de cerrar el diálogo de error del IE, salta el diálogo de excepcion de Delphi:

      —————————
      Debugger Exception Notification
      —————————
      Project VESuite.exe raised exception class EOleException with message ‘No se pudo completar la operación debido un error 80020101’.
      —————————
      Break Continue Help
      —————————

    • Hize el downgrade a la v 0.1.1, que era la que estaba utilizando anteriormente y para mi sorpresa, me lanzó el mismo error pero…

      Oh sorpresa, reinicié la laptop, corri el ejecutable sin el IDE, todo bien, lo corrí desde dentro de IDE, todo bien, instalé la 0.1.6 y todo bien…

      No comprendo dónde estuvo el error, así como apareció de la nada, desapareció.

      • Buenas Ricardo

        Pues nada, aunque algo tarde, me alegro de que lo hayas solucionado. Quizás el problema más que de los componentes fuera del IE (recuerda que el TWebBrowser no es más que una encapsulación del IE) y al reiniciar el ordenador (¿quizás por alguna actualización?) se solucionara el problema.

        Saludos

        • Saludos

          Al parecer el problema fué una conexion a internet lenta e intermitente, el wrapper no cargaba todo el contenido web.

          • Hola Ricardo

            Ante todo gracias por probar los componentes. Miraré a ver si se puede desactivar estas funciones. Lo malo es que el TWebBrowser no lo gestionan las GMLib. A ver si desde JavaScript se puede hacer alguna cosa 🙁

            Nuevamente gracias
            Saludos

  29. Hola amigo

    Ya he instalado tu componente en XE2 y quiero destacar que es muy fácil de instalar, las instrucciones breves, concisas y precisas, es decir, cero problemas, excelente.

    Abrí de inmediato la MegaDemo. Que decir, está genial. intentaré hacer algunas modificaciones (observaciones desde el punto de vista de un usuario vago) y te las hago llegar, no doy fechas porque yo si que soy un vago. pero prometo hacerte llegar algo pronto 🙂

    Gracias y felicidades por el componente.

    Saludos

    Saludos

  30. English man English for us plzzz

    • First of all, thanks you for test the components.

      You need to know that this is a spanish blog and all content are in spanish. However, if a person have a question about the components, he can ask me in english, french, spanish or portugues and I will respond in this language (or in english).

      If you have some doubt, feel free to ask about it in english (or another language that I say before) 😉

      Thanks again
      cadetill

  31. Excelente trabajo !!!! Muchísimas gracias por el trabajo !!!

  32. hi cadetill,

    i know, i know it’s me again….. hehehe thanks for the patience.

    see i have downloaded the newest version of the components. im glad things are much easier now. but i have another question. heres the thing. in TGMInfoWindow Component. i tried to load popups on runtime with a database access of coordinates. the procedure i did can load coordinates in small records but the thing is when the records increases so it the time it takes to load components. please check my procedure and tell me how to do things easier. here’s the procedure

    procedure AddPolylineInfoWindow(Lat,Lng,Contents:TStrings);
    var
      Polyline: TPolyline;
      I : Integer;
      X : TInfoWindow;
    begin
      // create a TPolyline
      Polyline := Form1.GooglePolyline.Add;
    
      // set properties
      //Polyline.Editable := True;
      Polyline.StrokeColor := clBlue;
      Polyline.StrokeWeight := 4;
      Polyline.StrokeOpacity := 0.5;
      Form1.ProgressBar1.Max := Lat.Count - 1;
      Form1.ProgressBar1.Min := 0;
      Form1.ProgressBar1.Position := I;
      for I := 0 to Lat.Count - 1 do
       Begin
       Form1.ProgressBar1.Position := I;
       if Form1.InfoWindow1.Checked then
        X := Form1.GoogleInfoWindow.Add(StrToFloat(Lat[I]),StrToFloat(Lng[I]),Contents[I]);
       Polyline.AddLinePoint(StrToFloat(Lat[I]),StrToFloat(Lng[I]));
       End;
      if Form1.InfoWindow1.Checked then
       begin
       X.AutoOpen := True;
       X.CloseOtherBeforeOpen := True;
       end;
    end;

    Please reply to me again….. thanks!!!!

    • EDIT:
      see i have downloaded the newest version of the components. i am glad things are now much easier. but i have another question. heres the thing. in TGMInfoWindow Component. i tried to load popups on runtime with a TStrings access of coordinates. the procedure i did can load coordinates in small records, but When the records gets bigger, it Increases the time it takes to load the Popups. Please check my procedure and tell me how to do things easier.

  33. Hola. Muchas gracias por la información. Me gustaría saber si es que acaso en la Clase TGMMap, en la capa Transit, se pueden agregar rutas de transporte público de una ciudad determinada, en caso de no encontrarse en la lista de ciudades compatibles. Mi idea es poder llegar a crear una aplicación que use Google maps, y muestre un posible recorrido de transporte público para una ciudad que no está en la lista a partir del punto de origen y el punto de destino.
    De antemano, gracias.

    • Hola Felipe

      Pues lamentablemente este tema no depende de los usuarios que usamos el API de Google Maps, sino más bien directamente de Google, ya que son ellos los que incluyen estas rutas, no los usuarios.

  34. Error en TWebBrowser

    Un saludo, sin querer encontré un error, no tiene que ver directamente con los componentes GM pero es un riesgo latente, he hecho el reporte en el sitio de Google Project pero creo que no está de más informarlo al resto de la comunidad:

    F5 Update error inside the WebBrowser Window

    Reported by ME :), Sep 25, 2012

    What steps will reproduce the problem?
    1. Start a new blank project.
    2. Add a TWebBrowser component onto a blank form.
    3. Add a TGMMap, link it to the WebBrowser and setup the minium code for map display.
    4. Run the project.
    5. Inside the WebBrowser press F5.

    What is the expected output? What do you see instead?
    An exception raises: Project Project.exe raised exception class EOleException with message ‘Argumento no válido’.

    What version of the product are you using? On what operating system?
    – GMLib 0.1.7
    – Embarcadero Delphi XE2 Version 16.0.4429.46931 Update 4
    – Windows XP Pro Spanish (Build 2600: SP3)
    – Under VirtualBox 4.1.22r80657

    Please provide any additional information below.

    The error raises on Line 304 of WebControl.pas
    Result := Forms.Item(FormNumber, ”) as IHTMLFormElement

    The var FormNumber contains the value -1, that can be the source of the error.

  35. How to disable scrollbars in GMMAP WEbBrowser?

    The code below does not work.

    procedure TfrmMain.WebBrowser1DocumentComplete(Sender: TObject;
    const pDisp: IDispatch; var URL: OleVariant);
    begin
    Application.ProcessMessages;
    WebBrowser1.OleObject.Document.Body.Style.OverflowY := ‘hidden’;
    end;

    • Hi nasaman

      In the new version of GMLib I will do this feature 🙂

      Until this release, you can do this:
      1.- open resources/map.html with a text editor (like notepad, notepad++,…)
      2.- add this code

      <script language=javascript>
        document.documentElement.style.overflowY = 'hidden';
      </script>

      3.- compile resources with resources/rc.cmd
      4.- recompile the GMLib

      That is all

      Regards

  36. hola cadetill,

    agradecerte que hayas publicado los componentes, son muy útiles y fáciles de usar, enhorabuena por la “currada” y ánimo para continuar mejorándolos

    entrando en materia, estoy probando la versión v.0.1.8, en Delphi XE3 y me surge lo siguiente:

    se instalan perfectamente siguiendo las instrucciones, sin embargo al intentar probarlos me ocurre lo siguiente con la MegaDemo: al abrir el proyecto salta “A component named Label10 already exists”. Después de ignorar el error te abre el proyecto pero al intentar compilarlo falta “GMBase.dcu”.

    He comprobado que en la carpeta src de los componentes (en esta v.0.1.8) no aparece GMBase.pas, he descargado la v.0.1.7 y en esta sí que aparece así que he copiado el GMBase de la otra versión en la nueva y ahora ya compila pero aparecen errores.
    Lo mismo en las otras demos, aparecen errores de parámetros , etc

    Quisiera saber pues, si es algún detalle de la nueva versión o que símplemente las demos no están adaptadas a todos los cambios introducidos.

    En cualquier caso sería interesante poder probar las demos con los nuevos componentes.

    saludos y ánimos para seguir con este gran proyecto

    • Hola halconmilenario

      Ante todo gracias por probar la GMLib.

      Efectivamente, la MagaDemo veo que da ese error. Para solucionarlo simplemente ignorar el error (se perderá un label de una pantalla, pero bueno, no pasa nada -lo corregiré para la próxima versión-).

      Con lo referente a GMBase.dcu, esta es una unidad que ha desaparecido en esta nueva versión. No debería de darte este problema (de hecho acabo de probarlo y no me lo ha dado). No obstante, mira que en los uses no haya ninguna referencia a esta unidad y, en caso de haberla, quítala. Si siguieras con problemas, podría enviarte por correo los binarios de la MegaDemo.

      Ya me contarás

      Saludos

  37. Buenas tardes
    estoy tratando de instalar la libreria en delphi 7 y me marca un error que donde dice

    requires

    indy,

    segun yo ya instale los paquetes indy pero aun asi no me funciona

    me podrian auydar??

  38. Hola nuevamente

    Se que es una pregunta tonta pero ando un poco perdido

    me marca un error en las funciones AnsireplaceStr

    estoy trabajando con delphi 7

    algo me falta?

  39. ya no me marca ahi agregue la unidad strutils

    ahora me marca error en este

    UTF8ToString

    que tengo que agregar ?
    Gracias

  40. Pues en lugar de usar

    // UTF8ToString

    Memo1.Lines.Text := ANSISTRING(Stream.DataString);

    // modifique el utf por el ansi y corrio el ejemplo

    es el primer ejemplo que estoy probando donde

    me regresa

    {
    “results” : [
    {
    “address_components” : [
    {
    “long_name” : “Chihuahua”,
    “short_name” : “Chihuahua”,
    “types” : [ “locality”, “political” ]
    },
    {
    “long_name” : “Chihuahua”,
    “short_name” : “CHIH”,
    “types” : [ “administrative_area_level_1”, “political” ]
    },
    {
    “long_name” : “Mexico”,
    “short_name” : “MX”,
    “types” : [ “country”, “political” ]
    }
    ],
    “formatted_address” : “Chihuahua, Mexico”,
    “geometry” : {
    “bounds” : {
    “northeast” : {
    “lat” : 28.77290820,
    “lng” : -105.96128960
    },
    “southwest” : {
    “lat” : 28.55867740,
    “lng” : -106.16710590
    }
    },
    “location” : {
    “lat” : 28.6305810,
    “lng” : -106.07370
    },
    “location_type” : “APPROXIMATE”,
    “viewport” : {
    “northeast” : {
    “lat” : 28.77290820,
    “lng” : -105.96128960
    },
    “southwest” : {
    “lat” : 28.55867740,
    “lng” : -106.16710590
    }
    }
    },
    “types” : [ “locality”, “political” ]
    }
    ],
    “status” : “OK”
    }

    esta bien con el ansi??

    • Hola Omar

      Para poder ayudarte necesito que seas más específico con el problema indicando qué demo intentas ejecutar, en qué unit/procedure/método te da el error,…..

      Con tan poca información no se por donde mirar.

      Nos leemos

  41. Hola Cadetill,

    Me gustaría que me tome una pregunta: El uso de GMlib, ¿cómo puedo saber si un marcador se encuentra dentro de un polígono?

    ¡gracias

    • Hola Pedro

      Si te refieres dentro del área del polígono, con el único que podrás saberlo es con el rectángulo, ya que éste se forma con un LatLngBounds y esta clase tiene un método (no obstante este método se debería de implementar porque actualmente no lo está).

      Si a lo que te refieres es saber si un punto está dentro del array de TLinePoints, pues deberías de recorrer dicho array y cada posición usar el método GetLatLng que te devolverá un TLatLng y así poder usar el método IsEqual de esta clase.

      Espero te sirva

      Saludos

  42. Maximum level of MaxZoom 15?
    MaxZoom level rise is there?

  43. Hi Cadetill,
    Thanks a lot for sharing this component.

    I’ve tried to compile gmlib_0.1.8 using C++ builder 2010 but failed.
    Detail:
    1 ) GMLib_C2010.cbproj is the project I use.
    2) GMBase.pas and GMSize.pas not there. So I copied them from gmlib_0.1.7.
    3) After copied these two files, I could compile but got a link error:
    Checking project dependencies…
    Building GMLib_C2010.cbproj (Release configuration)
    [ILINK32 Error] Fatal: Unable to open file ‘DB.OBJ’
    I have no clue why this happened.

    Thanks again for your help.
    Regards.

    • Hi Robbert

      I don’t have C++Builder 2010 to test it but…. GMBase and GMSize are two units obsoletes. If exist some references to they, delete it, there are not required. DB unit is required into the GMElevations unit. This unit is a Delphi/C++ unit, what version of C++ have you, standard?

      Regards

      • Thanks cadetill.

        I could install the VCLs now:

        C++ 2010 Installation steps in case someone needs it:
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Open project “GMLib_C2010.cbproj”
        2. Remove GMBase and GMSize from the project( defined in GMLib_C2010.cbproj ).
        3. Add db.pas into project. You can find it from ..\Program Files\Embarcadero\RAD Studio\7.0\source\Win32\db”
        4. Right click on “GMLib_C2010.cbproj.bpl” and click “Install”
        5. Go to “Tools > Options > Environment Options > C++ Options > Path and Directories””
        Click “Include Path > […]” button
        Browse to the “\lib\C2010” folder and press “OK”, “Add”
        Click “Library Path > […]” button
        Browse to the “\lib\C2010” folder and press “OK”, “Add”

        Some small issues:
        1) version not updated in Design Packages
        GoogleMaps Library v0.1.6(xxx) -> should be v0.1.8 isn’t it?
        2) I’ve created a test application, and just added GMMAP VCL. if “Build with runtime pacakges” is unchecked, build will fail with these two errors:
        [ILINK32 Error] Error: Unable to open file ‘UABOUTFRM.DFM’
        fix: Copy the file from ./src to project’s root directory or add ./src to “Library Path”
        [ILINK32 Error] Error: Unable to open file ‘GMMAPRES.RES’
        fix: Add the file from ./resource to project
        If you check “Build with runtime pacakges”, the application will be built without any error.

        Cheers.

  44. Estoy probando la versión 0.1.8 para XE3 pero no has incluido el fichero
    GMBase.pas
    lo he pillado de la versión 0.1.7 y con esto me compila y me instala los componentes,
    pero no me funcionan las demos, por ejemplo la demo de GMPolyline me da 8 errores de compilación
    [dcc32 Hint] UGMPolylineFrm.pas(342): H2443 Inline function ‘Point’ has not been expanded because unit ‘System.Types’ is not specified in USES list
    [dcc32 Error] UGMPolylineFrm.pas(576): E2009 Incompatible types: ‘Parameter lists differ’
    [dcc32 Error] UGMPolylineFrm.pas(583): E2009 Incompatible types: ‘Parameter lists differ’
    [dcc32 Error] UGMPolylineFrm.pas(590): E2009 Incompatible types: ‘Parameter lists differ’
    [dcc32 Error] UGMPolylineFrm.pas(633): E2009 Incompatible types: ‘Parameter lists differ’
    [dcc32 Error] UGMPolylineFrm.pas(640): E2009 Incompatible types: ‘Parameter lists differ’
    [dcc32 Error] UGMPolylineFrm.pas(647): E2009 Incompatible types: ‘Parameter lists differ’
    [dcc32 Error] UGMPolylineFrm.pas(654): E2009 Incompatible types: ‘Parameter lists differ’
    [dcc32 Fatal Error] GMPolyline_Demo.dpr(5): F2063 Could not compile used unit ‘UGMPolylineFrm.pas’

    gracias

    • Hola Cocute

      GMBase ya no se incluye en el proyecto de la GMlib. Si se hace referencia a él bórrala que es un error.

      Por otro lado decirte que la única demo funcional es la MegaDemo, las demás demos no he tenido tiempo a actualizarlas.

      Saludos

  45. Cadetill, gracias por compartir estos excelentes componentes…Los estoy incorporando a una aplicación que estoy construyendo.

    Tengo una consulta.

    Se que existe la posibilidad de al hacer click sobre la marca o pasar el ratón sobre ella desplegar información.

    Lo que requiero es poder desplegar el icono y el Title juntos. Me puedes hechar un cable.

    Muy agradecido.

    • Hola cloayza

      Un title es como la propiedad Hint de los componentes, sólo aparece cuando pasas el ratón por encima del componente (en este caso un marcador). Si lo que quieres es tener un marcador con su texto visible, tendrás que usar un marcador estilo mtStyledMarker y establecer la propiedad StyledMarker.StyledIcon como siBubble

      Espero te sirva

      Saludos

  46. “Hola Cocute
    GMBase ya no se incluye en el proyecto de la GMlib. Si se hace referencia a él bórrala que es un error.
    Por otro lado decirte que la única demo funcional es la MegaDemo, las demás demos no he tenido tiempo a actualizarlas.”

    “Hello Cocute
    GMBase no longer included in the project GMlib. If you refer to it is a mistake to delete it.
    On the other hand say that the only functional demo is megademo, other demos I have not had time to update them.”

    Hello,

    it’s a pity! All your efforts in develop such a framework is for nothing if you are not able
    to manage it, that your demos works well. The GMBase issue cost me a lot of time, because
    a other similar framework uses the same Unit-Name. (http://www.delphipraxis.net/157004-google-maps-ueber-com-component-object-model.html). I can confirm the megademo works. All other examples has failed. I use D2010. I hope you have the time to fix the demos and I will test your promising framework again. I appreciate your work!
    Kind Regards, Mark

    • Hi Mark

      I know this framework (I don’t have test it) but I can’t do nothing if it use the same (or similar) names 😉

      For the next version, I will try to make up to date all demos. I don’t know when it will finish because is costing me more than expected to make it compatible with FMX.

      Regards

  47. Hi,

    Not sure if you’re aware of this, but the latest version is missing two critical source files.
    There’s no “GMBase.pas” included anywhere in the zip file.
    And “GMSize.pas” is also missing.

  48. hii
    i want to detect point is inside polygon or no ?
    google map had this function in java
    google.maps.geometry.poly.containsLocation(point, poly)
    how can use this in your componnet?

    and other quastion :
    please give me simple code of how can i add polygons to my map ?i cant learn with your demo codes

    thank u

    • Hi nima

      I don’t knew of this feature. I will implement it in future versions.

      Demo:

      var
      Poly: TPolygon;
      begin
      // firts of all you need to create a TPolygon
      Poly := TPolygon(FGMPoly.Add);
      // and now, add the points
      Poly.AddLinePoint(31.555, 2.222);
      Poly.AddLinePoint(31.444, 2.333);
      Poly.AddLinePoint(31.333, 2.111);
      .....

      Regards

      • thank u very much for your fast answer im just had other quastion
        after i create polygone, when user changed the patch with moving polygone point on the map
        i want to know index of the point is changed by user because i need to save polygone points lat and lng on the text file and if user changed the polygone points in application i must edit saved points lat and lng

  49. I keep getting ‘inital page not loaded’ error and have to wait sometimes up to 3 minutes before I can call DoMap. How do I get this to load quickly?

    • Hi Kevin

      On OnCreate event or in design time (for example) put GMMap1.Active to true. Now you need to put this code on the AfterPageLoaded event:

      procedure TForm1.GMMapChr1AfterPageLoaded(Sender: TObject; First: Boolean);
      begin
      if First then GMMapChr1.DoMap;
      end;

      • Thank you, that worked. You are doing an amazing job on these components.

        Now for another question; I am trying to draw a polygon from stored geocoded addresses, and it’s drawing it on my map, but it’s not drawing it the way I would like. If I sort my coordinates by lat, I get a side to side zig-zag, and if sorted by lon, I get an up down zig-zag. Is there anyway to get the polygon to draw around the area I want?

        • Hi Kevin

          The order that you adds the polygon points in the creation is very important. If you ordain the points by lat, you will get a different polygon if you ordered by lng. To obtain the desired polygon don’t orders the points.

          Regards

  50. Buenas estoy usando la libreria y al momento de instalarlo no me aparece como las instrucciones lo menciona aunque logre instalarlo pero me pide un dcu que es el de GMBase.dcu no logro encontrarlo

    Por otra parte funciona pero ahy un detalle al momento de jalar con el mause el mapa como regularmente lo hace en el google maps, sale un error de referencia Access Violation at address 004034aa in module

    • Hola Edgar

      Gracias por probar la GMLib.

      Referente al tema de la dcu que te pide. Como he comentado en algún mensaje anterior, las 2 dcu que puede “pedirte” ya no pertenecen al proyecto. Si en algún lugar te las pide, borra las referencias a ellas ya que es un error. Si lo que estás es mirando las demos, decirte que sólo la MegaDemo está puesta al día con las actualizaciones.

      Referente al error que te da…. necesito más datos para poder ayudarte.

      Saludos

  51. Hola Cadetill.

    Estoy empezando a ver tus componentes de Gmlib. En un principio creo que cumplen mis expectativas y mucho mas para un trabajo que voy a hacer. GRACIAS. Lo único que no me cuadra bien es el componente twebbrowser (delphi xe2) que con html5 me da ¿problemas? y el que tu usas o recomiendas CDEF3 da menos problemas pero también me hace cosas ¿raras ?. Conoces algún otro que vaya muy bien con html5, json, …. etc. ¿? De nuevo GRACIAS.

    Saludos.

    • Buenas Vicente

      Ante todo gracias por probar GMLib.

      Respecto a tu pregunta, la verdad es que no he probado más que los que mencionas, así que no sabría decirte de los demás que puedan haber en “el mercado”.

      Nos leemos

  52. hello
    i really need to use this function in componnet plase help me 🙁
    google.maps.geometry.poly.containsLocation(point,polygon)
    this fuction detect point is inside the polygone or no

  53. Hola Cadetill.
    Felicitaciones por el trabajo con la GMLib. Es en verdad exelente.
    Queria aprovechar para consultarte por el metodo SetCenter del mapa. Me esta dando “Script error” con el siguiente mensaje “Unable to get value of the property ‘FromLatLngToPoint'”. Object is null or undefined.

    Si me puedes ayudar te lo agradeceria mucho.
    Saludos.

    • Hola Pablo

      Acabo de liberar una nueva versión de los componentes. Prueba y me comentas.

      Saludos

      • Hoa Cadetill.
        Muchas gracias por la pronta respuesta.
        Encontre el problema. Era que no inicializaba la propiedad “center” de “requiredProps” antes de hacer el “doMap” por lo que la propiedad “FromLatLngToPoint” quedaba nula.

        De todas formas ya aproveché y actualicé a la nueva versión que está muy buena.
        Felicitaciones.

        Saludos.
        Pablo Rivero

  54. Gracias por tu gran trabajo y dispculpa que te moleste con mis dudas, serias tan amable de mostrarme un ejemplo de TGMInfoWindow lo estoy trabajando en C++Builder XE3 pero tengo problemas, muchas gracias Saludos.

    • Buenas Salomon

      Ante todo gracias por usar los componentes. Te muestro cómo hacerlo en un ejemplo en Delphi que imagino no te costará llevarlo a C++

      var
        IW: TInfoWindow;
      begin
        // forma 1
        GMInfoWindow1.Add(0, 0, 'un texto en formato HTML o texto plano');
      
        // forma 2
        IW := GMInfoWindow1.Add;
        IW.CloseOtherBeforeOpen := False;
        IW.Position.Lat := 0.05;
        IW.Position.Lng := 0.05;
        IW.HTMLContent := 'Otro texto';

      Nos leemos

      • Gracias por tu respuesta, así es como lo uso pero no me funciona, cuando se ejecuta:

        GMInfoWindow1->Add(17.50,-99.5,”SALOMON”);

        No pasa nada no se muestra la ventana; trate de usar esto:

        GMInfoWindow1->Add(17.50,-99.5,”SALOMON”);
        GMInfoWindow1->Items[0]->OpenClose();

        Y ahora si me lo muesta pero en la posicion que le estoy dando, aunque al inspeccionar las variables de GMInfoWindow1->Items[0]->Position si son las correctas pero en el mapa
        no.

        No se que pasa por que los demas componentes me funcionan muy bien.

        Saludos

  55. I am really thanks for your work. Now I can make my program shows google map :).

    But I have problem, when I drag webbrowser and then release drag, it show Access Violation. I am not using ondrag or afterdrag event, I just slide to see another part of the map.

    Here the screenshoot: http://i97.photobucket.com/albums/l223/afin_x/gmaperror_zps6c191d60.jpg

  56. Fantástico trabajo. Creo que nos ha simplificado mucho el trabajo para hacer “cositas” con GMaps.

    Utilizo tu librería para posicionar ciertos elementos estáticos (utilizo TCircle) y otros dinámicos (TMarker) sobre el mapa con iconos propios bastantes pequeños. Los dinámicos actualizan su posición en “cuasi-tiempo real” estando la información disponible cada 5 segundos aproximadamente .

    Al iniciar el aplicativo, como tiene que insertar tantos objetos en el mapa, a veces sale el mensaje de que si se desea detener la ejecución del script porque se éste va muy lento.

    ¿Hay alguna forma de saber si la página web no está ejecutando ningún script? He probado con las propiedades del TWebBrowser y no he conseguido nada. Básicamente lo que quiero conseguir es esperar hasta que la web termine de ejecutar los scripts, para luego seguir haciendo cosas en el mapa.

    Por otra parte, la fuente de información (cambios de posición) está disponible desde distintos lugares. Mi intención inicial era crear un hilo independiente por cada fuente y modificar la posición de los TMarker dinámicos relacionados con cada fuente, accediendo al mapa concurrentemente. Evidentemente con mecanismos de concurrencia de procesos. El problema es parecido al anterior, al ir cada hilo por libre, la página web no da abasto a modificar los elementos y no hace nada. Al final, decidí los accesos a las distintas fuentes de forma secuencial, y darle tiempo a la página a refrescar. Sabiendo cuando ha finalizado la modificación de un hilo se podría comenzar el siguiente. ¿Se puede hacer algo?

    Lo dicho. Enhorabuena por el trabajo.

    Saludos.

    Álvaro

    • Hola Álvaro

      Ante todo, gracias por probar/usar los componentes.

      Referente al tema de cargas masivas, decirte que si son marcadores, hay una opción de carga masiva (actualmente preparado sólo para CSV, pero se podría mirar de hacer para preparar otro tipo de carga) que carga unos 100 marcadores/seg, con lo que en pocos segundos puedes llegar a cagar cientos de marcadores. Con eso ya evitarías el problema del script.

      El tema de la aplicación multihilo, la verdad es que no he probado los componentes en esa situación. Si te apetece, mediante skype podemos echar una charla y te explico cómo funcionan internamente a ver qué se puede hacer.

      Gracias de nuevo

      Saludos

      • Gracias por la respuesta.

        El problema de la carga es que los datos se leen desde una BBDD y habría que crear un fichero csv por cada fuente de información (son objetos distintos de la misma clase) y dependiendo de los permisos de escritura se podría hacer o no. He estado revisando el método LoadFromCSV de la clase y en mi código no hago cosas distintas a las que se hace en el método. Los marcadores que utilizo son los elementos dinámicos, por lo que la carga no es siempre de los mismos elementos.

        Puede ser que la máquina donde estoy probando vaya justita, y además el acceso a internet deja mucho que desear. A veces sale y a veces no el mensaje. El problema se presenta al añadir los TCircle a un objeto TGMCircle creado en tiempo de ejecución. Cada objeto de fuente de datos (todos de la misma clase) tiene un objeto TGMCircle a los que se añaden los TCircle. He probado primero añadir los TCircle y después asignar el mapa al TGMCircle o añadir los TCircle ya asignado el mapa al TGMCircle. En tiempo de ejecución da más o menos lo mismo.

        Por ahora no tengo disponible Skipe. Ya te contaré mis progresos. La verdad, una vez arrancado y realizando las actualizaciones de posición de forma secuencial por cada fuente de datos (hay 14) va perfectamente. Con hilos de ejecución he conseguido que se actualice, pero no se gana nada de tiempo y no me gusta el efecto. Parece ser que utilizando el método Synchronize del hilo, te actualiza los marker del mapa todos a la vez.

        Muchas gracias otra vez y si hago avances te cuento.
        Álvaro

        • Hola de nuevo Álvaro

          Con respecto a la carga de datos, lo más importante es que desactives la propiedad AutoUodate y que, una vez cargados todos, ejecutes el método ShowElements. Este método en el TGMMarker es público, pero en TGMCircle es protected (voy a hacerla public en todos los componentes para la próxima versión). Si no desactivas el AutoUpdate, lo que hace el componentes es crear y mostrar el objeto en el mapa, desactivando, primero crea todos los objetos y luego los muestra todos de golpe.

          También puedo preparar una función de carga desde un DataSet para próximas versiones 😉

          Nos leemos

  57. Otra cosa cadetill.

    He notado que según se va ejecutando el programa aumenta el consumo de memoria considerablemente.
    Una vez cargado los datos, creados los objetos en tiempo real del programa y los TCircle y TMarker en el TGMMAP/TWebBorwser, ya no se crean más objetos.

    La ejecución del programa consiste básicamente en cambiar la posición de los TMarker.
    ¿Puede esto aumentar la menoria del proceso?

    Si no es así seguiré investigando a ver donde me consume tanta memoria.

    Gracias de antemano.
    Álvaro

  58. Hello Dear Admin
    is google.maps.geometry.poly.containsLocation (point, poly) option addet to componnet in release V 0.1.9 ?im waiting for long time for new release

  59. Hi, please, is possible to use GMLib in Delphi XE ?
    I try to compile D2010 or XE2 version, but both with errors 🙁
    Thanke for answer,
    Petr

  60. Hi, thanks, I tryed latest version 0.1.9, but there is only version for XE2 and XE3, of course not XE. I need in my project other components witch I have in XE only, so I cannot upgrade to XE2 or 3 :-(.
    Hope for new release with XE soon 🙂
    Regards,
    Petr.

  61. Hola cadetil.

    Trabajo con Sergio (bitfarm), creo que lo conoces. Estamos empezando a utilizar las GMLib (v.0.1.9) y me he encontrado con el siguiente problema. Quiero crear/actualizar una lista de TMarkers asociados a un objeto TGMMarker. Tengo puesta la propiedad “autoupdate=false”. Cuando inserto o modifico los TMarkers y llamo al método ShowElements no se dibuja nada en el mapa. He estado ojeando el código y he visto que el método TCustomGMMarker.ShowElements llama al método ChangeProperties de cada uno de sus items. Lo extraño es que el método ChangeProperties comienza con una cláusula if con un montón de condiciones que si no se cumplen lanzan un exit. Entre esas condiciones está ésta

    not TCustomGMMarker(TCustomMarkers(Collection).FGMLinkedComponent).AutoUpdate

    con lo que nunca se llega a dibujar nada.

    He probado a quitar el not inicial y entonces todo funciona correctamente.

    ¿Hay algo que se me escape? ¿Es posible que no esté utilizando bien el componente?

    Un saludo,
    Adrián Vives.

    • Buenas Adrian

      La verdad es que la propiedad AutoUpdate inicialmente estaba pensada para funcionar de forma diferente a lo que lo hace en la actualidad y esa condición ha quedado heredada de código viejo.

      Realmente esta linea no debería estar:

      not TCustomGMMarker(TCustomMarkers(Collection).FGMLinkedComponent).AutoUpdate or

      Miraré sus efectos y haré las correcciones necesarias para la próxima versión.

      Gracias

      Nos leemos

  62. dear admin
    is it possible to use your component in firemonky apps?

  63. Hola de nuevo Cadetil.

    Te aviso de unas propiedades que actualmente están inaccesibles desde código y sería interesante tener disponibles.

    Se trata de las propiedades:

    Tpoliline.icon.icon.FillColor
    Tpoliline.icon.icon.StrokeColor

    El resto se pueden modificar por código (fillOpacity, strokeOpacity,…) pero estas no. Así que si intentas dibujar por código (creando las polilineas por código, claro) puedes obtener líneas punteadas (dashed) pero siempre en rojo (color por defecto al parecer).

    Veo que puede ser algo complicado porque el objeto Tpoliline.icon.icon es un TCustomSymbol que tiene como published las siguientes propiedades:


    property FillOpacity: Real read FFillOpacity write SetFillOpacity; // 0 to 1
    property Path: TSymbolPath read FPath write SetPath;
    property StrokeOpacity: Real read FStrokeOpacity write SetStrokeOpacity; // 0 to 1
    property StrokeWeight: Integer read FStrokeWeight write SetStrokeWeight; // 1 to 10

    Pero es la clase TSymbol, que hereda de la anterior, la que publica las propiedades de color:


    property FillColor: TColor read FFillColor write SetFillColor;
    property StrokeColor: TColor read FStrokeColor write SetStrokeColor;

    Ahí lo dejo, no sin antes agradecerte estas completas y utilísimas librerías. Buen trabajo.

    Un saludo,
    Adrián.

    • Hola Adrian

      Sí, conozco este dato y miraré de solucionarlo en próximas versiones. Hoy por hoy sólo puedes acceder a las propiedades de tipo TColor por código mediante un casteo a su clase.

      Para hacer compatible las GMLib con FMX, una de las propiedades afectadas son las de color (TColor para VCL) que para FMX tienen que ser TAlphaColor. Para lograrlo, la jerarquía de clases suele ser algo así: TCustomMiClase (con todas las propiedades menos las de color) –> TMiClase (con las propiedades de color). La propiedad que se publica es de tipo TCustomMiClase pero la que realmente se crea es de tipo TMiClase gracias al polimorfismo. Por eso en el Inspector ves todas las propiedades, pero por código no.

      En el caso que expones, la clase publicada es TCustomSymbol, pero internamente se crea un objeto de tipo TSymbol. Así pues, si haces
      TSymbol(Tpoliline.icon.icon).FillColor
      podrás acceder a las propiedades de color.

      Sé que no es lo más elegante, pero hasta una próxima versión en que lo arregle es lo que hay 😉

      Nos leemos

  64. Hola Cadetill nuevamente vuelvo a utilizar tus componentes despues de algo de tiempo, excelente trabajo por cierto 🙂

    Mira estoy intentando Obtener los valores de un GMMarker1

    Primero que nada ya tengo en una tabla Latitud, Longitud y Titulo, todo perfecto, pero quiero mostrar en un MessageBox por ejemplo esos mismos datos, o por lo menos el Titulo que aparece cuando coloco el mouse sobre el. Pero no he podido encontrar la forma adecuada, mira hago lo siguiente en el DobleClick:


    ShowMessage(GMMarker1.Items[0].Title);
    Query1.Locate('ID', GMMarker1.Items[0].Title, [loCaseInsensitive, loPartialKey]);

    Si lo escribo asi solo me muestra el registro 1 y no se como saber que numero de Item es esa Marca, Lo de abajo es porque quiero que me sincronice el Marcador que selecciono con el registro que almaceno esos datos para que se vea la demás información en los DBEdits, pero tampoco funciono ya que ni siquiera se mueve la DBGrid 🙂

    No se si me podrías dar una idea de como obtener el Titulo de mi Marcador que es el nombre del registro y así inventarme algo para que se sincronice con el Datasource supongo, o directamente con la DBGrid que tiene los datos.

    Saludos

    • Hola Erik

      Si estás usando el evento DblClick del TGMMarker, tienes el parámetro Index que es el índice del TMarker dentro del array de marcadores. También tienes el parámetro LinkedComponent, que casteándolo a un TMarker, tienes el propio marcador. Cualquiera de los dos parámetros te sirven para acceder al título del marcador.

      Nos leemos

  65. Hola de nuevo Cadetill gracias por tu respuesta, ya intente lo que me dijiste GMMarker1.Items. -> y me despliega la ayuda y ahi veo la informacion que necesito, como el titulo y numero de item actual ZIndex

    Escribo lo siguiente:


    GMMarker1.Items.ZIndex;

    Pero me marca error al compilarlo porque necesita saber en que numero de Item estoy:


    GMMarker1.Items[?].ZIndex;

    Se que necesita que le diga que numero de item esta actualmente seleccionado para poder mostrarme los datos, por ejemplo


    GMMarker1.Items[?].Title;
    GMMarker1.Items[?].ZIndex;
    GMMarker1.Items[?].Position;
    GMMarker1.Items[?].Animation; // Saber el item actual ayudaría a solo Animar al seleccionado y al cambiar dejar de animarlo

    Vi que con GMMarker1.VisualObjects.Count me dice cuantos elementos se cargaron pero lo que si no he logrado conseguir es poder decirle al GMMarker1 el numero de Item actual, no se si me pudieras dar alguna referencia porque ya lo intente inventando varias cosas pero no me detecta el que presiono, y por ende no puedo acceder a los demas datos.

    Tal ves sea una cosa sumamente facil pero ya le intente bastante y nada que doy con la solucion ojala me puedas orintar, saludos

    • Hola de nuevo Erik

      Como te digo, si lo haces des del DblClick del TGMMarker, tienes el parámetro Index que te da ese índice que quieres

      GMMarker1.Items[Index].Title;

      Así como el parámetro LinkedComponent que es el propio Item

      TMarker(LinkedComponent).Title;

      Si lo haces desde otro lado que no sea un evento del TGMMarker, pues ya depende de ti saber el Item al que quieres acceder.
      Si lo que quieres es recorrer en un bucle todos los items, un simple bucle te basta

        for i := 0 to GMMarker1.Count - 1 do
        begin
          GMMarker1[i].Title := 'ooooo';
        end;

      Nos leemos

      • Muchisimas gracias Cadetill como siempre, me imagine que seria algo sencillo pero nada que le encontre, muchas gracias voy a probar lo del bucle para ver si puedo animar solo el marcador que seleccione de mi DBGrid ya mas o menos tengo una idea, la cual consiste en recorrer todos los marcadores y si coincide alguno con el titulo que lo Anime 🙂 ya te contare, muchas gracias y un saludo 🙂

        • Por si a alguien le sirve aqui les dejo como le hice para poder animar solo el Marcador que esta relacionado con mi DBGrid y que al seleccionar otro deje de Animar al anterior:

          procedure TForm1.DBGrid1CellClick(Column: TColumn);
          Var
          i: Integer;
          begin
          if GMMarker1.Items[PosicionAnterior].Animation.Bounce = True then
          GMMarker1.Items[PosicionAnterior].Animation.Bounce:= False;

          for i := 0 to GMMarker1.Count – 1 do
          begin
          if GMMarker1[i].ZIndex = UniQuery1.RecNo – 1 then
          GMMarker1.Items[i].Animation.Bounce:= True;
          PosicionAnterior:= UniQuery1.RecNo – 1;
          end;
          end;

          Lo que hice como me dijiste fue recorrer con un Bucle los marcadores, cuando pasa por el marcador que coincide con mi registro en la Grid, entonces lo anima, guardo esa posición de la grid en una variable que se llama PosicionAnterior y cuando selecciono otro elemento de mi grid con un click checo si ese marcador esta Animado, si lo esta lo desactivo y recorro nuevamente buscando el actual.

          Esta muy chapucero y nada elegante pero hasta ahorita me esta funcionando 🙂 un saludo.

  66. Thank you for your effort on this lib. Very nice. While working with the GMDirections stuff, i noticed it computes and renders a route on the map just fine, but if i try to iterate through the routes in code the count is 0? I can’t seem to access all the routes and leg info. Any ideas? I’m using Delphi 7 with gmlib 0.1.9.

    • Hi Kevin

      Thanks to use this suit of components.
      Can you send me a demo program with your problem via e-mail? (you have my e-mail address at ChangesLog.txt file for example).

      Thanks
      Regards

  67. No tengo como agradecer algo de esta magnitud pienso en tantas aplicacione que no se por cual empezar

  68. Hola Xavier.
    Estoy echándole un vistazo a los componentes, cosa que quería hacer desde hace tiempo. Tengo algún proyecto que trabaja con mapas (temas de GPS, tracks, waypoints,…-http://www.ibpindex.com/index.asp-) y estoy planteándome utilizar en él los componentes, ya que superan con mucho lo que yo tengo hecho de forma “manual”.
    Haciendo pruebas, se me ha planteado una duda, que seguramente se puede realizar, pero que a primera vista con el ejemplo y el código no he sabido encontrar.

    Se trata de centrar el mapa a partir de una ruta (polyline); El centrado no es problema, utilizando el método “CenterMapTo” de la propia clase, pero lo que no consigo es adecuar el zoom para que se ajuste también a esta polyline. Es decir, poder calcular el zoom óptimo para visualizarla (el mayor posible, sin perder puntos).

    El primer paso imagino que podría ser calcular el área que contiene todos los puntos, cosa que se podría realizar utilizando “LatLngBoundsExtend” sobre los puntos de la polilinea (no se si hay otra más eficiente), pero lo que no acabo de ver es cómo calcular el “zoom óptimo” para esta zona.

    Espero no “molestar”mucho.

    P:D: Ya lo he comentado en el foro, pero considero son un gran trabajo.

    Un saludo y gracias.

    _______________
    Germán

    • Hola Germán, un gusto “verte” por aquí 🙂

      Esto lo tengo implementado para los marcadores, pero la verdad es que para las demás figuras no se me había pasado por la cabeza implementarlo. Dado que es muy buena idea, lo haré para la próxima versión de los componentes (que no creo que tarde ya demasiado).

      A la que lo tenga implementado, si quieres te lo comento y, si no quieres esperarte a que libere la próxima versión, te lo descargas vía SVN 😉

      Un abrazo y gracias a ti por probar los componentes

      Nos vemos

      • Hola Xavier.
        Gracias por la pronta respuesta.
        Te lo agradezco. Si me avisas cuando lo tengas, lo descargo directamente.

        Un saludo.

        _____________
        Germán

        • Hola Germán

          Pues ya lo tienes, puedes descargártelo mediante SVN. El método se llama ZoomToPoints y es aplicable a TPolylines, TPolygons, TRectangles, TGMMarkers. TGMMap también tiene este método (que de hecho es al que llaman los métodos de las figuras) con la diferencia que para TGMMap se necesita pasar como parámetro un array con los TLatLng a los que queremos ajustar el zoom.

          A ver si pronto libero la nueva versión 🙂

          Nos leemos

  69. Es posible conseguir este componente para C++BUILDER 2007. Gracias.

  70. […] para termos nosso mapa. Caso você queira se aprofundar mais na suite de componetes acesse o Blog de Cadetill e consulte a documentação de todos os componentes da […]

  71. Hola Cadetill,
    muchas gracias por estos fantásticos componentes, son realmente fantásticos.

    Quería comentarte una duda para ver si me la puedes resolver. La versión 3 de la API ofrece la posibilidad de pintar mapas de calor para representar densidades de puntos . El funcionamiento es muy parecido a las polilineas, pero lo que se muestra es un mapa de calor. De acuerdo a la API de Google maps, hay que definir un array con los puntos y luego crear la capa de esta forma:

    heatmap = new google.maps.visualization.HeatmapLayer({
    data: pointArray
    });

    heatmap.setMap(map);

    Sabes si hay alguna forma de dibujar este tipo de capa usando GMLib?

    Un saludo y muchas gracias.
    Enrique

  72. Estimado desarrollador, primero felicitaciones para el proyecto.

    Estoy empezando con los componentes en Brasil y me gustaría un poco de ayuda y orientación de cómo debe hacer el siguiente caso:

    1 -) Tengo una lista de las direcciones que se muestran en el mapa todas las marcas de estas direcciones en un mismo mapa.

    ¿Cómo hacer esto? y posible?

    • Ola Wildner

      Te recomiendo que en tu base de datos tengas 2 campos (lat / lng) para almacenar las coordenadas de cada dirección. ¿Por qué? Pues porqué sólo puede hacerse 1 geolocalización por segundo (excepto las 8 primeras) y, si son muchas, el tiempo de espera puede ser largo. En cambio, si tienes los campos de lat/lng, sólo te tardará la 1era vez.

      Espero te sirva

  73. […] para termos nosso mapa. Caso você queira se aprofundar mais na suite de componetes acesse o Blog de Cadetill e consulte a documentação de todos os componentes da […]

  74. Estimado amigo, un grn aporte tuyo por la librerias gmlib.

    Nosotros que amamos delphi estamos muy agradecidos.

    Tengo unas consultas:

    1) Existe alguna forma de poder incluir dentro de un circulo un texto descriptivo.
    2) Existe la posibilidad de cargar mapas de OSM sin dejar de usar el API de google?
    3) El componente TWEBBrowser es algo lento para mostrar mapas, has pensado usar el componente Delphi-EmbeddedWB

    Un gran abrazo

    Saludos desde PERU

    Tengo un interesante proyecto en desarrollo Google Maps + GPS + Android + Transporte Publico de Pasajeros. si estas interesado puedo darte detalles.

    • Hola Bruce

      Saludos desde el otro lado del Atlántico 😉

      1) La verdad es que no. Mi nivel de JS es bastante escaso y eso tendría que hacerse en ese lenguaje (y no he visto nada hecho al respecto) 🙁
      2) No me he mirado nunca OSM, pero imagino que se tendrá que usar su propia API (cose que no creo sea complicado de hacer, pero llevaría su tiempo, claro)
      3) La verdad es que no, y no creo que lo haga a no ser que exista alguna versión para FMX. No quiero “perder” el tiempo en componentes que sólo estén para VCL, ya que mi idea es hacerlo para ambos frameworks.

      El proyecto que quieres hacer suena muy interesante. Si no es molestia, sí, me gustaría me mandaras detalles (puedes ver mi correo en cualquiera de los .pas de los componentes o en el changelog.txt o install.txt que acompañan al proyecto) 🙂

      Saludos

  75. En lo referente a mapas de Open Street Map (OSM) no me referia a usar su API , solo a superponer los mapas OSM en Layers o algo asi. y seguir usando el API de google para seguir dibujando circulos, rectabgulos, marcas, etc.

    Existe alguna forma de poner texto en el mapa, eso me serviria para poner un texto descriptivo dentro de los circulos

    Saludos

    Bruce

    • No creo que se puedan poner las figuras de GoogleMaps en OSM, dado que éstas dependen directamente del mapa.

      Lo del texto, seguro que la hay, sería cuestión de buscar y/o investigar el tema, pero lo que también es seguro que tiene que ser un desarrollo aparte del API estándar de GoogleMaps, porque ésta no trae nada por defecto.

      Saludos

  76. Congratulations for this job.

  77. Congratulations for this great job !
    Regards from Belgium.
    Remy

  78. Hola Cadetill como estas, acabo de actualizar los componentes a la version 1.1.0 y compile nuevamente mi programa, aparentemente todo funciona normalmente no me envia ningun error, el detalle sucede cuando intento cargar un PoliLine, que ahora me devuelve el siguiente error:

    —————————
    Gmaps
    —————————
    ” is not a valid floating point value.
    —————————
    Aceptar
    —————————

    El codigo es el mismo que utilizada en una version anterior de tus componentes, cambio algo para poder remplazarlo???

    Este es mi codigo de carga:


    procedure TForm1.CargarPolyLines;
    var
    Polyline: TPolyline;
    begin
    // create a TPolyline
    Polyline := GMPolyline1.Add;
    // set properties
    Polyline.Editable := False;
    Polyline.StrokeColor := clRed;
    // Polyline.StrokeOpacity := 1.0;

    // create TLinePoint
    with Form3.Query1 do begin
    First;
    while not eof do begin
    Polyline.AddLinePoint(Query1.FieldByName('Latitud').AsFloat, Query1.FieldByName('Longitud').AsFloat);

    // Polyline.AddLinePoint(18.087076, -96.138868); //Si los coloco de esta manera si me carga la linea
    // Polyline.AddLinePoint(17.060598, -96.725357);
    Next
    end;
    end;
    Query1.First;
    end;

    Lo que hace es recorrer con el resultado de mi Query cada registro y cargar su latitud y longitud pero me da el error que te coloque arriba, con la version 0.8 me parece que es la que tenia instalada el mismo codigo funcionaba correctamente.

    Saludos

    • Perdon por la molestia error de principiante, llevaba varios dias desvelandome y cuando llegue a este punto no me di cuenta de algo tan sencillo:


      Polyline.AddLinePoint(Query1.FieldByName('Latitud').AsFloat, Query1.FieldByName('Longitud').AsFloat);

      El detalle estaba en que cambie mi Query a la Unit3 y aunque le indicaba que procesara con los registros de esa Query se me olvido agregar


      Polyline.AddLinePoint(Form3.UniQuery1.FieldByName('Latitud').AsFloat, Form3.UniQuery1.FieldByName('Longitud').AsFloat);

      Lo siento mucho por la molestia, de todos modos un saludo :) y excelente trabajo tus componentes.

  79. hello
    thanks for your amazing component
    im looking forward to install component on XE5 i tried to install XE4 package but i got an error :

    [dcc32 Error] GMClasses.pas(1311): E2003 Undeclared identifier: ‘DecimalSeparator’
    [dcc32 Error] GMClasses.pas(1352): E2003 Undeclared identifier: ‘DecimalSeparator’
    [dcc32 Fatal Error] GMMap.pas(329): F2063 Could not compile used unit ‘GMClasses.pas’

    please help me i need to install and use in firemonkey in XE5

    • Hi nima

      You can download the new release from SVN directory. This new version is compatible with XE5. However isn’t compatible with the FMX.TWebBrowser yet. In a not far (I hope) version, I will do it.

      Regards

  80. Amazing work! Thank you.

  81. Hola Cadetill, primero que nada queria felicitarte por tu gran trabajo y agradecerte porque realmente nos ayuda mucho tu librerias en proyectos donde requiera el uso de GMaps.
    Ahora bien tengo una cuestion con los Markers, deshabilito la propiedad AutoUpdate para cargar mas de 100 markers, pero una vez cargado quiero agregar un nuevo marker y no se dibuja. Otro tema es si existe alguna forma para mejorar el desplazamiento en el mapa con muchos marcadores ya que mientras mas cantidad hay mas se pone lento.

    Espero tu respuesta! Saludos!

  82. Probé el método LoadFromDataSet y fue muy bueno el rendimiento obtenido tanto en la carga de los Markers como en el desplazamiento de la vista del mapa, muchísimas gracias!
    Otra cuestión que tengo es sobre si se podría modificar dicho método para que los Markers generados tengan la propiedad Draggable en true y los iconos los cargue desde una dirección de directorios y no de un campo del dataset.

    Desde ya muchas gracias por tus respuestas y tu aporte!

    Saludos

    • Hola de nuevo

      Por supuesto que puedes cambiar lo que quieras, para eso tienes los fuentes!! 🙂
      No obstante, más que modificar, te aconsejo que añadas un nuevo método basándote en los que ya hay, que me mandes el cambio y lo añado para que todos podamos disfrutar de él y así, en próximas actualizaciones lo tendrás por defecto y no tendrás que acordarte de volverlo a añadir/hacer los cambios.
      Saludos

  83. Hola amigo, como puedo hacer para que un marker standar muestre siempre un label?, el problema es que agrego varios markers a mi mapa pero para saber que es cada uno de los puntos marcados hayque dar click en el o pasar el mouse sobre el , seria practico que siempre estubiece visible un label indicado por el titulo.

    • Hola Alex

      GMLib es una librería que sólo pretende encapsular el API de Google Maps, no extender la misma. El comportamiento que tu pides no es algo estándar de Google Maps, por lo que no realiza ese efecto. Lo que puedes hacer en su lugar es cambiar el tipo de marcador a mtStyledMarker y con estilo siBubble, o bien tener siempre visible el InfoWindows del marcador.

  84. Hola, como puedo descargar la versión que compila con xe5? Gracias!

  85. Hola Cadetill primero que nada Felices fiestas navideñas 🙂

    Sigo probando tu trabajo y es excelente y muy util para un monton de ideas que requieran mapas de google, muchas gracias por compartirlo.

    Tengo una consulta, si cargo por ejemplo 20 marcadores, y sobre uno de ellos ocupo la herramienta de TCircle de un diametro aproximado de 1000 metros, es posible contar el numero de marcadores que estan dentro de ese perimetro?

    Hay alguna forma de detectar cuantos estan dentro del circulo?, te envio un saludo 😀

  86. Hola cadetill.

    Muchas gracias por estos componentes.

    Como puedo cambiar la propiedad MarkerType de un TMarker desde código?

    Gracias por adelantado. Un saludo!

  87. Hola amigo, estos componentes funcionan para android en el delhi xe5?
    si no es asi, planeas hacerlos compatibles?

  88. Felicidades por los componentes !!

    Sólo quería saber si estás preparando una versión que compile con Delphi XE6

    saludos.

  89. GmLib 1.2.4 Delphi 6..Delphi XE6 version 😉 😉

    http://yadi.sk/d/th-8oez8RSWK8

  90. Help help help 🙂 🙂

    google map marker with transparent text label

    Sample: http://jsfiddle.net/yV6xv/181/

  91. Hi cadetill

    I would be glad if you do XE6 version. 🙂

    Regards

  92. Speed ​​too fast as yours, but it causes very slow;

    https://code.google.com/p/delphimaps/downloads/detail?name=delphimaps1.03.zip&can=2&q =

  93. My project is running very slow, do you have a solution for. :S :S :S

  94. help help help help

    how they’ll integrate it. I would appreciate if you could help.

    http://stackoverflow.com/questions/11096094/google-maps-v3-marker-with-label

    🙂 🙂 🙂 🙂 🙂 🙂

  95. […] posto, segue o link para turbinar suas aplicações com os recursos da GMLib 1.3.0: GMLib – Google Maps Library v1.3.0 é  compatível com Delphi XE5 e Delphi […]

  96. Já existe uma versão compatível com Firemonkey? Utilizo o XE6 e quero desenvolver um APP android.

  97. Olá Cadetill,

    Gostaria de parabeniza-lo pelo otimo projeto.

    Iniciei alguns testes, e estou tentando montar um roteirizador, porem ao informar mais de 10 pontos, para o componente ele não traça a rota, não aparece nada no mapa, até 9 pontos o sistema gera a rota a apresenta no mapa, acima desta quantidade não .

    Sabe me informar se é um limitação da API, do componente ?

    Obrigado e parabéns pelo ótimo trabalho !

    Marcio

  98. bom dia,

    Começou ontem dar um erro “json” não está definido.

    Att
    José Carlos

  99. Boa Noite,

    Quando passa o mouse sobre algum ponto marcado

    Começou ontem dar esse erro:

    Linha: 188
    Caracter: 942
    Erro: “Json” não está definido
    Código: 0
    Url: about blank

    O que será que está errado

    Desde já agradeço sua atenção

  100. Bom dia Cadetill!

    No Windows XP SP3 com o Delphi XE2 e GMLib versão [1.4.0 Final].
    No IE8 já verifiquei a propriedade no item “Navegação” se está marcado “Desabilitar depuração Script” e desmarcado “Exibir notificação sobre cada erro de script” e nada!
    Tentei trocar a propriedade do GMMap1 language por “PortuguesBR” e “English” e nada resolveu.
    Quando clico em um “Marker” para informar o html simples que criei aparece o seguinte erro:
    “Invalid Floating Point Operation” em seguida
    “Access violation at address 633A001A in module ‘jscript.dll’. Read of address 00000000.”

    O que está faltando para acertar?

    Agredeço sua atenção!

    José Ricardo

  101. Muy buenas, estoy intentando trabajar con los componentes y la librería pero me sucede el siguiente problema.

    Ya sea a través de GeoCode1.Geocode(‘String’); o siempre que introduzca Address en alguna de las direcciones, se queda en el siguiente código eternamente. La ventana recupera el foco y todo lo demás funciona, pero no saltan más eventos de mi programa.

    procedure TGMGeoCode.GeocodeData(Data: string);
    var
    Tmp: string;
    begin
    if not Assigned(Map) then
    raise Exception.Create(GetTranslateText(‘Mapa no asignado’, Language));

    Tmp := Data + ‘,’ + QuotedStr(TCustomTransform.RegionToStr(FRegion));
    if (Bounds.NE.Lat 0) or (Bounds.NE.Lng 0) or
    (Bounds.SW.Lat 0) or (Bounds.SW.Lng 0) then
    Tmp := Tmp + ‘,’ + Bounds.SW.ToUrlValue(0) + ‘,’ + Bounds.NE.ToUrlValue(0)
    else
    Tmp := Tmp + ‘,-1,-1,-1,-1’;

    Tmp := Tmp + ‘,’ + QuotedStr(TCustomTransform.LangCodeToStr(FLangCode));
    ExecuteScript(‘GetGeocoder’, Tmp);

    //Aquí se queda pillado sin salir nunca
    repeat
    TGMGenFunc.ProcessMessages;
    until (GetIntegerField(GeocoderForm, GeocoderFormResponse) = 1);
    //
    FXMLData.Text := GetStringField(GeocoderForm, GeocoderFormXML);

    if Assigned(FAfterGetData) then FAfterGetData(Self);

    ParseData;
    end;

    ¿A que puede deberse esto?
    Gracias!

    • Buenas,

      Puedes enviarme un programa (el código) para ver qué y cómo haces las cosas?

      Saludos

      • Disculpa las molestias, parece que el problema venía del momento en el que ejecutaba el código, al hacer un proyecto nuevo para enviarte el ejemplo y utilizar un botón, ví que funcionaba bien. En mi proyecto se encuentra sobre un Frame y lo cargo dentro de TabControl mediante una función. Tenía problemas en el momento justo en el que intentaba hacer el GeoCode. Muchas gracias por su pronta respuesta, un saludo!

      • Eso sí, quisiera preguntarte dos aspectos de los que no comprendo bien el funcionamiento.

        En primer lugar, toda la parte de WaypointsOrder, veo que si optimizo los Waypoints el reordena todos ellos en función de lo más optimo. Pero ¿cómo puedo reutilizarlo al calcular la ruta? ¿De que forma hago que en el cálculo de la ruta tome los Waypoints en este correcto orden y no en el original?

        En segunda instancia, una vez calculada una ruta con todos sus Waypoints, ¿qué propiedad me devuelve la distancia total?

        Muchísimas gracias de antemano!

  102. Hola Cadetill, queria preguntarte si es posible utilizar la funcion MarkerClusterer de los mapas de google, ya que se me hace muy util sobre todo en mapas con infinidad de marcadores, ya que te segun el nivel de zoom lo que hace es mostrarte una especie de circulo de color con el numero de marcadores y entre mas te alejes o te acerques los reagrupa.

    Este es el enlace a la informacion de la utilizacion del MarkerClusterer:

    https://developers.google.com/maps/articles/toomanymarkers?hl=es#markerclusterer

    Saludos

    • Hola Erik

      Esta funcionalidad, que no es estándar del API de Google Maps, quiero incorporarla en próximas versiones. Pero tengo que retocar bastante código para incorporarla, así que de momento la tengo un poco aparcada.

      Saludos

      • Muchas gracias por la respuesta cadetill, pense que era parte de la API estandar de Google Maps, de cualquier forma muchas gracias por tus actualizaciones, excelente trabajo

  103. Hola Cadetill, estoy iniciando un proyecto que involucra mapas y baje los componentes, y lo que llevo usandolo estan super funcionales.

    Una duda que ya llevo algo de tiempo de revisar es si se puede mover el zoom del mapa por programa (talvez este sencillo pero no logro ver esto).

    La situacion es la siguiente, estoy haciendo un Marker buscando una direccion y funciona muy bien, pero el nivel de detalle que muestra el mapa no es el correcto (para la aplicacion), aparece a nivel ciudad y lo requiero a nivel calle.

    Te agradesco de antemano cualquier comentario.

  104. Estimado:

    Estoy instalando la versión 1.5.1 en Delphi XE7, correctamente instala GMLib_DX7 – GMLib_DX7_Vcl – GMLibEdit_DX7, pero para GMLib_DX7_FMX me da el siguiente mensaje:

    [dcc32 Fatal Error] F2039 Could not create output file ‘C:\Users\Public\Documents\Embarcadero\Studio\15.0\Bpl\GMLib_DXE7.bpl’
    [dcc32 Fatal Error] GMLib_DXE7_FMX.dpk(33): E2202 Required package ‘GMLib_DXE7’ not found

    Alguna solución

    Gracias

  105. Hola , rutas alternativas no están siendo preservados incluso con opción hiddeOthers ( false). Desearía que fueron asignadas todas las rutas . El color principal y de como una alternativa a otro color. Como hacer?

  106. Ola sr Cadetill.
    Sou Brasileiro e faço parte do grupo DELPHI EXPERTS, pelo FACEBOOK.
    Muito tenho aprendido nestes e em outros grupos.
    Vi seu artigo sobre GMLIB para delphi.
    Voce não teria o pacote para Delphi Seatlle ? eu ja peguei para Delphi XE8 e ainda nao migrei para a nova versao por falta destas classes.
    Agradeço desde ja pela atenção.

  107. Buenas noches Cadetill en primera instancia dar las gracias por tan excelente componente,
    por otro lado estoy muy interesado en instar el componente en la versión de Delphi XE10 Seattle ya que al descargar
    el paquete que aparece en la pagina que es 1.5.3 como ultima versión en el documento de Install.txt
    salen las siguientes plataformas:

    Delphi 6
    Delphi 7
    Delphi 2007
    Delphi 2009
    Delphi 2010
    RAD Studio XE
    RAD Studio XE2
    RAD Studio XE3
    RAD Studio XE4
    RAD Studio XE5
    RAD Studio XE6
    RAD Studio XE7
    RAD Studio XE8

    y versiones anteriores pero no hay documentación de RAD Studio Seattle 10
    no se si tengas un manual o un vídeo tutorial de como instalarla en RAD Studie Seattle 10 ya que esta version tiene nuevas cosas que nos permiten realizar nuevas cosas y es la licencia que tengo actualmente

    de nuevo muchas gracias mil bendiciones
    de antemano agradezco tu pronta respuesta.

  108. Boa tarde!
    Gostaria de saber se há possibilidade de colocar uma “label” visível abaixo de um marcador para identificar o mesmo.

  109. Buenas tardes
    Me esta saliendo el error ” ‘StyledIcon’ no esta definido ” cuando va a cargar el mapa
    Saludos

    • Sí, parece ser que hay un archivo alojado en code.google que ya no es accesible via raw. Voy a mirar de subirlo a la carpeta de GitHub de la GMLib v1.x para que puede ser de nuevo accesible, Estar atentos a las entradas del blog porque explicaré cómo corregir el error una vez lo tenga solucionado.

  110. Olá visto aqui é como se fosse a invenção da roda , porem no meu Delphi 2010 não executa, não abre os mapas. Alguém teria um código fonte pronto para enviar para mim ?
    obrigado

  111. Ola. Alguma novidade para o Delphi 10.1 Berlin? Obrigado e parabens pelo trabalho.

  112. Amigo, ¿Cuándo van a producir una nueva versión que se pueda instalar en RAD Studio XE 10.1 Berlin?

  113. Ola Cadetill, tudo bem?

    Alguma previsão para o Delphi Berlin?

    Grande abraço do Brasil.

  114. Como pego os dados da rota como a distancia depois de alterar a rota arrastando um determinado ponto?

  115. Saludos Cadetill, instale los componentes en XE10 Seattle siguiendo los pasos para XE8, y en cada paso me indico que los componentes estaban instalados, pero al abrir la paleta Google Maps, solo muestra 4 componentes, que me recomiendas.

  116. Buenas noches !

    Las primeras felicitaciones por el componente . Estoy desarrollando un sistema de enrutamiento con el componente GMDirection , para identificar a los restaurantes, combuístiveis los mensajes de marcadores en el camino. El objetivo es colocar los marcadores en el mapa por latitud y longitud, utilizando la respuesta componente de matriz ( overviewpatch ) .

    Me di cuenta de que el intervalo entre las coordenadas cambios ( overviewpatch ) en función del punto de origen y destino, como las coordenadas
    que esté registrado en la base de datos son fijos. Esto se lleva a la exactitud , porque si hay una ocurrencia con coordenadas cerca de la ruta ( overviewpatch ) es decir, dentro de la gama , el sistema tiene en cuenta .

    Me pregunto si hay una manera de obtener sólo las coordenadas ( matriz ) cuyo recorrido pasa en realidad ( polilínea ) y qué rango de criterios que utiliza la API para calcular el parche visión general .

    Sujestões son muy bienvenidos!

    ( PS : Texto traducido con google )

    Muchas gracias ! Saludos desde Brasil !

    Eduardo .

    • Hola Eduardo

      No entiendo muy bien lo que necesitas, puedes ponerme un ejemplo?

      • Hola

        Esta funcionalidad de la aplicación exacta de la muestra que necesito.

        http://www.mapeia.com.br

        Este sitio muestra los peajes existentes en una determinada ruta . Analizando el concepto de operación que tienen una base de datos con los puntos que desea marcar en el mapa, la línea ( polilyne ) ir a través de la coordinación que marca en el mapa .

        Hice algunas pruebas con el resultado obtenido en la matriz ( overviewpath ) , dependiendo de la ruta , los valores cambian .

        Me pregunto si hay alguna función en el componente que me devuelve sólo las coordenadas del polilyne camino.

        Muchas gracias !

        Eduardo.

  117. Buenas…. cuando utilizo GMDirection para mostrar una ruta entre 4 puntos y uno de ellos son estas coordenadas (42.237367,-8.735198) ó (42,235902,-8.732295) cuando ejecuto el GMDirecction.Execute aparece un mensaje de error que dice

    No se puede convertir NULL a Objeto OLE

    He depurado y he llegado hasta aquí

    GMDirecction.pas – Línea 3575

    // ES: etiqueta “summary” (sólo una) // EN: “summary” tag (only one)
    if SameText(Node.NodeName, LBL_D_SUMMARY) then Result.FSumary := Node.NodeValue;

    ¿Me puedes echar un cable?

    Gracias

  118. Boa Tarde!
    Cadetill, estou com um problema e acredito que a biblioteca GMLIB possa me ajudar, já baixei sua biblioteca e já tenho pronta uma aplicação de rota com vários pontos. O meu problema é o seguinte, quero retorna um ponto próximo a outro ponto pre definido. Ex. Um ônibus irá levar os funcionários até a empresa, mas o problema é que o ônibus não vai até a casa de cada funcionário o programa retornaria um ponto que ficaria fácil para o ônibus passar sem sair muito da sua rota principal e que o funcionário não ande muito até chegar nesse ponto. Teria que estimar uns 2km para o funcionário não andar muito.
    Com a GMLIB consegui traçar essa rota mas indo diretamente no endereço do funcionário, não consegui calcular esse novo ponto para o ônibus passar.

  119. Saludos a todos y de antemano gracias por su valioso tiempo y aportes a todos…

    He tratado de todas formas para poder tratar de instalar GMLib en Berlin 10.1 y no ha sido posible, las demos se ejecutan bien y al compilar e instalar he podido resolver una que otra situación, pero no se me instalan todos los componentes TGMGeoCode, TGMGroundOverlay, TGMHeatmap y TGMInfoWindow, hay 2 paquetes mas, pero vacíos.

    He descargado directo, con el repositorio, he compilado y generado todo e instalado, y nada!

    Les agradezco cualquier ayuda…

  120. Hi Cadetill !

    Function TGeometry.IsLocationOnEdge() does not return the expected result, applying the following situation:

    I’m changing the parameter of funcion IsLocationOnEdge, integer for real.

    Example if say (33.00276, -96.6824) is on the polyline, if the tolerance is 0.00001 then if you change the point to (33.00278, -96.6824) then the point will not be on the polyline.

    So, you can probably use 0.001 as the tolerance value, if you want to find detect a location within about 100m for polyline.

    For example, if your location is (1.001, 12), one of the points in polyline is(1, 12), the distance between your location and the polyline will be about 111.319 meters. The tolerance between (1.001, 12) and (1, 12) is 0.001, so the isLocationOnEdge() will return true.

    If your location is (1.002, 12), distance to (1, 12), will be about 222.638 meters. The tolerance between them is 0.02, so if you use 0.001 as the tolerance value for isLocaitonOnEdge(), it will return false.

    Could you help me with this situation ?

    Thanks !

    Eduardo.

  121. No puedo compilarlo en Delphi 10.1
    A alguno le pasa?
    No entiendo mucho de esto por que recién empiezo, pero quizás alguien me pueda ayudar a enterder por qué no compila.
    Gracias!!

  122. hola perdon la ignorancia
    xe7 compile e installe como dice el archivo de install.txt
    pero al correrlo marca “can not run project unless host application is defined. Use run|parameters dialog box”

    o como le hago para correrlo

    gracias

  123. Hola, buenas tardes
    He estado trabajando con el componente TGMMap y TGMPolygon.
    Existe alguna manera de crear lo polígonos de manera masiva?
    Es decir actualmente tengo almacenados alrededor de 58,000 polígonos con 4 Vértices en promedio en una BD.
    pero para montarlos al componente ocupo recorrer el cursor de esos 58,000 con sus respectivos vértices
    y es un poco tardado el proceso.
    Saludos.
    Atte. Luis Pineda

  124. Una pregunta que no veo que se pueda hacer…. ¿se pueden agrupar los marker? es decir, si hay muchos puntos juntos en una misma zona, ¿hay forma de agruparlos y que muestre un número y a medida que se hace zoom se vayan desagrupando?

    Gracias

  125. Bom dia, Existe alguma função para me retornar as distancia entre 2 pontos ,passando como parametro lat/long e o endereço ? Muito obrigado pela ajuda

  126. Ola,

    Tenho alguns projetos utilizando o seu componente de uma semana para ate hoje esta ocorrendo um erro no ao abrir o mapa.

    Ops! Algo deu errado.
    Esta página não carregou o Google Maps corretamente. Consulte o console JavaScript para ver detalhes técnicos.

    Fiz um projeto so colocando o componente e um TwebBrowser e apos abrir o mapa ocorre o erro.

    Não utlizo Key, fiz o cadastro no google de gerar a Key e mesmo assim ocorre o erro

    Sabe o que pode estar ocorrendo ?

    Obrigado

    Marcio

  127. Hola Cadetill, primero agradecerte por estos geniales componentes.
    Segundo, al querer abrir el Mega Demo, luego de unos segundos aparece un mensaje que dice lo siguiente:
    “Se produjo un error. Esta página no cargó bien Google Maps. Consulta la consola de javaScript para obtener los detalles técnicos.”
    No se como abrir la consola, y no da ningún detalle mas sobre el error.
    Gracias y saludos!

  128. Buen dia, desde el dia de ayer al momneto de cargar los demos me aparece el siguiente error “Esta pagina no cargo bien Google Maps. Consulta la cosola de JavaScript ” esto a que se debe

  129. Hola, he descargado los componentes porque aspiro a poder mostrar un mapa con multiples direcciones (o wayponts? ), bien.. de inicio he querido ejecutar los demos de “gmlib_demos” y quedan frezze todos, no responden, tengo que instalar algo adicional en el windows para que funcionen? algun tip que me puedas pasar? gracias!!!! 🙂

  130. Hola Cadetill. Había estado usando sin problemas la versión 1.5.3 del componente en Rad Studio XE10.1 Berlin, y hoy, de repente, en las dos computadoras que tengo para desarrollo, empezó a no funcionar.
    ¿Sabes si pudo haber habido algún problema en la API de GoogleMaps o que haya cambiado la versión, o algo así?

    Yo para evitar errores siempre he usado algo como esto:

    try
    //if glSettings.GMapsStarted and WebBrowserGMaps.Visible then
    GMMap.DoMap;
    except
    edGeoLocation.Text := Format(‘Problem on Accessing GoogleMaps…’, []);
    if GMMap.WebBrowser.Document = nil then
    GMMap.WebBrowser.Navigate(‘about:blank’);
    end;

    Y lo que me está pasando ahora es que todas las ventanas son blancas, es decir, da una excepción permanentemente el DoMap. No cambié nada más, inclusive volví a unas versiones anteriores de código y hacen lo mismo.

    Muchas gracias.

    Saludos.

  131. Hi, please, How to use hexadecimal colors in gmmarker.ColoredMarker.PrimaryColor ?
    thanks

  132. Buenas tardes, en el MegaDemo, al abrir: Map -> Map Properties -> Visual Prop. Al presionar en “Do Map” me da el error “Página inicial aun no cargada”. Que puede ser lo que me esté dando este error? Gracias

  133. good afternoon,

    Started making a mistake now afternoon, right here in the code In Unit: GMMap;
    “If not FDocLoaded then
    Raise Exception.Create (GetTranslateText (‘Home not yet loaded’, Language));

    System is Key API Key If you can help me .. thank you very much.

  134. estou com problema no metodo execute da classe gmDirection, tem repeat que fica em loop para sempre e acaba travando o aplicativo, fiz alguns ajustes na minha classe caso ache interessante, segue a alteração.

    repeat
    TGMGenFunc.ProcessMessages;
    Inc(count);

    retorno := GetIntegerField(DirectionsForm, DirectionsFormResponse);

    if retorno = 0 then
    begin
    if count = 100 then
    Break;
    end;
    until (retorno = 1);

  135. Desde hace algunos 3 días que el programa que había desarrollado utilizando esta librería no carga la página inicial o principal, es decir no despliega el mapa, a pesar de haber instalado la versión reciente 1.5.5

  136. Cadeteil,

    Meu sistema estava funcionando normalmente , apos as mudanças do google apos 11/06 sobre a cobrança dos servicos, criei uma conta de faturamento, associei a minha conta e ao projeto que tinha a chave, APIKEY, porem ao entrar no mapa , ele nao aparece…. fica sempre girando o cursor…e não carrega, sabe se houve alguma mundança e há necessidade de algum ajuste na GMLIB ?

  137. Cadetil buenos dias
    tengo un software el cual tengo muchos años trabajando en él sin contratiempos mayores, pero el dia de ayer al mostrar el mapa me marca un error, al parecer tiene que ver con el componente GMaps. sabes si hubo algun cambio en las politicas de google que este ocasionando este error..

    El mensaje que me marca es:

    “ERROR EN EL SCRIPT DE ESTA PAGINA”

Leave a Reply to cadetill Cancel reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

This site uses Akismet to reduce spam. Learn how your comment data is processed.