There is a website which holds the buses routes for my city (Porto Alegre - Brazil) in a table.
ex: EPTC
Using Greasemonkey to load de Google Maps API, id like to show a fixed map at the top right corner of the screeen.
The script must read the street names from the table, strip de extra spaces (there are a lot of them), and draw the route in the right order.
Go to APIs & Services → Dashboard → Enable APIs & Services at the top and Choose Maps Javascript API from the API Library. This will open up the Map JavaScript API page, and Enable it.
The autocomplete request is available at no charge, and the subsequent Place Details call gets charged based on regular Place Details pricing. A Place Details request generates Data SKUs (Basic, Contact, and/or Atmosphere) – depending on the fields that are specified in the request.
The Google Maps Platform is a set of APIs and SDKs that allows developers to embed Google Maps into mobile apps and web pages, or to retrieve data from Google Maps.
Here is the Greasemonkey compatible script to accomplish the task: http://userscripts.org/scripts/show/116339
Key points:
1- find the table and loop through each cell to get the content
2- strip all the extra white spaces and save the text in an array
3- create two DIVs, one inside the other (otherwise the position will not be fixed)
4- append the DIVs to the page and call the API
5- "google" must be called with unsafeWindow (google = unsafeWindow.google
)
API_js_callback = "http://maps.google.com/maps/api/js?sensor=false®ion=BR&callback=initialize";
var script = document.createElement('script');
script.src = API_js_callback;
var head = document.getElementsByTagName("head")[0];
(head || document.body).appendChild(script);
if (document.getElementsByTagName('TABLE')[0] != null) {
var Tabela_1 = document.getElementsByTagName('TABLE')[0];
var Tabela_1_cel = Tabela_1.getElementsByTagName('TD');
var Tabela_1_lin = Tabela_1.getElementsByTagName('TR');
}
if (document.getElementsByTagName('TABLE')[1] != null) {
var Tabela_2 = document.getElementsByTagName('TABLE')[1];
var Tabela_2_cel = Tabela_2.getElementsByTagName('TD');
var Tabela_2_lin = Tabela_2.getElementsByTagName('TR');
}
var DIVmapa = document.createElement('div');
DIVmapa.id = 'DIVmapa';
DIVmapa.style.border = '2px coral solid';
DIVmapa.style.cursor = 'pointer';
DIVmapa.style.display = '';
DIVmapa.style.height = '75%';
DIVmapa.style.margin = '1';
DIVmapa.style.position = 'fixed';
DIVmapa.style.padding = '1';
DIVmapa.style.right = '1%';
DIVmapa.style.top = '1%';
DIVmapa.style.width = '30%';
DIVmapa.style.zIndex = '99';
var DIVinterna = document.createElement('div');
DIVinterna.id = 'DIVinterna';
DIVinterna.style.height = '100%';
DIVinterna.style.width = '100%';
DIVinterna.style.zIndex = '999';
if (Tabela_1 || Tabela_2) {
document.body.appendChild(DIVmapa);
DIVmapa.appendChild(DIVinterna);
}
initialize = setTimeout(function () {
google = unsafeWindow.google;
directionsService = new google.maps.DirectionsService();
directionsDisplay = new google.maps.DirectionsRenderer();
var PortoAlegre = new google.maps.LatLng(-30.034176,-51.229212);
var myOptions = {
zoom: 14,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: PortoAlegre
}
map = new google.maps.Map(document.getElementById("DIVinterna"), myOptions);
directionsDisplay.setMap(map);
function calcRoute() {
var start = Tabela_1_cel[1].getElementsByTagName('B')[0].innerHTML.replace(/\s{2,}/g, ' ') + ' Porto Alegre';
var end = Tabela_1_cel[10].getElementsByTagName('B')[0].innerHTML.replace(/\s{2,}/g, ' ') + ' Porto Alegre';
var waypts = [];
//for (var i=1; i<Tabela_1_cel.length; i++) {
for (var i=2; i<10; i++) {
ponto_1 = Tabela_1_cel[i].getElementsByTagName('B')[0].innerHTML;
semespacos_1 = ponto_1.replace(/\s{2,}/g, ' ') + ' Porto Alegre';
waypts.push({location: semespacos_1, stopover: true});
}
var request = {
origin: start,
destination: end,
waypoints: waypts,
optimizeWaypoints: false,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {directionsDisplay.setDirections(response)};
//alert(status);
});
}
calcRoute();
}, 1000);
Enjoy! :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With