amigos estoy empezando con el manejo de mapas y localizacion, estoy haciendo una aplicacion que al loguearse el usuario
y al darle click en un boton me guarde las coordenadas (lat,long) de donde esta en la base de datos, no necesariamente tiene q salir el mapa, y q en otro usuario, pueda ver al seleccionar dicho usuario en el mapa en donde guardo esas coordenadas, me pueden ayudar, michas gracias, estuve colocando la api de google pero no fui capaz, hice esto en el view solo para mostrar algun mapa pero q hace: cuando abro la pagina me trata de mostrar el mapa pero lo esconde en menos de un segundo y desaparece, si alguien me puede ayudar con lo q pido y de paso resolverme la duda del error q tengo gracias
el codigo siguiente es en el view/ubicacionLider/admin
<?php
/* @var $this UbicacionLideresController */
/* @var $model UbicacionLideres */
/* @var $form CActiveForm */
?>
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'ubicacion-lideres-form',
// Please note: When you enable ajax validation, make sure the corresponding
// controller action is handling ajax validation correctly.
// There is a call to performAjaxValidation() commented in generated controller code.
// See class documentation of CActiveForm for details on this.
'enableAjaxValidation'=>false,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'id_lider'); ?>
<?php echo $form->textField($model,'id_lider',array('size'=>20,'maxlength'=>20)); ?>
<?php echo $form->error($model,'id_lider'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'latitud'); ?>
<?php echo $form->textField($model,'latitud'); ?>
<?php echo $form->error($model,'latitud'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'longitud'); ?>
<?php echo $form->textField($model,'longitud'); ?>
<?php echo $form->error($model,'longitud'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'fecha'); ?>
<?php echo $form->textField($model,'fecha'); ?>
<?php echo $form->error($model,'fecha'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<script type="text/javascript">
var map;
function initialize() {
var mapOptions = {
zoom: 8,
center: new google.maps.LatLng(-34.397, 150.644)
};
map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
<div id="map-canvas">
<div id="map_canvas" style="width:100%; height:400px"></div>
<div id="crosshair"></div>
</div>
<div id="map-canvas"></div>
amigo el probelma q tengo es el siguiente, en ultimas necesito es obtener las coordenadas y enviarlas a la base de datos
yo pego en el view ‘_form’ este codigo
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script>
// Note: This example requires that you consent to location sharing when
// prompted by your browser. If you see a blank space instead of the map, this
// is probably because you have denied permission for location sharing.
var latitud;
function initialize() {
// Try HTML5 geolocation
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var pos = new google.maps.LatLng(position.coords.latitude,
position.coords.longitude);
latitud=position.coords.latitude;
window.alert(latitud);
}, function() {
handleNoGeolocation(true);
});
} else {
// Browser doesn't support Geolocation
handleNoGeolocation(false);
}
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
se q el esta tomando las coordenadas porq lo muestra mediante el alert, yo quiero q me guarde las coordenadas en la base de datos, haciendo pruebas hice q mediante el get.elementbyid() los pusiera en un textfield y al darle el boton guardar me dice q falta llenar esos campos, visualmente los muestra pero no los toma,
lo q quiero es q se guarden directamente en la base de datos pero no se como enviarlos, gracias
me da error, me sale esto :Undefined index: latitud voy a colocar todo el codigo, yo lo q quiero e q cuando cargue el ubicacionLideres/create me tome las coordenadas y me las muestre en un textfuiedl, para ver si me las esta cogiendo, despues de la prueba ps solo mostrare un mensaje y quitare los textfield, pero inicilmente quiero verlos en el textfield. ay pongo mi codigo:
en la vista view/ubicacionLideres/_form:
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script>
var latitud;
var longitud;
function initialize() {
// Try HTML5 geolocation
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var pos = new google.maps.LatLng(position.coords.latitude,
position.coords.longitude);
latitud=position.coords.latitude;
longitud=position.coords.longitude;
$.ajax(
{
url : "<?php echo Yii::app()->createUrl('UbicacionLideres/create'); ?>",
type : "POST",
data : {latitud : latitud, longitud : longitud},
success : function(data)
{
alert($.trim(data));
if($.trim(data) == "lo que devuela")
alert("Coordenadas guardadsa correctamente");
else
alert("Error guardando coordenadas.");
}
});
}, function() {
handleNoGeolocation(true);
});
} else {
// Browser doesn't support Geolocation
handleNoGeolocation(false);
}
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
en el controlador: ubicacionLideresController la parte del create
public function actionCreate()
{
$model=new UbicacionLideres;
$model->id_usuario=Yii::app()->user->id;
$model->fecha=date('y-m-d');
$model->latitud=$_POST['latitud'];
$model->longitud=$_POST['longitud'];
if(isset($_POST['UbicacionLideres']))
{
$model->attributes=$_POST['UbicacionLideres'];
if($model->save())
$this->redirect(array('admin'));
}
$this->render('create',array(
'model'=>$model,
));
}
y me sale ese error q comente al incio com si no reconociera la variable
Es q la primera vez q te carga el create no tienes POST con las variables latitud y longitud!!!!
El código JavaScript está en la view, no en el controlador. Entonces como primero se carga el controlador, no tienes latitud y longitud en POST.
El código funciona pq lo acabo de probar.
Haz lo siguiente:
public function actionCreate()
{
$model=new UbicacionLideres;
if(isset($_POST['UbicacionLideres']))
{
$model->attributes=$_POST['UbicacionLideres'];
$model->id_usuario=Yii::app()->user->id;
$model->fecha=date('y-m-d');
// Esto sólo lo quieres hacer si la petición es mediante AJAX
if(Yii::app()->request->isAjaxRequest)
{
$model->latitud=$_POST['latitud'];
$model->longitud=$_POST['longitud'];
}
if($model->save() && !Yii::app()->request->isAjaxRequest)
$this->redirect(array('admin'));
else
Yii::app()->end();
}
$this->render('create',array(
'model'=>$model,
));
}
Y listo.
De todas formas, yo en lugar de hacerlo en la acción create lo haría en otra acción, es decir, me crearía otra acción para la petición AJAX.
listo amigo, como lo haria en otra accion para pasar los datos porq estuve intentando pero no me pasa los datos,pero entonces por lo q veo no podria al abrir la pagina ejecutar el intert puesto q no a hecho post, entonces tendria q colocar un boton para q le dieran y ay si registrar registrar, es q necesito q abran esa pagina en un celular y guarden las coordenadas para verlas desde otro y como yii no hace app entonces me toca asi ay manera de q una vez q le den en el boton cada cierto tiempo guarde las coordenadas? gracias