Mas, vamos por partes. Como já disse naquele post, a API é disponibilizada como um conjunto de classes e outros códigos JavaScript. Então, o local deste script precisa ser indicado no HTML:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?v=3.1&sensor=false&language=pt-BR"></script>
Também precisaremos de instâncias dos dois objetos principais da API - o que representa o mapa em si e o Geocoder, responsável pela conversão entre endereços reais e suas respectivas coordenadas (latitude/longitude).
var map, geocoder;
function initialize() {
var lOptions = {zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP};
var lMapNode;
lMapNode = document.getElementById('map_canvas');
map = new google.maps.Map(lMapNode, lOptions);
geocoder = new google.maps.Geocoder();
}
function trataLocais (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({map: map, position: results[0].geometry.location });
}
}
function initialize() {
var lOptions = {zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP};
var lMapNode;
lMapNode = document.getElementById('map_canvas');
map = new google.maps.Map(lMapNode, lOptions);
geocoder = new google.maps.Geocoder();
}
function trataLocais (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({map: map, position: results[0].geometry.location });
}
}
Apenas para lembrar, o nome 'map_canvas' identifica uma tag HTML do tipo DIV. Com isso, mostrar um endereço no mapa se restringe ao código javascript abaixo.
var lEndereco;
var lRequest;
lEndereco = 'ALAMEDA SANTOS, 1000, SÃO PAULO - SP, 01418-9028';
lRequest = { address: lEndereco, region: 'BR'};
geocoder.geocode( lRequest, trataLocais);
var lRequest;
lEndereco = 'ALAMEDA SANTOS, 1000, SÃO PAULO - SP, 01418-9028';
lRequest = { address: lEndereco, region: 'BR'};
geocoder.geocode( lRequest, trataLocais);
Até aqui, o processo foi o mesmo descrito no outro post. No entanto, traçar a rota não exige muito mais que isso. Para esse recurso funcionar, temos que instanciar o serviço de cálculo de rotas do Google Maps e o serviço que exibe uma rota calculada. Depois, basta solicitar ao primeiro que trace a rota entre dois endereços fornecidos:
var directionsService;
var directionsRenderer;
directionsService = new google.maps.DirectionsService();
directionsRenderer = new google.maps.DirectionsRenderer();
directionsRenderer.setMap(map);
var enderDe = 'ALAMEDA SANTOS, 1000, SÃO PAULO - SP, 01418-9028';
var enderAte = 'AVENIDA NAÇÕES UNIDAS, 17-17, BAURU - SP, 17013-035';
var request = {
origin:endDe,
destination:endPara,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsRenderer.setDirections(response);
}
});)
var directionsRenderer;
directionsService = new google.maps.DirectionsService();
directionsRenderer = new google.maps.DirectionsRenderer();
directionsRenderer.setMap(map);
var enderDe = 'ALAMEDA SANTOS, 1000, SÃO PAULO - SP, 01418-9028';
var enderAte = 'AVENIDA NAÇÕES UNIDAS, 17-17, BAURU - SP, 17013-035';
var request = {
origin:endDe,
destination:endPara,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsRenderer.setDirections(response);
}
});)
Veja que é o serviço de exibição quem é conectado ao mapa. Como o serviço que traça a rota apenas realiza os cálculos, este não precisa conhecer o mapa que está instanciado. Veja também que foi necessário construir uma requisição com as informações sobre a rota que se deseja traçar. Esta requisição é um objeto do tipo DirectionsRequest, que oferece opções para refinar a rota. Além do endereço de origem para a rota e o seu destino, é exigido da requisição que se estipule o meio de transporte a ser utilizado para ir de um endereço a outro. Nesta versão da API, as possibilidades são ir de carro (como no exemplo), ir de bicicleta ou andando. Outros ajustes disponíveis na requisição permitem configurar a rota para evitar estradas pedagiadas e fornecer rotas alternativas.
Outro ponto a destacar é o segundo parâmetro da função route, responsável pelo cálculo da rota. Este parâmetro é uma função que devemos usar para receber os dados da rota calculada e um status desse cálculo. Caso o status seja OK, basta passar os dados calculados ao serviço de exibição, fechando o ciclo.
Esse procedimento resulta no seguinte mapa:
O HTML com este exemplo pode ser acessado neste link.
Um outro recurso útil a ser adicionado é o que descreve como seguir a rota, da mesma maneira que um aparelho de GPS narra as direções a tomar e distâncias a percorrer. Para isso, crie uma nova tag DIV no seu HTML - digamos que você a identifique como panel. Basta, então, configurar o serviço de exibição, indicando-lhe qual a tag onde descrever a rota. Apenas uma linha, como segue:
directionsRenderer.setPanel(document.getElementById("panel"));

Tenho um pequeno negócio de entrega de rações e serviço de pet-táxi. Para cálculo do pet-táxi necessito saber a quilometragem de minha casa até o cliente, do cliente até o destino, do destino até a casa do cliente e da casa dele até a minha. Há uma forma de ser feito e inserido no site? Gostaria de que o clinte colocasse seu cep ou endereço, o cep ou o endereço de detino e o sistema já tivesse meu cep gravado. Não haveria necessidade de aparecer mapas na tela. Apenas meu orçamento feito no excel. É complicado, né?
ResponderExcluirCristiano
ExcluirDê uma olhada no post Informações sobre rotas com a versão 3 da API do Google Maps. Ele trata do cálculo da distância entre endereços, enquanto te permite optar por mostrar o mapa ou dispensar a apresentação.
Como o código é javascript, você pode usá-lo no seu site.
[]s
Bom dia,
ResponderExcluirvi no seu site, que voce ensina como usar alguns recursos da api v3 do google.. então eu gostaria de saber como ficaria o uso desta APi se fosse extraido uma rota de um documento xml, ou de um banco de dados onde temos um historio de lat e long.
Hoje que uso a versão 2 da api, e eu gero um arquivo XML, vindo de um banco de dados OBDC que por sua vez gera um arquivo.xml, com as latitudes e longitudes.. e mostro em forma de marcador no google mapas.
**Estou construindo um sistema de rastreamento...
Então, gostaria de saber como fazer este procedimento usando a api v3. // Faco estes procedimentos para ASP.NET e C#
Pode me ajudar? Segue o codigo abaixo..
// PARTE DE CARREGAMENTO DO SERVICO DO GOOGLE MAPAS // CARREGAMENTO DO SISTEMA DE RASTREAMENTO //
var map;
google.load("maps", "10", { "other_params": "sensor=true" });
function initialize() {
if (GBrowserIsCompatible()) {
var map = new google.maps.Map2(document.getElementById("map"));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(-23.5489433, -46.6388182), 10);
map.addMapType(G_PHYSICAL_MAP);
// map.setMapType(G_PHYSICAL_MAP);
GDownloadUrl("Scripts/Landmarks.xml", function (data) {
var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
descricao = markers[i].getAttribute("descricao");
var marker = createInfoMarker(latlng, descricao);
map.addOverlay(marker);
}
});
}
}
google.setOnLoadCallback(initialize);
function createInfoMarker(point, address) {
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function () {
marker.openInfoWindowHtml(address);
});
return marker;
}
// FIM DA PARTE DE CARREGAMENTO DO SISTEMA MAPS.//
// arquivo XML. gerado do banco.
..
Obrigado,
Rodrigo
ExcluirQue parte do processo você não conseguiu montar ?
Os procedimentos iniciais para utilizar a API e traçar rotas estão no post acima. O exemplo mostra o uso informando-se os endereços reais mas a requisição de rota também admite o uso do par latitude/longitude – veja a documentação em https://developers.google.com/maps/documentation/javascript/reference?hl=pt-br#DirectionsRequest.
Se o problema é o download do XML, dê uma olha nesse exemplo : http://gmaps-samples-v3.googlecode.com/svn/trunk/xmlparsing/downloadurl.html. Ele usa a função downloadUrl, similar ao GDownloadUrl, disponível no javascript http://gmaps-samples-v3.googlecode.com/svn/trunk/xmlparsing/util.js.
Quanto aos marcadores, eles são incluídos automaticamente no mapa para cada ponto da rota. Você pode suprimí-los ou alterar a configuração padrão deles através das opções dos marcadores : https://developers.google.com/maps/documentation/javascript/reference?hl=pt-br#DirectionsRendererOptions. Tais opções podem ser passadas ao DirectionsRenderer através da função setOptions.
Att.
Boa tarde,
ResponderExcluirTrabalho em uma escola, e utilizando o banco de dados com os endereços dos alunos, marcar no mapa da cidade onde os mesmo moram. Tendo uma ideia de qual bairro tem mais alunos e assim por diante. Mas que isso utiliza-se o google maps ou alguma ferramente gratuita.
Dei uma lida no que a respeito da API do google, tem como eu fazer esse tipo de configuração? E se é muito complicado, não sou bom em programação.
Elinardy
ExcluirÉ possível montar um mapa com a API do Google e marcar quantos endereços forem necessários. Dê uma olhada no post Usando a versão 3 da API do Google Maps que trata do básico sobre mapas com essa API, incluindo a marcação de endereços.
[]s
Boa noite Luis Gustavo
ResponderExcluirÉ possivel fazer a requisição de rotas atraves de comandos em C?
O maximoq que conseguimos foi em javascript e html usando edits e passando por parametros.
Agradeço pela atenção
Se o seu objetivo é exibir rotas em um programa C, pode usuar o COM do Internet Explorer e interagir com o HTML que exibe a rota. Ha um exemplo em Delphi/C++ Builder no link http://balaiotecnologico.blogspot.com.br/2010/02/interagindo-com-html-em-programas.html; como se trata de um COM, as propriedades e funções apresentadas valem pra qualquer linguagem que suporte o COM.
ExcluirMas, se o que você quer é recuperar em C as informações de uma rota pra poder manipulá-las diretamente em seu programa, terá que submeter requisições HTTP com a API do Google. Há algumas considerações sobre isso neste link mas terá que pesquisar a sintaxe da API do Google pra mapas e rotas.
[]s
E caso eu queia fazer com vários endereços?
ResponderExcluirJuninho
ExcluirO post Traçando rotas com a versão 3 da API do Google Maps - Parte II mostra como traçar rotas passando por uma lista de endereços conhecidos.
[]s
Bom dia Luis, existe alguma forma de além dele retornar o mapa do google maps ele retonar a distancia e o tempo previsto ?
ResponderExcluirDê uma olhada no post Informações sobre rotas com a versão 3 da API do Google Maps. Ele mostra como obter essas informações até mesmo sem precisar desenhar o mapa, se necessário.
Excluir[]s
olá sabe me informar pq se eu opto colocar coordenadas (latitude e longetude) no lugar do endereço ele nao funciona ou melhor funciona apenas se coloco no endereço de partida
ResponderExcluirex.
var enderDe = new google.maps.LatLng(,);
//nesse aqui tenho que colocar asim se coloco apenas coordenadas como o anterior nao carrega o mapa
var enderAte = ', , - , ';
Há um exemplo com esse tipo de construção usando latitude e longitude nest link. Reveja seu código pois o problema deve estar em outro ponto.
Excluir[]s
Olá você saberia me informar, se teria como fazer uma pesquisa por endereços utilizando a api?
ResponderExcluirPor exemplo, eu escrevo av brasil, e a api me traria um o resultado de todas as "av brasil" que ele achou.
Olá você sabe se tem alguma função nesta api que busca endereços?
ResponderExcluirPor exemplo eu informo "av brasil - sao paulo" e a api me retorna todos os resultados que tem "av - brasil".
Gostaria de montar uma ferramenta de autocomplete para evitar erros dos usuários na hora de digitar o endereço
Luan
ExcluirQuando você usa a função geocode, ela repassa para uma função sua uma lista com os endereços que ela localizou. No exemplo, esses resultados são passados para a minha função trataLocais mas, como eu sei que o endereço fornecido é único, eu acesso apenas a posição 0 da lista retornada (o results). Se a informação que você passar não for suficiente para determinar um endereço único, results conterá uma lista de sugestões.
Boa Tarde,
ResponderExcluircomo faco para pegar o CEP
eval(" var marker"+i+" = new google.maps.Marker({map: map, position: results[i].geometry.location, title: results[i].geometry.location.toString()});");
eval(" google.maps.event.addListener(marker"+i+", 'click', function() { infowindow"+i+".open(map); }); ");
eval(" alert( results[i].geometry.location.lat() ) ");
eval(" alert( results[i].geometry.location.lng() ) ");
eval(" alert( results[i].address_components.long_name ");
A propriedade formatted_address em cada resultado traz as partes do endereço separadas por vírgula (rua, cidade, CEP, país). Você pode aplicar a função split do javascript a esse endereço e obter cada parte separadamente num array. Ex:
Excluirvar i, parts;
parts = results[0].formatted_address.split (",");
for (i = 0; i < parts.length; i ++)
alert (parts[i]);
Existe como eu pegar a km ?
ResponderExcluirO post Informações sobre rotas com a versão 3 da API do Google Maps mostra como obter tanto a distância em cada etapa do trajeto como a distância total em kms.
Excluir[]s
Luís Gustavo,
ResponderExcluirEu gostaria de saber como eu faço para pegar informações sobre Linhas de Ônibus, Taxis e Trens
na documentação tem a Referência de: google.maps.TransitLine object ;
Porém não existe exemplo de como aplicar tal classe; se puder dar uma ajuda estarei grato,
Encarecidamente,
Você pode obter informações sobre rotas com transporte público solicitando a rota com travelMode ajustado para TRANSIT, opção existente nas versões mais recentes da API do Google Maps. Ao invés de v=3.1, use o script com parâmetro v=3.9 para que a opção seja reconhecida.
ExcluirOnde houver disponibilidade, serão retornadas as opções de rota com transporte público entre os endereços fornecidos. Detalhes do transporte público estarão na propriedade transit de cada "perna" do trajeto. Há um exemplo de como navegar pelas "pernas" no post Informações sobre rotas com a versão 3 da API do Google Maps.
[]s
Oi.
ResponderExcluirComo eu faço para pegar a Km entre dois endereços e jogar em uma variável do tipo Double?
Obrigado.
O post Informações sobre rotas com a versão 3 da API do Google Maps mostra como obter tanto a distância em cada etapa do trajeto como a distância total em kms.
ExcluirO exemplo lá usa javascript para somar as distâncias de cada fase do trajeto. Ou seja, você não precisa se preocupar se a variável é double ou não pois a linguagem cuidará disso automaticamente.
[]s
Boa tarde!
ResponderExcluirPessoal, alguém saberia me dizer por favor, se eu consigo carregar várias ruas pintadas em azul com essa API do Google?Eu precisaria carregar pintado na tela, todas as ruas de um determinado bairro em azul, como se fosse aquela linha que aparece quando calculamos a rota de um ponto a outro.
É que pretendo utilizar a API do Google Maps para resolver o problema do carteiro chinês para o meu TCC, mas se não tiver como fazer esses desenhos sobre o mapa, vou ter que abandonar essa idéia.
Muito Obrigado.
Uma solução alternativa seria criar uma Polyline ou um Polygon sobre o mapa, criando uma linha fechada para delimitar o bairro. Você precisaria de uma série de pontos latitude/longitude para construir a linha.
Excluir[]s
Boa noite eu preciso traçar a rota de um ponto a outro mas eu preciso que seja digitado em campo de texto os endereco de origem e o endereço de destino e que ele mostre a rota que ele tera que fazer igual o como chegar do google maps, poderia me dar uma ajuda?
ResponderExcluirA diferença básica do que você quer fazer em relação ao que está no post é que no post os endereços estão fixos no script. Basta, então, que vc crie os campos texto e um botão na página e, no evento de "clique" do botão, coloque o mesmo código do post, trocando os endereços fixos pelo valor de cada um dos campos.
Excluir[]s
Você poderia explicar melhor o que eu coloco nessa parte q vc disse ( no evento de "clique" do botão, coloque o mesmo código do post, qual parte do código seria?), e nessa parte aqui (trocando os endereços fixos pelo valor de cada um dos campos, oque precisaria fazer) desculpa pela pergunta mas só iniciante em programação e não entendo muito, se puder explicar um pouquinho melhor agradeço.
Excluirqueria te mandar a parte que tenho do codigo mas o comentario nao aceita codigo html, teria alguma forma de te enviar o pedaço de codigo, meu email para vc entrar em contato se ouder para me dar uma ajuda e um pequeno trabalho da faculdade q tenho q fazer.
Excluirobrigado
Seria algo nos moldes do exemplo do link http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onclick. No lugar do Myfunction que há no link, vc incluiria o trecho do geocoder.geocode, mantendo as outras partes do código deste post.
ExcluirVc teria ainda que substituir o valor fixo atribuído ao enderDe e enderAte por algo como:
var enderDe = eval('ender1').value;
onde ender1 é o ID que vc colocou para a a caixa de texto para receber um endereço em seu HTML.
[]s
Vc pode enviar email direto para o endereço do blog que consta no topo à direita, èm baixo da área do "Quem sou Eu?".
Excluir[]s
OLá Luís Gustavo, poderia me tirar uma dúvida por favor, no mapa se eu quiser trocar essa imagem de balão com letra, que esta em cada ponto, por uma outra imagem qualquer tem como?
ResponderExcluirVocê pode criar marcações no mapa usando a classe Marker e usar um dos ícones disponíveis na API ou até mesmo informar a URL completa de uma imagem personalizada. Veja um exemplo no post Trabalhando com marcações em mapas com a versão 3 da API do Google Maps
Excluir[]s