Buxexa 0 Denunciar post Postado Julho 31, 2009 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
Beraldo 864 Denunciar post Postado Julho 31, 2009 $latlng é do tipo string e é interpretado como um único parâmetro pelo JS, não? Já tentou passar os dois valores separadamente? Compartilhar este post Link para o post Compartilhar em outros sites
Buxexa 0 Denunciar post Postado Agosto 1, 2009 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
Beraldo 864 Denunciar post Postado Agosto 1, 2009 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
Buxexa 0 Denunciar post Postado Agosto 1, 2009 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
Buxexa 0 Denunciar post Postado Agosto 1, 2009 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