Foros del Web » Programando para Internet » PHP »

Marcador con boton derecho en Google Maps

Estas en el tema de Marcador con boton derecho en Google Maps en el foro de PHP en Foros del Web. Buenas tardes, Estoy intentando realizar un sitio web donde se puedan insertar marcadores dentro de un mapa de Google maps. He encontrado un código pre-fabricado ...
  #1 (permalink)  
Antiguo 21/02/2010, 13:47
 
Fecha de Ingreso: enero-2007
Mensajes: 160
Antigüedad: 12 años, 10 meses
Puntos: 2
Marcador con boton derecho en Google Maps

Buenas tardes,
Estoy intentando realizar un sitio web donde se puedan insertar marcadores dentro de un mapa de Google maps.
He encontrado un código pre-fabricado por internet, pero el marcador lo insertar haciendo clic con el botón izquierdo del mouse.

Podríais indicarme qué debo modificar para hacer la misma función de introducir un marcador pero con el botón derecho?


Archivo PHP:
Código PHP:
if (isset($_POST['submit'])) {
  
$fh file_get_contents('markers.xml');
 
  try {
    
$xml = new SimpleXMLElement($fh);
  } catch (
Exception $e) {
    echo 
$e->getMessage();
  }
 
  
$marker $xml->addChild('marker');
  
$marker->addAttribute('lat'$_POST['lat']);
  
$marker->addAttribute('lng'$_POST['lng']);
  
$marker->addAttribute('msg'utf8_encode($_POST['msg']));
  
$marker->addAttribute('name'utf8_encode($_POST['name']));
  
$marker->addAttribute('link'utf8_encode($_POST['link']));
 
  
$fp fopen('markers.xml','w');
  
fwrite($fp$xml->saveXML());
  
fclose($fp);
  
header('Location:index.php');


Función JQuery:
Código PHP:
$(document).ready(function() {
 
  var 
mark;
  var 
pointA;
 
  if (
GBrowserIsCompatible()) {
    var 
= $("#map")[0];
 
    if(
m) {
 
      var 
map = new GMap2(m);
      var 
start = new GLatLng(63.13450320833446,16.69921875);
      var 
zoomLevel 5;
      
map.setCenter(startzoomLevel);
      
map.addControl(new GSmallMapControl());
 
      $.
get('markers.xml',function(data) {
        $(
data).find('marker').each(function(){
          var 
lat    = $(this).attr('lat');
          var 
lng    = $(this).attr('lng');
          var 
html   = $(this).attr('name')+" ";
          
html      += $(this).attr('msg')+" ";
          
html      += $(this).attr('link');
          var 
point  = new GLatLng(lat,lng);
          var 
marker = new GMarker(point);
 
          
map.addOverlay(marker);
 
          
GEvent.addListener(marker"click", function() {
            
marker.openInfoWindowHtml(html);
          });
 
        });
 
      });
 
      
GEvent.addListener(map'click', function(overlaypoint){
        if(
mark) {
          
map.removeOverlay(mark);
        }
        if(
point) {
          
pointA = new GPoint(point.xpoint.y);
          
mark = new GMarker(pointA);
          
map.addOverlay(mark);
          
map.getCenter(point);
          var 
lat point.y;
          var 
lng point.x;
          var 
form "
          <form action=""index.php\"" 
method="\"post\"">" +
          "
<input name="\"lat\"" type="\"hidden\"" value="\""+lat+"\"" />"+
          "
<input name="\"lng\"" type="\"hidden\"" value="\""+lng+"\"" />"+
          "
Name:
          <
input name="\"name\"" type="\"text\"" value="\"\"" />"+
          "
Msg:
          <
input name="\"msg\"" type="\"text\"" value="\"\"" />"+
          "
Link:
          <
input name="\"link\"" type="\"text\"" value="\"\"" />"+
          "
<input name="\"submit\"" type="\"submit\"" value="\"save\"" />"+
          "
</form>";
          map.openInfoWindowHtml(point,form);
        }
      });
    }
  }
}); 
Gracias de antemano. Un saludo!
  #2 (permalink)  
Antiguo 21/02/2010, 13:52
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Marcador con boton derecho en Google Maps

Tal vez te sirva esto

- http://abeautifulsite.net/2008/05/jq...-click-plugin/
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 21/02/2010, 14:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Marcador con boton derecho en Google Maps

Lo único que necesitas es saber cómo manejar los objetos de Google Maps: Referencias para el API de Google Maps

Específicamente: GMap2.singlerightclick envent

Armate de paciencia y aprende a manejarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 21/02/2010, 14:17
 
Fecha de Ingreso: enero-2007
Mensajes: 160
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Marcador con boton derecho en Google Maps

Hola de nuevo.
jackson666 y gnzsoloyo muchísimas gracias por contestar. La respuesta de gnzsoloyo me ha sido de gran ayuda, ya que he conseguido hacerlo funcionar mediante el "singlerightclick" y creando un menú contextual que se muestra al pulsar con el botón derecho.

Necesito saber algo más, a ver si me podeis echar otra mano, por favor.

Existe alguna manera de detectar que un marcador lo ponen en el mar o en tierra?

Gracias de antemano.
  #5 (permalink)  
Antiguo 21/02/2010, 14:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Marcador con boton derecho en Google Maps

En términos generales, si: Usando gecodificación reversa:
http://websenior.wordpress.com/2008/...rse-geocoding/
http://code.google.com/intl/es-AR/ap...ion/geocoding/
http://code.google.com/intl/es/apis/.../services.html

En esencia la idea es que si no te devuelve al menos el país en la dirección, entonces estás en el mar...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 21/02/2010, 14:32
 
Fecha de Ingreso: enero-2007
Mensajes: 160
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Marcador con boton derecho en Google Maps

Esto último lo veo más complicado para adaptarlo al código fuente de mi primer post, pero bueno... leeré e intentaré adaptarlo.

Gracias por todo. Un abrazo
  #7 (permalink)  
Antiguo 21/02/2010, 15:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Marcador con boton derecho en Google Maps

En realidad es terriblemente simple, porque lo que devuelve GoogleMaps es un XML con vaios parámetros. Uno de esos parámetros indica el nivel de precisión logrado en la georeferenciación, y es el que debes usar para saber si la posición cae en un mar o en la tierra.
Mira este ejemplo del propio GoogleMaps:
Reverse Geocoding with Geonames
Fijate que si clickeas en el mar, verás que el código de "country name" es "no country code found".
Otro ejemplo es: Reverse Geocoding

Todo lo que necesitas, a nivel de JavaScript, incluyendo el mapa (el centro de mapa lo puedes poner tu) es esto:
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.  
  3.     var map;
  4.     var geocoder;
  5.     var address;
  6.  
  7.     function initialize() {
  8.       map = new GMap2(document.getElementById("map_canvas"));
  9.       map.setCenter(new GLatLng(40.730885,-73.997383), 15);
  10.       map.setUIToDefault();
  11.       GEvent.addListener(map, "click", getAddress);
  12.       geocoder = new GClientGeocoder();
  13.     }
  14.    
  15.     function getAddress(overlay, latlng) {
  16.       if (latlng != null) {
  17.         address = latlng;
  18.         geocoder.getLocations(latlng, showAddress);
  19.       }
  20.     }
  21.  
  22.     function showAddress(response) {
  23.       map.clearOverlays();
  24.       if (!response || response.Status.code != 200) {
  25.         alert("Status Code:" + response.Status.code);
  26.       } else {
  27.         place = response.Placemark[0];
  28.         point = new GLatLng(place.Point.coordinates[1],
  29.                             place.Point.coordinates[0]);
  30.         marker = new GMarker(point);
  31.         map.addOverlay(marker);
  32.         marker.openInfoWindowHtml(
  33.         '<b>orig latlng:</b>' + response.name + '<br/>' +
  34.         '<b>latlng:</b>' + place.Point.coordinates[1] + "," + place.Point.coordinates[0] + '<br>' +
  35.         '<b>Status Code:</b>' + response.Status.code + '<br>' +
  36.         '<b>Status Request:</b>' + response.Status.request + '<br>' +
  37.         '<b>Address:</b>' + place.address + '<br>' +
  38.         '<b>Accuracy:</b>' + place.AddressDetails.Accuracy + '<br>' +
  39.         '<b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode);
  40.       }
  41.     }
  42.  
  43.  
  44.     </script>

Obviamente en el else de la función showAddress debes usar la respuesta de Google Maps de la forma que quieras... No es necesario seguir al pie de la letra lo que está en este script.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: derecho, google, maps, marcador, botones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:01.