Buenas,
Quiero que cuando hagas click en una marca de posición (placemark), la información se muestre en la vista y esta se vea justo debajo del mapa.
El código que tengo es el siguiente:
Vista donde genero el mapa:
<?php
Yii::import('ext.gmap.*');
$fileMapa = Yii::app()->params['dirMapas'].$model->id.'.kml';
//echo Yii::getPathOfAlias('webroot').DIRECTORY_SEPARATOR.$fileMapa;
// if(file_exists($fileMapa)) {
$criteria = new CDbCriteria();
$criteria->compare('id_zona', (int)$model->id);
$seniales = $seniales = Ensal::model()->findAll($criteria);
$gMap = new EGMap();
$gMap->setWidth('100%');
$gMap->setHeight('600px');
$gMap->zoom = 10;
$mapTypeControlOptions = array(
'position'=> EGMapControlPosition::LEFT_BOTTOM,
'style'=>EGMap::MAPTYPECONTROL_STYLE_DROPDOWN_MENU,
);
$options = array(
'mapTypeId'=> EGMap::TYPE_HYBRID,
);
$gMap->setOptions($options);
$gMap->mapTypeControlOptions= $mapTypeControlOptions;
//print $fileMapa;
$fileRed = Yii::app()->params['dirMapas'].$model->id.'-red.kml';
if (file_exists($fileRed))
$gMap->enableKMLService(Yii::app()->getBaseUrl(true).'/'.$fileMapa,Yii::app()->getBaseUrl(true).'/'.$fileRed, true);
else
$gMap->enableKMLService(Yii::app()->getBaseUrl(true).'/'.$fileMapa,'', true);
foreach ($seniales as $senial) {
if (!empty($senial->HInicioNoche) && !empty($senial->HFinNoche)) {
$HInicioNoche = (string)$senial->HInicioNoche;
$HFinNoche = (string)$senial->HFinNoche;
}
else {
$horaNoctGlobal = GConfig::model()->find();
$HInicioNoche = (string)$horaNoctGlobal->HInicioNoche;
$HFinNoche = (string)$horaNoctGlobal->HFinNoche;
}
// Obtenemos la fecha de los ultimos datos para cada entrada/salida
$criteria = new CDbCriteria();
$criteria->with=array(
'idImeter'=>array(
'joinType'=>'INNER JOIN'
)
);
$criteria->select = array("fecha");
$criteria->order = 'fecha DESC';
if (!empty($senial->formula)) {
Yii::import('application.controllers.EnsalController');
$criteria->compare('t.id_formula', (string)implode(EnsalController::extraerIdsFormula($senial->formula)));
}
else {
$criteria->compare('idImeter.id_ensal', (int)$senial->id);
}
$ult_fecha = Datos::model()->find($criteria);
if (isset($ult_fecha->fecha))
$fecha = $ult_fecha->fecha;
else
$fecha = '0000-00-00';
$icon = new EGMapMarkerImage(Yii::app()->theme->baseUrl."/images/icons/caudalimetros.png");
// Definimos el icono en función si es admiministrador y hay alarma o no
if ($res_alarma = Alarmas::model()->existeAlarma($senial->id) && Yii::app()->getModule('user')->isAdmin()) {
//$alarma = true;
//print "Alarma - $senial->id\n<br />";
$icon = new EGMapMarkerImage(Yii::app()->theme->baseUrl."/images/icons/alarma.gif");
}
// Seleccionamos los datos más relevantes de cada entrada/salida nocturnos
//$fecha = date('Y-m-d', strtotime('-1 day'));
$criteria_noct = new CDbCriteria();
$criteria_noct->with=array(
'idImeter'=>array(
'joinType'=>'INNER JOIN',
'with' => array(
'idEnsal' => array(
'joinType' => 'INNER JOIN',
'select' => array('longitud','nAcometidas','nAbonados'),
)
)
)
);
$criteria_noct->compare('t.fecha', (string)$fecha);
if (!empty($senial->formula)) {
Yii::import('application.controllers.EnsalController');
$criteria_noct->compare('t.id_formula', (string)implode(EnsalController::extraerIdsFormula($senial->formula)));
}
else {
$criteria_noct->compare('idImeter.id_ensal', (int)$senial->id);
}
// Filtramos por horario nocturno
$criteria_noct->addBetweenCondition('t.HLectura', (string)$HInicioNoche, (string)$HFinNoche);
$criteria_noct->order='t.fecha';
//$criteria_noct->select=array('MAX(t.consumo) AS max_consumo', 'MIN(t.consumo) AS min_consumo', 'ROUND(AVG(t.consumo),3) AS media_consumo', 'MAX(t.caudal) AS max_caudal', 'MIN(t.caudal) AS min_caudal', 'ROUND(AVG(t.caudal),3) AS media_caudal');
$criteria_noct->select=array('MIN(t.caudal) AS min_caudal');
$res_nocturno = Datos::model()->find($criteria_noct);
if (isset($res_nocturno)) {
if (Yii::app()->getModule('user')->isAdmin())
//$minTeorico = '<li><span>'.Yii::t("default", "Minimum theoretical").': '. (( $res_nocturno->idImeter->idEnsal->longitud * 35) + ( $res_nocturno->idImeter->idEnsal->nAcometidas * 2.5 ) + ($res_nocturno->idImeter->idEnsal->nAbonados * 1.5))/1000 .' m<sup>3</sup>/h</span></li>';
$minTeorico = $senial->minTeorico;
else
$minTeorico = "";
if (file_exists(Yii::app()->params['dirEnsalImgs'].$senial->id.'.jpg'))
$foto = '<img src='.Yii::app()->getBaseUrl(true) .'/'. Yii::app()->params['dirEnsalImgs'].$senial->id.'.jpg />';
else
$foto = '';
$marker = new EGMapMarkerWithLabel($senial->cord_y, $senial->cord_x, array('title' => $senial->nombre,'icon'=>$icon));
$marker->labelContent = $senial->NomAbrev;
$marker->labelClass='labels';
$teorico = $res_nocturno->idImeter->idEnsal->longitud;
$acometidas = $res_nocturno->idImeter->idEnsal->nAcometidas;
$abonados = $res_nocturno->idImeter->idEnsal->nAbonados;
$fecha = date('d-m-Y', strtotime($fecha));
$marker->addEvent(new EGMapEvent('click', "function (event) { $.ajax({
'type':'GET',
'url':'".Yii::app()->createUrl('zonas/pruebas2')."',
'data'<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/sad.gif' class='bbc_emoticon' alt=':(' />{'mincaudal': $res_nocturno->min_caudal,'teorico':$minTeorico,'longitud':$teorico ,'acometidas':$acometidas,'abonados':$abonados}),
'cache':false,
});}", false, EGMapEvent::TYPE_EVENT_DEFAULT));
/*//
$marker->addEvent(new EGMapEvent('click',"
var text = $res_nocturno->min_caudal;
return false;
"
));
*
*/
$gMap->addMarker($marker);
}
//}
$gMap->appendMapTo('#mapa');
$gMap->renderMap();
}
?>
<div id="mapa"><!--<div style="width:100px;height:100px;background-color: red;z-index:10;">aaaaaa</div>--></div>
<div id="prueba"></div>
El comportamiento en ajax del mapa es este:
$marker->addEvent(new EGMapEvent('click', "function (event) { $.ajax({
'type':'GET',
'url':'".Yii::app()->createUrl('zonas/pruebas2')."',
'data'<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/sad.gif' class='bbc_emoticon' alt=':(' />{'mincaudal': $res_nocturno->min_caudal,'teorico':$minTeorico,'longitud':$teorico ,'acometidas':$acometidas,'abonados':$abonados}),
'cache':false,
});}", false, EGMapEvent::TYPE_EVENT_DEFAULT));
Acción pruebas2 del controlador:
public function actionPruebas2() {
$model = $this->loadModel($id);
//print_r($_GET);
$datos = $_GET;
$this->renderPartial('_pruebas', array('datos'=>$datos,'model'=>$model));
}
Vista donde se muestran los datos
<?php
print_r($datos);
?>
Intente agregar un renderpartial en la vista donde genero el mapa, pero tampoco funcionaba. Si observo firebug lo hace bien porque llama a prueba2 con los parámetros GET y en su respuesta sale el array pintado por pantalla. El problema es que no se como hacer para que se puede visualizar en la misma vista del mapa.