Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: Graphixx en 8 Septiembre 2014, 21:26 PM

Título: [AYUDA] Enviar captura de google maps por email desde PHP
Publicado por: Graphixx en 8 Septiembre 2014, 21:26 PM
Pues eso como envio desde PHP por email una imagen de la captura de un google maps predefinido.
Ando leyendo esto, ya veremos como nos va: https://developers.google.com/maps/documentation/staticmaps/?csw=1

Con esto se obtiene el mapa: http://www.sitepoint.com/working-with-geolocation-and-google-maps-api/
Ahora falta averiguar como capturarlo en una imagen, y enviarlo por correo.



En el foro he encontrado esto que veo que casi nadie maneja google maps, estoy frito!!!

http://foro.elhacker.net/desarrollo_web/ayuda_phpmysql_google_maps_v3-t355879.0.html
http://foro.elhacker.net/desarrollo_web/google_maps_api_v3_markes_e_infowindows-t350783.0.html;msg1708252#msg1708252
http://foro.elhacker.net/desarrollo_web/google_maps_rutas_y_php_ayuda-t326534.0.html
http://foro.elhacker.net/desarrollo_web/paso_de_parametros_por_id_javascript_php_google_maps_v3-t359972.0.html




Listo ya llega el mapa de google maps con geolocalizacion al email, dejo el codigo final:
http://www.4shared.com/zip/JqwOFSU8ba/geo6_google_maps_email_php.html

Gracias a todos los que colaboraron!!!
Título: Re: [AYUDA] Enviar captura de google maps por email desde PHP
Publicado por: EFEX en 9 Septiembre 2014, 05:52 AM
Utiliza la api de imagenes estaticas. El segundo ejemplo es cuando el usuario interactua con el mapa para eso se puede usar html2canvas(busca todos los elementos DOM sobre el elemento que le especifiques..)

http://html2canvas.hertzen.com/documentation.html

Título: Re: [AYUDA] Enviar captura de google maps por email desde PHP
Publicado por: Castg! en 9 Septiembre 2014, 06:56 AM
Sí señor, tan simple como cargar la imagen del mapa por url con los parámetros de la locación deseada. Lo que está bueno de la api de mapas estáticos es la posibilidad de cambiar los colores al mapa, quizás te interese esa opción!!

Después basta con enviarla como cualquier imagen.

Saludos!
Título: Re: [AYUDA] Enviar captura de google maps por email desde PHP
Publicado por: Graphixx en 9 Septiembre 2014, 16:10 PM
Cita de: EFEX en  9 Septiembre 2014, 05:52 AM
Utiliza la api de imagenes estaticas. El segundo ejemplo es cuando el usuario interactua con el mapa para eso se puede usar html2canvas(busca todos los elementos DOM sobre el elemento que le especifiques..)
http://html2canvas.hertzen.com/documentation.html

Estimado EFEX, ya use la libreria html2canvas, pero mira como me queda:
Arriba codigo del mapa de google, abajo la imagen que me genera html2canvas, alguna idea de por que no salen las calles y demas...???
(http://imageshack.com/a/img673/4889/vJZwXU.png)

Codigo completo del script:
Código (html) [Seleccionar]

<!DOCTYPE html>
<html>
 <head>
   <meta charset="UTF-8" />
   <title>Geolocation and Google Maps API</title>
   <script src="http://maps.google.com/maps/api/js?sensor=true"></script>
   <script>
     function writeAddressName(latLng) {
       var geocoder = new google.maps.Geocoder();
       geocoder.geocode({
         "location": latLng
       },
       function(results, status) {
         if (status == google.maps.GeocoderStatus.OK)
           document.getElementById("address").innerHTML = results[0].formatted_address;
         else
           document.getElementById("error").innerHTML += "Unable to retrieve your address" + "<br />";
       });
     }

     function geolocationSuccess(position) {
       var userLatLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
       // Write the formatted address
       writeAddressName(userLatLng);

       var myOptions = {
         zoom : 16,
         center : userLatLng,
         mapTypeId : google.maps.MapTypeId.ROADMAP
       };
       // Draw the map
       var mapObject = new google.maps.Map(document.getElementById("map"), myOptions);
       // Place the marker
       new google.maps.Marker({
         map: mapObject,
         position: userLatLng
       });
       // Draw a circle around the user position to have an idea of the current localization accuracy
       var circle = new google.maps.Circle({
         center: userLatLng,
         radius: position.coords.accuracy,
         map: mapObject,
         fillColor: '#0000FF',
         fillOpacity: 0.5,
         strokeColor: '#0000FF',
         strokeOpacity: 1.0
       });
       mapObject.fitBounds(circle.getBounds());
     }

     function geolocationError(positionError) {
       document.getElementById("error").innerHTML += "Error: " + positionError.message + "<br />";
     }

     function geolocateUser() {
       // If the browser supports the Geolocation API
       if (navigator.geolocation)
       {
         var positionOptions = {
           enableHighAccuracy: true,
           timeout: 10 * 1000 // 10 seconds
         };
         navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, positionOptions);
       }
       else
         document.getElementById("error").innerHTML += "Your browser doesn't support the Geolocation API";
     }

     window.onload = geolocateUser;
   </script>
   <style type="text/css">
     #map {
       width: 500px;
       height: 500px;
     }
   </style>
 </head>
 <body>
   <h1>Basic example</h1>
   <div id="map"></div>
   <p><b>Address</b>: <span id="address"></span></p>
   <p id="error"></p>

   <script type="text/javascript" src="../build/html2canvas.js"></script>
   <script type="text/javascript">
function geo()
   {
       html2canvas(document.body, {
           onrendered: function(canvas) {
               document.body.appendChild(canvas);
           }
       });
   }
setTimeout("geo()",9000);
</script>


 </body>
</html>


Codigo completo del script:
http://www.4shared.com/rar/I9utr9bjce/geo4.html
Título: Re: [AYUDA] Enviar captura de google maps por email desde PHP
Publicado por: Graphixx en 9 Septiembre 2014, 16:34 PM
Investigando encontre:
http://stackoverflow.com/questions/22530593/html2canvas-capture-google-map-to-image-in-phonegap-application

Y lo aplique:
Código (javascript) [Seleccionar]

   <script type="text/javascript" src="../build/html2canvas.js"></script>
   <script type="text/javascript">
function geo()
   {
       html2canvas(document.body, {
useCORS: true,
       allowTaint:true,
          onrendered: function(canvas) {
              document.body.appendChild(canvas);
          }
      });  
   }
setTimeout("geo()",9000);
</script>


Pero no funciono  :-\ :-\ :-\


Tambien probe:
http://stackoverflow.com/questions/17792081/cant-capture-google-map-width-html2canvas
Código (javascript) [Seleccionar]

   <script type="text/javascript" src="../build/html2canvas.js"></script>
   <script type="text/javascript">
function geo()
   {
       html2canvas(document.body, {
proxy: "server.js",
useCORS: true,
       allowTaint:true,
          onrendered: function(canvas) {
              document.body.appendChild(canvas);
          }
      });    
   }
setTimeout("geo()",9000);
</script>

Pero tampoco funciono.
Ademas aca dicen que usar proxys para cargar los mapas es ilegal:
https://github.com/niklasvh/html2canvas/issues/345  :o :o :o
Tambien por lo que pude entender con mi modesto ingles, de ese post es que html2canvas no soporta aun CSS3 y los google maps parecen estar hechos a punta de CSS3, quede frito.

Este ejemplo me quede sin saber si servia o no:
http://angulartutorial.blogspot.com/2014/05/save-google-map-as-binary-image.html
Me fue imposible ponerlo a trabajar.

Seguire en la busqueda...
Título: Re: [AYUDA] Enviar captura de google maps por email desde PHP
Publicado por: EFEX en 9 Septiembre 2014, 17:15 PM
Por algo te dije que uses la api de imagenes estaticas.. haber prueba con https://code.google.com/p/snapshotcontrol/
Título: Re: [AYUDA] Enviar captura de google maps por email desde PHP
Publicado por: Graphixx en 9 Septiembre 2014, 17:36 PM
Cita de: EFEX en  9 Septiembre 2014, 17:15 PM
Por algo te dije que uses la api de imagenes estaticas.. haber prueba con https://code.google.com/p/snapshotcontrol/

Ya la pruebo, encontre un ejemplo con html2canvas que funciona en la web del autor (http://www.dreamincode.net/forums/topic/352273-html2canvas-google-map-is-not-rendering/) , pero a mi no me funciono jejeje...
Dejo el codigo por aca haber que error le ven, yo no le doy al clavo...
Código (html4strict) [Seleccionar]

<!DOCTYPE html>
<html>
 <head>
   <meta charset="UTF-8" />
   <title>Geolocation and Google Maps API</title>
   <script src="http://maps.google.com/maps/api/js?sensor=true"></script>
   <script>
     function writeAddressName(latLng) {
       var geocoder = new google.maps.Geocoder();
       geocoder.geocode({
         "location": latLng
       },
       function(results, status) {
         if (status == google.maps.GeocoderStatus.OK)
           document.getElementById("address").innerHTML = results[0].formatted_address;
         else
           document.getElementById("error").innerHTML += "Unable to retrieve your address" + "<br />";
       });
     }

     function geolocationSuccess(position) {
       var userLatLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
       // Write the formatted address
       writeAddressName(userLatLng);

       var myOptions = {
         zoom : 16,
         center : userLatLng,
         mapTypeId : google.maps.MapTypeId.ROADMAP
       };
       // Draw the map
       var mapObject = new google.maps.Map(document.getElementById("map"), myOptions);
       // Place the marker
       new google.maps.Marker({
         map: mapObject,
         position: userLatLng
       });
       // Draw a circle around the user position to have an idea of the current localization accuracy
       var circle = new google.maps.Circle({
         center: userLatLng,
         radius: position.coords.accuracy,
         map: mapObject,
         fillColor: '#0000FF',
         fillOpacity: 0.5,
         strokeColor: '#0000FF',
         strokeOpacity: 1.0
       });
       mapObject.fitBounds(circle.getBounds());
     }

     function geolocationError(positionError) {
       document.getElementById("error").innerHTML += "Error: " + positionError.message + "<br />";
     }

     function geolocateUser() {
       // If the browser supports the Geolocation API
       if (navigator.geolocation)
       {
         var positionOptions = {
           enableHighAccuracy: true,
           timeout: 10 * 1000 // 10 seconds
         };
         navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, positionOptions);
       }
       else
         document.getElementById("error").innerHTML += "Your browser doesn't support the Geolocation API";
     }

     window.onload = geolocateUser;
   </script>
   <style type="text/css">
     #map {
       width: 500px;
       height: 500px;
     }
   </style>
 </head>
 <body>
   <h1>Basic example</h1>
   <div id="map"></div>
   <p><b>Address</b>: <span id="address"></span></p>
   <p id="error"></p>

   <script type="text/javascript" src="../build/html2canvas.js"></script>
   <script type="text/javascript" src="jquery.plugin.html2canvas.js"></script>
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.js"></script>
<script type="text/javascript" src ="http://code.jquery.com/jquery-1.9.0.min.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
   <script type="text/javascript">

$(window).load(function(){

   $('#load').click(function(){

           html2canvas(document.body, {
           useCORS: true,
               onrendered: function (canvas) {
               var dataUrl= canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");

               window.location.href = dataUrl;
                                   }
           });

   });
});
</script>

<input type="button" value="Save" id="load"/>
 </body>
</html>


Script completo con librerias aca:
http://www.4shared.com/rar/mwtwHMcDba/geo4__1_.html
El ejemplo que funciona del autor se llama index2.php , el ejemplo mio que no funciona es index.php
Título: Re: [AYUDA] Enviar captura de google maps por email desde PHP
Publicado por: Graphixx en 10 Septiembre 2014, 22:28 PM
Cita de: EFEX en  9 Septiembre 2014, 17:15 PM
Por algo te dije que uses la api de imagenes estaticas.. haber prueba con https://code.google.com/p/snapshotcontrol/

Ese snapshotcontrol esta genial, casi que no lo pongo a trabajar junto con el codigo de geolocalizacion actual... la prueba la monte aca:
http://phpdatagrids.com/alertamedica_geo/examples/pruebageo2.php
El codigo de ejemplo lo subo por aca:
http://www.4shared.com/zip/uxcmPCn_ce/geo5.html

Ahora necesito saber como capturar ese link de imagen estatica que la libreria crea en el popup, ayuda con eso please.
Título: Re: [AYUDA] Enviar captura de google maps por email desde PHP
Publicado por: Graphixx en 13 Septiembre 2014, 00:58 AM
Hay Dios, no lo puedo creer 3 dias rompiendome el lomo con ese codigo moviendo y moviendo cosas, cambiando de librerias, y era el "#$%%!" servidor assssss, lo cambie de server y ya funciona llega el email con las coordenadas desde donde fue leido el script, ahora me pongo a trabajar en convertir esas coordenadas en mapa, dejo el codigo funcionando por aca.

http://www.4shared.com/rar/dQ330i0bce/geo6_coord_google_maps_php.html
Título: Re: [AYUDA] Enviar captura de google maps por email desde PHP
Publicado por: Graphixx en 13 Septiembre 2014, 18:30 PM
Listo ya llega el mapa de google maps con geolocalizacion al email, dejo el codigo final:
http://www.4shared.com/zip/JqwOFSU8ba/geo6_google_maps_email_php.html

Gracias a todos los que colaboraron!!!
Título: Re:
Publicado por: onStrike en 23 Septiembre 2014, 21:30 PM
Hola Graphi, yo estuve pensando en hacer algo como eso, ya que he recibido amenazas por facebook y estaba pensando en seguirle el rollo para que ingrese a una web con alguna excusa y por lo menos obtener una ip, un email o algo para ver si puedo saber quien me esta enviando estos mensajes... Hay alguna forma de aplicar este mismo código pero sin una ubicación predeterminada y que me.envíe la de este tipo?
Título: Re:
Publicado por: Graphixx en 23 Septiembre 2014, 22:43 PM
Cita de: onStrike en 23 Septiembre 2014, 21:30 PM
Hola Graphi, yo estuve pensando en hacer algo como eso, ya que he recibido amenazas por facebook y estaba pensando en seguirle el rollo para que ingrese a una web con alguna excusa y por lo menos obtener una ip, un email o algo para ver si puedo saber quien me esta enviando estos mensajes... Hay alguna forma de aplicar este mismo código pero sin una ubicación predeterminada y que me.envíe la de este tipo?

El codigo no tiene "ubicacion predeterminada" la ubicacion que sale es la desde donde se lee el script, osea la ubicacion casi exacta ya que a veces se descacha hasta por 100 metros.
Título: Re:
Publicado por: onStrike en 24 Septiembre 2014, 01:54 AM
Cita de: Graphixx en 23 Septiembre 2014, 22:43 PM
El codigo no tiene "ubicacion predeterminada" la ubicacion que sale es la desde donde se lee el script, osea la ubicacion casi exacta ya que a veces se descacha hasta por 100 metros.
Entonces sería exactamente lo que necesito, desde ya que tengo que aprenderme una base de php urgente, sabés si el script corre en background?
Título: Re:
Publicado por: Graphixx en 24 Septiembre 2014, 05:23 AM
Cita de: onStrike en 24 Septiembre 2014, 01:54 AM
Entonces sería exactamente lo que necesito, desde ya que tengo que aprenderme una base de php urgente, sabés si el script corre en background?

Si en background te refieres a que corra sin que la persona se de cuenta, jummmmm lo veo dificil, no se si sea posible leer la ubicacion del usuario sin que este de permiso. Haber que dicen los compañeros mas experimentados al respecto...