59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
var netgis = netgis || {};
|
||
|
|
||
|
netgis.SearchPlace = function()
|
||
|
{
|
||
|
this.client = null;
|
||
|
this.timeout = null;
|
||
|
this.lastRequest = null;
|
||
|
};
|
||
|
|
||
|
netgis.SearchPlace.prototype.load = function()
|
||
|
{
|
||
|
this.client.on( netgis.Events.SEARCH_PLACE_REQUEST, this.onSearchPlaceRequest.bind( this ) );
|
||
|
};
|
||
|
|
||
|
netgis.SearchPlace.prototype.request = function( query )
|
||
|
{
|
||
|
//NOTE: https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG=25832&maxResults=5&maxRows=5&searchText=trier&featureClass=P&style=full&name_startsWith=trier
|
||
|
|
||
|
//TODO: get url with query template from config
|
||
|
////var url = "https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG={epsg}&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={q}&name_startsWith={q}";
|
||
|
////url = "./proxy.php?" + url;
|
||
|
|
||
|
if ( this.client.config.search && this.client.config.search.url )
|
||
|
{
|
||
|
var url = this.client.config.search.url;
|
||
|
|
||
|
var q = query;
|
||
|
q = q.trim();
|
||
|
|
||
|
url = netgis.util.replace( url, "{q}", window.encodeURIComponent( q ) );
|
||
|
url = netgis.util.replace( url, "{epsg}", 4326 ); // 25823
|
||
|
url = window.encodeURI( url );
|
||
|
|
||
|
this.lastRequest = netgis.util.request( url, this.onSearchPlaceResponse.bind( this ) );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
console.warn( "No search API url configured for place search!" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
netgis.SearchPlace.prototype.onSearchPlaceRequest = function( e )
|
||
|
{
|
||
|
var query = e.query;
|
||
|
var self = this;
|
||
|
|
||
|
// Debounce Request
|
||
|
if ( this.lastRequest ) this.lastRequest.abort();
|
||
|
if ( this.timeout ) window.clearTimeout( this.timeout );
|
||
|
this.timeout = window.setTimeout( function() { self.request( query ); }, 300 );
|
||
|
};
|
||
|
|
||
|
netgis.SearchPlace.prototype.onSearchPlaceResponse = function( data )
|
||
|
{
|
||
|
var json = JSON.parse( data );
|
||
|
this.client.invoke( netgis.Events.SEARCH_PLACE_RESPONSE, json );
|
||
|
};
|