2011-05-15 15:29:40 -04:00
/ *
* 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:markerzoom(\'' + 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>' ;
2011-06-19 15:13:07 -04:00
setMarkerAndZoom ( markername , lonlat ) ;
2011-05-15 15:29:40 -04:00
}
switch ( searchType ) {
case "search" :
document . getElementById ( 'information' ) . style . display = "" ;
document . getElementById ( 'information' ) . innerHTML = html ;
break ;
}
}
/ *
2011-06-19 15:13:07 -04:00
* setMarkerAndZoom ( ) - Function to set a marker on the map and zoom
2011-05-15 15:29:40 -04:00
* /
2011-06-19 15:13:07 -04:00
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 ) ;
2011-05-15 15:29:40 -04:00
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 ] ;
}
}
}