Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Buxexa

[Resolvido] Google MAPS

Recommended Posts

Boa noite,

 

Galera procurei no forum e achei algo parecido mas não resolveu, to com um pepino aqui no trampo que é o seguinte:

 

No cadastro de um Registro no site, é armazenado o valor de latitude e longitude no bd através do link que o google fornece quando estamos em um endereço, por exemplo: http://maps.google.com.br/maps?f=q&source=s_q&hl=pt-BR&geocode=&q=R.+Morais+E+Silva+51,+Maracan%C3%A3%3F,+Rio+de+Janeiro,+20271-030,+Brazil&ie=UTF8&cd=1&ll=-22.912112,-43.221481&spn=0.009072,0.021007&z=16&iwloc=r2 ;

 

Tem-se uma rotina que separa o parametro ll da url armazenando os valores em hosp_xmap e hosp_ymap.

 

Nesse caso o hosp_xmap será -22.912112 e o ymap -43.221481.

 

beleza, até ai tudo bem.

Quando vou retornar no site, através de iframe usando os recursos do API:

var point = new GLatLng(<?php echo $latlng; ?>); // o valor da $latlng = xmap,ymap. sendo igual o do google mesmo

 

o que acontece é que não fica exato o lugar... varia de 100 a 200 metros.

 

Alguém pode me ajudar?

 

Segue o código da criação de mapa completo aqui:

var geocoder = new GClientGeocoder(); 
geocoder.setBaseCountryCode("pt_BR");
		
var map = new GMap2(document.getElementById("map_canvas"));

//define a latitude / longitude
var point = new GLatLng(<?php echo $latlng; ?>);
			
map.setCenter(point, 15);

map.addOverlay(new GMarker(point));

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pior que nem é, acabei de testar separando deu em nada.... O firebug também não acusou erro.

 

Ainda to ralando aqui na referência da API...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já testou com um exemplo estático e simples?

 

Veja:

http://code.google.com/intl/pt-BR/apis/maps/documentation/introduction.html#The_Hello_World_of_Google_Maps

 

Acontece o mesmo problema?

 

 

PS: Teste em vários navegadores. Em todos há esse deslocamento?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é,

 

até com o simples está dando esse erro:

 

<script type="text/javascript">

 

function initialize() {

if (GBrowserIsCompatible()) {

var map = new GMap2(document.getElementById("map_canvas"));

var point = new GLatLng(-22.912231, -43.222661);

map.setCenter(point, 15);

map.addOverlay(new GMarker(point));

 

}

}

 

</script>

 

Eu informo a latitude e longitude e ele retorna uma diferença de distancia. Pode testar esse codigo ai se quiser.

 

Eu to tentando saber como envia o cep e a rua direitinho e ai ele aponta um retorno, eu até achei essa solução:

Funciona perfeitamente para 1 ponto no mapa, mas pra mais de um ponto da bug no marcador.

Pq eu do um loop na funcao so q ele poe o marcador so no ultimo, nao to conseguindo manipular as variaveis bem nesse loop, tenta dar uma olhada aqui:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Maps JavaScript API Example</title>
    <script src="http://maps.google.com/maps?file=api&v=2&key=ADD_YOUR_KEY_HERE"
      type="text/javascript"></script>
    <script type="text/javascript">

    //<![CDATA[

   var geocoder;
   var map;
   var x;
   
   var hosp = new Array();
   var endereco = new Array();
   var ponto = new Array();

   hosp[0] = "Minha casa";
   endereco[0] = "Rua Morais e Silva 51, Rio de Janeiro RJ";
   
   hosp[1] = "Hotel Marina";
   endereco[1] = "Av. Delfim Moreira 478, Rio de Janeiro RJ";
   
   function gerarTexto(titulo, endereco) {
		ncidade = endereco.search(",");
		cidade  = endereco.substr(ncidade+1);
		str     = endereco.substr(0,ncidade);
		
		retorna = "<strong>"+titulo+"</strong><br/>"+str+", <br/>"+cidade;
		
		return retorna;
   }

   // On page load, call this function

   function load()
   {
      // Create new map object
      map = new GMap2(document.getElementById("map"));

      // Create new geocoding object
      geocoder = new GClientGeocoder();
	  geocoder.setBaseCountryCode("pt_BR");

      // Retrieve location information, pass it to addToMap()
	  for (x in hosp) {
          geocoder.getLocations(endereco[x], addToMap);
	  }
   }

   // This function adds the point to the map

   function addToMap(response)
   {
      // Retrieve the object
      place = response.Placemark[0];

      // Retrieve the latitude and longitude
      point = new GLatLng(place.Point.coordinates[1],
                          place.Point.coordinates[0]);

      // Center the map on this point
      map.setCenter(point, 13);

      // Create a marker
      marker = new GMarker(point);

      // Add the marker to map
      map.addOverlay(marker);

      // Add address information to marker
	  GEvent.addListener(marker,"click", function() {
        map.openInfoWindowHtml(point, gerarTexto(hosp[x],endereco[x]));
      });
      //marker.openInfoWindowHtml(gerarTexto(hosp[x],endereco[x]));
   }

    //]]>
    </script>
  </head>
  <body onload="load()" onunload="GUnload()">
    <div id="map" style="width: 400px; height: 300px"></div>
  </body>
</html>

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido!

 

Galera, pesquisei pesquisei pesquisei e acabei achando. Bom, a solução é não utilizar o link do Google e pegar o parametro &ll, pois a precisão dele é baixa.

 

O ideal é você usar a api pra pegar as coordenadas mais precisamente. O Gmaps possui um endereco que te retorna isso, portanto a solução é acessálo através de CURL, segue abaixo a função que criei para retornar o x e y com casas decimais maiores.

 

	function getGmap($gmap) {
		
		// Vá para o site do Gmaps API e pegue uma chave.
		$key = "SUACHAVE";
		$address = urlencode($gmap);
		$url = "http://maps.google.com/maps/geo?q=".$address."&output=csv&key=".$key;
		
		$ch = curl_init();
		
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_HEADER,0);
		curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		
		$data = curl_exec($ch);
		curl_close($ch);
		
		$data = explode(",",$data);
		
		$map['x'] = $data[2];
		$map['y'] = $data[3];
	
	    return $map;
	}

Com isso o parâmetro gmap deve assumir um endereço o mais próximo possivel do correto, exemplo:

TIPODARUA NOMEDARUA NUMERO, CIDADE UF, ie: Av. Presidente Vargas 548, Rio de Janeiro RJ

 

Com isso a api te retorna a longitude e latitude com casas decimais mais precisas.

 

Abraço galera, é isso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.