El componente ei_mapa tiene una funcion que permite hacer un click en el dibujo ( mapa ) y devuelve la posicion x e y donde se hizo click.
Yo necesito poder hacer una consulta a la tabla de postgis para que devuelva el id del registro donde esta el poligono donde se hizo el click …
Esto seria como devolver un “feature” o “Atributo” de objeto que esta dibujado.
Entonce la pregunta es:
-Como lo hago?
habria que modificar el componente del core de toba (ei_mapa.php) ?
o con lo que tiene ese componente me sirve ?
como afecta a todo esto, el echo de que en el medio ademas esta la libreria del mscross (http://datacrossing.crs4.it/en_Documentation_mscross.html) ?
deberia tambien modificar el js ei_mapa.js para copiar la funcionalidad de dicha aplicacion ?
como parte de la API JS del ei_mapa se encuentra el metodo setear_parametros, el cual te permite enviar al servidor todo los datos que quieras, el mismo es un string asi que si quieres por ejemplo pasar un par de coordenadas deberias juntar el arreglo antes de llamar al metodo, dichos datos se te entregaran en el servidor en el listener del evento en cuestion. Fue la forma que encontramos de darle flexibilidad al componente, ya que la variedad de datos a enviar puede ser muy grande.
Queda bajo tu responsabilidad, realizar la validacion de esos datos para prevenir cualquier tipo de ataque, ya sea XSS, CSRF, etc.
como afecta a todo esto, el echo de que en el medio ademas esta la libreria del mscross (http://datacrossing.crs4.it/en_Documentation_mscross.html) ?
deberia tambien modificar el js ei_mapa.js para copiar la funcionalidad de dicha aplicacion ?
Seguramente vas a tener una extension JS para el componente ei_mapa, en dicha extension vas a implementar la captura de las coordenadas y su agregado para el envio al servidor, mientras que trabajes con la API no deberia verse afectado el cliente MsCross, la clase ei_mapa.js se extiende como la de cualquier otro componente.
Hola Richard, como siempre gracias por tu respuesta.
Pero sigo perdido, encontre el metodo setear_parametros en el objeto JS, le asigne algunos valores en el evento evt__iniciar … per no veo nada en el metodo ejecutar_servicio($parametro), o no me llega nada.
lo que necesito es que al hacer click en el mapa … me devuelva el id del postgis, creo que quiza hay que volver a invocar el mapserver, en modo query, me queda leer un poco mas de eso.
Bueno, sigo en contacto.
Saludos
El tema es que para que los datos viajen al servidor se requiere de un evento, para eso tenes que declarar un evento en toba_editor para el mapa. Ponelo en botonera y con maneja datos.
Ya sea que lo dispares por la interfaz o lo hagas a mano, si el evento no esta entre los pasibles de ser lanzados Toba no lo tomara en cuenta (como en el resto de los componentes).
El pedido de imagen se hace a un servicio especifico via GET y no recorre el mismo camino que un evento, esto es… todo dato que quieras mantener para un posterior pedido de imagen deberias guardarlo en sesion y recuperarlo en el metodo conf del mapa.
No se si te aclare o te oscureci mas la cosa, seguimos en contacto.
Saludos
Hola Richard.
Bueno aqui estoy nuevamente con el componente ei_mapa.
Te cuento que intente lo que me propusiste y no tengo suerte.
cree un evento con boton y con manejo de datos, “verdatos”, luego cree la funcion en la extension ei_mapa.php
/**
* Atrapa la interacción del usuario con el botón asociado
* @param array $datos Estado del componente al momento de ejecutar el evento. El formato es el mismo que en la carga de la configuración
*/
function evt__mapa__verdatos($datos)
{
toba::logger()->debug(" evt __mapa__verdatos: \n $datos ");
}
pero no logro ver nada en el log !
Te adjunto una imagen de como tengo la pantalla ahora.
Como te comentaba la idea es que al hacer click, el gis me devuelva un atributo, el id, asi con eso puedo consultar una tabla que esta en la misma base, y me traiga informacion !!
pero hasta el momento lo unic que puedo lograr es que me de las coordenadas dentro del dibujo donde hice click !! , si hago zoom y hago cick en el mismo lugar, me da siempre el mismo valor !
recorda que las funciones que atrapan eventos en PHP, van en el CI, no en la subclase particular del componente cuyo evento queres capturar.
Te adjunto una imagen de como tengo la pantalla ahora.
Como te comentaba la idea es que al hacer click, el gis me devuelva un atributo, el id, asi con eso puedo consultar una tabla que esta en la misma base, y me traiga informacion !!
pero hasta el momento lo unic que puedo lograr es que me de las coordenadas dentro del dibujo donde hice click !! , si hago zoom y hago cick en el mismo lugar, me da siempre el mismo valor !
El cliente del mapa solo maneja coordenadas, lo que deberias hacer es obtener a partir de esas coordenadas el ID en cuestion (consulta geolocalizada) y luego utilizarlo para consultar la tabla particular que queres.
El cliente del mapa solo maneja coordenadas, lo que deberias hacer es obtener a partir de esas coordenadas el ID en cuestion (consulta geolocalizada) y luego utilizarlo para consultar la tabla particular que queres.
Exactamente ese es mi problema, ya que lo unico que puedo recuperar es la coordenada x,y dentro del dibujo, no es una coordenada de geolocalizacion !
Si con el dibujo inicial hago click en un lugar a 1cm del borde me da , por ejemplo x:20, y:50, hagoa zoom, me muevo pro el mapa, y si hago click en el dibujo a 1 cm del borde sigue dando x:20, y:50, se entiende ?
Con respecto a la funcion “evt__mapa__verdatos($datos)” lo cree con el asistente de generacion do codigo en el CI .
no se donde mas deberia ponerlo ?
Saludos
Sigo investigando: esta funcion se invoca dentro del js ei_mapa.js
ei_mapa.prototype.get_punto_click = function (evento)
{
var punto = [];
punto['X'] = this._mapa.getClick_X(evento); //Recupero la posicion en el eje X
punto['Y'] = this._mapa.getClick_Y(evento); //Recupero la posicion en el eje Y
return punto;
}
cuando se hace click, invoca a los metodos getClick_X y getClick_Y del msCross !
de ahi que las coordenadas en el dibujo, no son coordenadas geoposicionales …
o si?
las coordenadas que te devuelven eso metodos son relativas al mapa y no geoposicionales, sin embargo existe otro metodo llamado getExtentActual que devuelve el extent del mapa, el problema con esa funcion es que asume que ya se actualizaron ciertos valores para ext_Xmin, ext_Ymin, etc.
Sin embargo, basandote en esa funcion podes hacer un metodo propio en JS que transforme las coordenadas relativas del mapa a un extent geoposicionado.