/* * Open Source Routing Machine (OSRM) - Web (GUI) Interface * Copyright (C) Pascal Neis, 2011 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO General Public License as published by * the Free Software Foundation; either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * or see http://www.gnu.org/licenses/agpl.txt. */ /** * Title: Geocode.js * Description: JS file for geocoding * * @author Pascal Neis, pascal@neis-one.org * @version 0.1 2011-05-15 */ //====================== // OBJECTS var HOST_GEOCODE_URL = 'http://open.mapquestapi.com'; var GEOCODE_POST = HOST_GEOCODE_URL + '/nominatim/v1/search?format=json&json_callback=showResultsGeocode'; var searchType = 'search'; var isStartPointSet = false; var isEndPointSet = false; //====================== // FUNCTIONS /* * geocodeAddress()-Function to read out textfield and send request to a OSM nominatim geocoder */ function geocodeAddress(tf){ var freeform; if(tf == 'start'){ freeform = document.getElementById('tfStartSearch').value; } if(tf == 'end'){ freeform = document.getElementById('tfEndSearch').value; } document.getElementById('information').style.visibility = 'visible'; document.getElementById('information').innerHTML = '<p class="infoHL">One moment please ...</p>'; var newURL = GEOCODE_POST + "&q="+freeform; var script = document.createElement('script'); script.type = 'text/javascript'; script.src = newURL; document.body.appendChild(script); } /* * showResultsGeocode()-Function to show the geocode result in a div */ function showResultsGeocode(response) { var html = ''; var lonlat = ''; if(response){ html += '<p class="infoHL">Search Results:</p>'; html += '<table>' var markername; if(getStatus()=='start'){ markername = 'start'; isStartPointSet = true; } else if(getStatus()=='end'){ markername = 'end'; isEndPointSet = true; } for(var i=0; i < response.length; i++){ var result = response[i]; var resultNum = i+1; //odd or even ? var rowstyle='geocodeResultOdd'; if(i%2==0){ rowstyle='geocodeResultEven'; } html += '<tr class="'+rowstyle+'">'; html += '<td align="right" valign="top"><span class="routeSummarybold">'+resultNum+'</span></td>'; html += '<td class="'+rowstyle+'">'; if(result.display_name){ var new_display_name = result.display_name;//.replace(/,/g, ",<br />") html += '<a href="#" onclick="javascript:setMarkerAndZoom(\''+markername+'\', new OpenLayers.LonLat('+result.lon+','+result.lat+'));">'+new_display_name.trim()+'</a>'; } html += "</td></tr>"; //alert(result.lat + ", " + result.lon); if(lonlat == ''){ lonlat = new OpenLayers.LonLat(result.lon,result.lat); } } html += '</table>'; setMarkerAndZoom(markername, lonlat); } switch (searchType) { case "search": document.getElementById('information').style.display = ""; document.getElementById('information').innerHTML = html; break; } } /* * setMarkerAndZoom()-Function to set a marker on the map and zoom */ function setMarkerAndZoom(markername,lonlat){ setMarker(markername,lonlat); //Hack - FIXME ! lonlat.lon -= 500; //Set Center map.setCenter(lonlat, 15); } /* * setMarker()-Function to set a marker on the map */ function setMarker(markername,lonlat){ lonlat.transform(EPSG_4326, EPSG_900913); for(var i= 0; i<dragLayer.features.length; i++){ if(dragLayer.features[i].name == markername){ dragLayer.removeFeatures([dragLayer.features[i]]); } } var point = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat)); point.attributes = { icon: "img/start.png" }; if(markername == 'start'){ point.attributes = { icon: "img/start.png" }; } else if(markername == 'end'){ point.attributes = { icon: "img/end.png" }; } point.name = markername; dragLayer.addFeatures([point]); } /* * getMarkerByName()-Function to return the marker-object by a name */ function getMarkerByName(markerName){ for(var i= 0; i<dragLayer.features.length; i++){ if(dragLayer.features[i].name == markerName){ return dragLayer.features[i]; } } }