Foros del Web » Programando para Internet » Javascript »

Formulario de Geolocalización

Estas en el tema de Formulario de Geolocalización en el foro de Javascript en Foros del Web. Hola. Tengo una web inmobiliaria y le asigno zona por geolocalización a cada inmueble automáticamente en función del código postal. Sin embargo quiero que en ...
  #1 (permalink)  
Antiguo 22/12/2010, 12:30
 
Fecha de Ingreso: mayo-2010
Mensajes: 53
Antigüedad: 9 años, 6 meses
Puntos: 6
De acuerdo Formulario de Geolocalización

Hola. Tengo una web inmobiliaria y le asigno zona por geolocalización a cada inmueble automáticamente en función del código postal. Sin embargo quiero que en el formulario de datos del inmueble haya un apartado en el que se pueda concretar manualmente el punto exacto de la localización del inmueble.
Es decir, que no sea necesario poner la dirección si uno no quiere, y que directamente pinchando o moviendo el mapa pueda obtener las coordenadas y grabarlas, para posteiormente grabarlas en la base de datos.

El problema es que quiero mandar las coordenadas mediante POST o GET a la siguiente página a través de un SUBMIT y no puedo. Lo he intentado con ONCLICK e incluso con distintas maneras en javascript pero no me aclaro.

Podéis ver lo que digo aquí [URL="http://www.pisoscadiz.info/zgeolocalizador.php"]http://www.pisoscadiz.info/zgeolocalizador.php[/URL]
Si se activa la línea que lleva el onsubmit... pasa esto: [URL="http://www.pisoscadiz.info/zgeolocalizador1.php"]http://www.pisoscadiz.info/zgeolocalizador1.php[/URL]

Ayuda por favor.

El script es este:


<body>
<!-- servidor -->
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true&amp;key=ABQI AAAAynhTMdjKYP0qmFLv2ynwYhS7JkZAZIEhGzPm07QkjMQWjd z2jxRCSWsHtvYhgJBEebN3LpSh1CpWVg" type="text/javascript"></script>

<script type="text/javascript">
//<![CDATA[

// Inicialización de variables.
var map = null;
var geocoder = null;

function load() { // Abre LLAVE 1.
if (GBrowserIsCompatible()) { // Abre LLAVE 2.
map = new GMap2(document.getElementById("map"));

map.setCenter(new GLatLng(36.5296879,-6.2926569), 15);
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());

geocoder = new GClientGeocoder();

//---------------------------------//
// MARCADOR AL HACER CLICK
//---------------------------------//
GEvent.addListener(map, "click",
function(marker, point) {
if (marker) {
null;
} else {
map.clearOverlays();
var marcador = new GMarker(point);
map.addOverlay(marcador);
//marcador.openInfoWindowHtml("<b><br>Coordenadas:<b r></b>Latitud : "+point.y+"<br>Longitud : "+point.x+"<a href=http://www.mundivideo.com/fotos_pano.htm?lat="+point.y+"&lon="+point.x+"&map a=3 TARGET=fijo><br><br>Fotografias</a>");
//marcador.openInfoWindowHtml("<b>Coordenadas:</b> "+point.y+","+point.x);
document.form_mapa.coordenadas.value = point.y+","+point.x;
}
}
);
//---------------------------------//
// FIN MARCADOR AL HACER CLICK
//---------------------------------//

} // Cierra LLAVE 1.
} // Cierra LLAVE 2.

//---------------------------------//
// GEOCODER
//---------------------------------//
function showAddress(address, zoom, valor) {
if (geocoder) {
geocoder.getLatLng(address,
function(point) {
if (!point) {
alert(address + " not found");
} else {
map.setCenter(point, zoom);
var marker = new GMarker(point);
map.addOverlay(marker);
//marker.openInfoWindowHtml("<b>"+address+"</b><br>Coordenadas:<br>Latitud : "+point.y+"<br>Longitud : "+point.x+"<a href=http://www.mundivideo.com/fotos_pano.htm?lat="+point.y+"&lon="+point.x+"&map a=3 TARGET=fijo><br><br>Fotografias</a>");
// marker.openInfoWindowHtml("<b>Coordenadas:</b> "+point.y+","+point.x);
document.form_mapa.coordenadas.value = point.y+","+point.x;
}
}
);
}}
//---------------------------------//
// FIN DE GEOCODER
//---------------------------------//
//]]>
</script>

</head>
<body onLoad="load();" onunload="GUnload();">
<h1 style="border: 1px solid #CCC;background-color: #EEE;color: #999; width:450px; font-family: verdana; font-size:9px">OBTENER COORDENADAS DE UN PUNTO EN GOOGLE MAPS</h1>

<form name="form_mapa" method="GET" enctype="multipart/form-data">
<!-- <form name="form_mapa" method="GET" onsubmit="showAddress(this.address.value, this.zoom.value=parseFloat(this.zoom.value)); return false" enctype="multipart/form-data"> -->

<p style="font-size: 10px;font-family: verdana;font-weight: bold;">Dirección a buscar:
<input type="text" name="address" value="" style="width: 320px;font-size: 10px;font-family: verdana;font-weight: bold;" />
<input type="hidden" size="1" name="zoom" value=15 />
<input type="submit" onclick = "showAddress(this.address.value, this.zoom.value=parseFloat(this.zoom.value)); return false" value="Ver" />
</p>
<p style="font-size: 10px;font-family: verdana;font-weight: bold;">Coordenadas:
<input type="text" name="coordenadas" value="" style="width: 350px;font-size: 10px;font-family: verdana;font-weight: bold;" />
<input type="submit" name="coordenadas2" onclick = "this.form.action = 'http://www.pisoscadiz.info/zrecoge.php'" value="Grabar" />
</p>
</form>
<br />
<div style="width: 450px; border-width: 1px; border-style: solid; border-color: #979797; padding:8px 8px 8px 8px;">
<div id="map" style="width: 450px; height: 300px"></div>
</div>
<form name="form_mapa_1" action="#" onclick=" showAddress(this.address.value, 15); return false"> </form>
</body>


Y recojo la variable en zrecoge.php

<?php
$muestra=$_GET[coordenadas];
echo $muestra;
?>


La clave está en estas dos líneas:
<form name="form_mapa" method="GET" enctype="multipart/form-data">
<!-- <form name="form_mapa" method="GET" onsubmit="showAddress(this.address.value, this.zoom.value=parseFloat(this.zoom.value)); return false" enctype="multipart/form-data"> -->

Si activo una y desactivo otra me funcionan bien, pero no consigo poder obtener las coordenadas escribiendo la dirección, pinchando en el mapa, y que cuando esté sobre el sitio adecuado se me graben al darle al botón de bragar.

Ayuda por favor. Gracias
  #2 (permalink)  
Antiguo 22/12/2010, 12:55
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 9 años
Puntos: 50
Respuesta: Formulario de Geolocalización

Amigo, tu código está muy desordenado y se hace dificil entenderlo. Yo he hecho lo mismo que intentas y es simplemente esto:

1) Obtienes el punto que el usuario marcó, con la api de gmaps.

2) Envías los valores a dos campos diferentes dentro del form, uno para latitud y otro para longitud ( lo envias con javascrilpt )

3) Quedaría solo guardarlos por separado la latitud y longitud ( recuerda usar campo tipo double en la bd )
  #3 (permalink)  
Antiguo 22/12/2010, 12:55
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 9 años, 10 meses
Puntos: 55
Respuesta: Formulario de Geolocalización

no entiendo el problema, al hacer click sobre el mapa las cordenadas las escribe en el input y luego las manda a la direccion del onclick y las muestra por pantalla, cual es el problema ?
  #4 (permalink)  
Antiguo 22/12/2010, 13:14
 
Fecha de Ingreso: mayo-2010
Mensajes: 53
Antigüedad: 9 años, 6 meses
Puntos: 6
Respuesta: Formulario de Geolocalización

Gracias a ambos por responder. A vosotros os parece muy sencillo pero yo estoy como loco con este tema.

En un ejemplo me funciona mostrar las coordenadas a partir de una dirección, pero no me funciona cuando intento pasar esas coordenadas al otro archivo. Es este: http://www.pisoscadiz.info/zgeolocalizador1.php

Y en el otro ejemplo pasa lo contrario, consigo que me pase las coordenadas que obtengo si pincho en el mapa, pero no me funciona el boton de ver a partir de una dirección. es este: http://www.pisoscadiz.info/zgeolocalizador.php

Pero mi problema es que quiero que lo haga todo. Que recoja las coordenadas tanto si pinchas en el mapa como si le pones la dirección, y que cuando al final le des al botón de grabar te mande las coordenadas al otro archivo.

Lo que cambio para que haga una cosa u otra es solo estas líneas que las activo o desactivo a una u otra.

<form name="form_mapa" method="GET" enctype="multipart/form-data">
<!-- <form name="form_mapa" method="GET" onsubmit="showAddress(this.address.value, this.zoom.value=parseFloat(this.zoom.value)); return false" enctype="multipart/form-data"> -->

Gracias de nuevo
  #5 (permalink)  
Antiguo 22/12/2010, 13:30
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 9 años
Puntos: 50
Respuesta: Formulario de Geolocalización

Tenés un error javascript en ambos y puede ser el problema:
Código Javascript:
Ver original
  1. this.address is undefined

Te recomiendo instalarte el firebug para mozilla, con esto ves todos los errores js.
  #6 (permalink)  
Antiguo 22/12/2010, 14:39
 
Fecha de Ingreso: mayo-2010
Mensajes: 53
Antigüedad: 9 años, 6 meses
Puntos: 6
Respuesta: Formulario de Geolocalización

Ya tengo firebug el problema es que no entiendo de javascript. Me suelo manejar con PHP y javascript muy básico. Pero no se como solucionarlo. ¿me ayudas a corregir ese error?. Gracias
  #7 (permalink)  
Antiguo 22/12/2010, 14:45
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 9 años
Puntos: 50
Respuesta: Formulario de Geolocalización

Cita:
Iniciado por Joselito36 Ver Mensaje
Ya tengo firebug el problema es que no entiendo de javascript. Me suelo manejar con PHP y javascript muy básico. Pero no se como solucionarlo. ¿me ayudas a corregir ese error?. Gracias
No se si esto solucionará tu problema pero te paso como podrías hacerlo para evitar esto:

Debes cambiar:

Código HTML:
Ver original
  1. <p style="font-size: 10px;font-family: verdana;font-weight: bold;">Dirección a buscar:
  2. <input type="text" name="address" value="" style="width: 320px;font-size: 10px;font-family: verdana;font-weight: bold;" />
  3. <input type="hidden" size="1" name="zoom" value=15 />
  4. <input type="submit" onclick = "showAddress(this.address.value, this.zoom.value=parseFloat(this.zoom.value)); return false" value="Ver" />
  5. </p>

por

Código HTML:
Ver original
  1. <p style="font-size: 10px;font-family: verdana;font-weight: bold;">Dirección a buscar:
  2. <input type="text" name="address" id="address" value="" style="width: 320px;font-size: 10px;font-family: verdana;font-weight: bold;" />
  3. <input type="hidden" size="1" id="zoom" name="zoom" value=15 />
  4. <input type="submit" onclick = "showAdd(); return false" value="Ver" />
  5. </p>

Luego declaras esto:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. function showAdd() {
  3. try{
  4.  
  5. var address = document.getElementById("address").value;
  6. var zoom = document.getElementById("zoom").value;
  7.  
  8. showAddress(address, zoom=parseFloat(zoom));
  9. } catch(error) {
  10.  alert(error);//esto te dirá si algo no salió bien
  11. }
  12. }
  13. </script>
  #8 (permalink)  
Antiguo 22/12/2010, 14:54
 
Fecha de Ingreso: mayo-2010
Mensajes: 53
Antigüedad: 9 años, 6 meses
Puntos: 6
Respuesta: Formulario de Geolocalización

GUAU!!! dos días detrás de esto y no tenía forma de conseguirlo. Si quieres te pongo un piso, jah jah. Eres un genio, muchísimas gracias.

Gracias a tu corrección ¡¡¡Funciona perfecto!!!.

En serio si necesitas algo dímelo.

Un abrazo y felices fiestas.
  #9 (permalink)  
Antiguo 22/12/2010, 14:56
 
Fecha de Ingreso: mayo-2010
Mensajes: 53
Antigüedad: 9 años, 6 meses
Puntos: 6
Respuesta: Formulario de Geolocalización

Lo pego entero por si alguien lo quiere aplicar. Pero que sepaís que todo el mérito es de walterdevel.

<body>
<!-- servidor -->
<script src="AQUI TIENE QUE IR VUESTRA API DE GOOGLE MAPS" type="text/javascript"></script>

<script type="text/javascript">
//<![CDATA[

// Inicialización de variables.
var map = null;
var geocoder = null;

function load() { // Abre LLAVE 1.
if (GBrowserIsCompatible()) { // Abre LLAVE 2.
map = new GMap2(document.getElementById("map"));

map.setCenter(new GLatLng(36.5296879,-6.2926569), 15);
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());

geocoder = new GClientGeocoder();

//---------------------------------//
// MARCADOR AL HACER CLICK
//---------------------------------//
GEvent.addListener(map, "click",
function(marker, point) {
if (marker) {
null;
} else {
map.clearOverlays();
var marcador = new GMarker(point);
map.addOverlay(marcador);
//marcador.openInfoWindowHtml("<b><br>Coordenadas:<b r></b>Latitud : "+point.y+"<br>Longitud : "+point.x+"<a href=http://www.mundivideo.com/fotos_pano.htm?lat="+point.y+"&lon="+point.x+"&map a=3 TARGET=fijo><br><br>Fotografias</a>");
//marcador.openInfoWindowHtml("<b>Coordenadas:</b> "+point.y+","+point.x);
document.form_mapa.coordenadas.value = point.y+","+point.x;
}
}
);
//---------------------------------//
// FIN MARCADOR AL HACER CLICK
//---------------------------------//

} // Cierra LLAVE 1.
} // Cierra LLAVE 2.

//---------------------------------//
// GEOCODER
//---------------------------------//
function showAddress(address, zoom, valor) {
if (geocoder) {
geocoder.getLatLng(address,
function(point) {
if (!point) {
alert(address + " No se encuentra. Introduzca una dirección válida");
} else {
map.setCenter(point, zoom);
var marker = new GMarker(point);
map.addOverlay(marker);
//marker.openInfoWindowHtml("<b>"+address+"</b><br>Coordenadas:<br>Latitud : "+point.y+"<br>Longitud : "+point.x+"<a href=http://www.mundivideo.com/fotos_pano.htm?lat="+point.y+"&lon="+point.x+"&map a=3 TARGET=fijo><br><br>Fotografias</a>");
// marker.openInfoWindowHtml("<b>Coordenadas:</b> "+point.y+","+point.x);
document.form_mapa.coordenadas.value = point.y+","+point.x;
}
}
);
}}
//---------------------------------//
// FIN DE GEOCODER
//---------------------------------//
//]]>
</script>

</head>
<body onLoad="load();" onunload="GUnload();">
<h1 style="border: 1px solid #CCC;background-color: #EEE;color: #999; width:450px; font-family: verdana; font-size:9px">OBTENER COORDENADAS DE UN PUNTO EN GOOGLE MAPS</h1>

<form name="form_mapa" method="GET" enctype="multipart/form-data">
<!-- <form name="form_mapa" method="GET" onsubmit="showAddress(this.address.value, this.zoom.value=parseFloat(this.zoom.value)); return false" enctype="multipart/form-data"> -->



<p style="font-size: 10px;font-family: verdana;font-weight: bold;">Dirección a buscar:

<input type="text" name="address" id="address" value="" style="width: 320px;font-size: 10px;font-family: verdana;font-weight: bold;" />

<input type="hidden" size="1" id="zoom" name="zoom" value=15 />

<input type="submit" onclick = "showAdd(); return false" value="Ver" />

</p>

<script type="text/javascript">

function showAdd() {

try{



var address = document.getElementById("address").value;

var zoom = document.getElementById("zoom").value;



showAddress(address, zoom=parseFloat(zoom));

} catch(error) {

alert(error);//esto te dirá si algo no salió bien

}

}

</script>
<p style="font-size: 10px;font-family: verdana;font-weight: bold;">Coordenadas:
<input type="text" name="coordenadas" value="" style="width: 350px;font-size: 10px;font-family: verdana;font-weight: bold;" />
<input type="submit" name="coordenadas2" onclick = "this.form.action = 'http://www.pisoscadiz.info/zrecoge.php'" value="Grabar" /></p>

</form>


</p><br />

<div style="width: 450px; border-width: 1px; border-style: solid; border-color: #979797; padding:8px 8px 8px 8px;">
<div id="map" style="width: 450px; height: 300px"></div>
</div>

<form name="form_mapa_1" action="#" onclick=" showAddress(this.address.value, 15); return false">

</form>

</body>
  #10 (permalink)  
Antiguo 22/12/2010, 15:00
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 9 años
Puntos: 50
Respuesta: Formulario de Geolocalización

Cita:
Iniciado por Joselito36 Ver Mensaje
GUAU!!! dos días detrás de esto y no tenía forma de conseguirlo. Si quieres te pongo un piso, jah jah. Eres un genio, muchísimas gracias.

Gracias a tu corrección ¡¡¡Funciona perfecto!!!.

En serio si necesitas algo dímelo.

Un abrazo y felices fiestas.

Me alegro de que te funcione.

Gracias a vos, y felices fiestas también!
  #11 (permalink)  
Antiguo 22/12/2010, 16:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Tema movido desde PHP a Javascript

Etiquetas: geolocalización, geolocalizar, manual, manualmente, formulario
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 11:56.