Skip to content

Commit 5b00fb2

Browse files
authored
Merge pull request mviewer#1203 from jdev-org/issue-949
add bbox filter when needed in data.geopf calls
2 parents cc35b9e + 3552dc7 commit 5b00fb2

4 files changed

Lines changed: 63 additions & 22 deletions

File tree

apps/default.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
attribution="GéoBretagne. Données : les contributeurs d'<a href='https://www.openstreetmap.org/' target='_blank'>OpenStreetMap </a>, <a href='https://www.openstreetmap.org/copyright' target='_blank'>ODbL </a>" />
1313
</baselayers>
1414
<proxy url=""/>
15-
<!-- <olscompletion url="https://api-adresse.data.gouv.fr/search/" type="search" attribution="La recherche d'adresse est un service de l'IGN via les données de la BAN"/> -->
16-
<olscompletion url="https://data.geopf.fr/geocodage/completion" type="completion" attribution="Service d'autocomplétion de l'IGN"/>
15+
<olscompletion url="https://data.geopf.fr/geocodage/search" type="search" attribution="La recherche d'adresse est un service de l'IGN via les données de la BAN"/>
16+
<!-- <olscompletion url="https://data.geopf.fr/geocodage/completion" type="completion" attribution="Service d'autocomplétion de l'IGN"/> -->
1717

1818
<searchparameters bbox="false" localities="true" features="false" />
1919

docs/doc_tech/config_search.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ Options liées à la recherche d'adresse *(olscompletion)* et/ou à la recherche
7272

7373
* ``localities`` *(optionnel)* : Utilisation du service d'adresse olscompletion : true ou false (defaut = true).
7474
* ``features`` *(optionnel)* : Utilisation du service de recherche d'entités elasticsearch ou fuse : true ou false (defaut = true).
75-
* ``bbox`` *(optionnel)* : Recherche d'adresse et/ou d'entitées limitée à l'emprise de la carte : true ou false (defaut = false).
75+
* ``bbox`` *(optionnel)* : Recherche d'adresse et/ou d'entitées limitée à l'emprise de la carte : true ou false (defaut = false). Avec un service olscompletion de type ``completion`` les résultats sont filtrés à l'intérieur de l'emprise ; pour les autres types (``search``/BAN) la bbox sert uniquement à ordonner la réponse.
7676
* ``querymaponclick`` *(optionnel)* : Interroge la carte après sélection d'un résultat dans la liste : true ou false - defaut = false.
7777
* ``marker`` *(optionnel)* : Afficher ou non un icône sur le résultat de la recherche d'adresse : true ou false (defaut = true).
7878
* ``static`` *(optionnel)* : En lien avec le paramètre doctypes. Active ou désactive la recherche associée à des documents requêtés systématiquement, indépendamment des couches affichées : true ou false (defaut = false).

index.html

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -430,11 +430,12 @@ <h5 class="modal-title" i18n="search.panel.title">
430430
</div>
431431
<div class="modal-body">
432432
<ul id="searchparameters">
433-
<li class="mv-param-item" onclick="search.toggleParameter(this)">
433+
<li
434+
class="mv-param-item"
435+
id="param_search_bbox"
436+
onclick="search.toggleParameter(this)">
434437
<a href="#">
435-
<span
436-
id="param_search_bbox"
437-
class="state-icon far mv-unchecked"></span>
438+
<span class="state-icon far mv-unchecked"></span>
438439
<div style="display: inline" i18n="search.modal.extent.text">
439440
Rechercher dans l'emprise de la carte
440441
</div>

js/search.js

Lines changed: 55 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -346,22 +346,51 @@ var search = (function () {
346346
// OpenLS or IGN services
347347
if (_searchparams.localities) {
348348
if (["ign", "completion", "geoportail"].includes(_olsCompletionType)) {
349-
displaySearchList(
350-
`${_olsCompletionUrl}?text=${value}&type=StreetAddress,PositionOfInterest&ter=5`,
351-
_olsCompletionType
352-
);
349+
const parameters = {
350+
text: value,
351+
type: "StreetAddress,PositionOfInterest",
352+
ter: 5,
353+
};
354+
if (_searchparams.bbox) {
355+
const extent = _map.getView().calculateExtent(_map.getSize());
356+
const extent4326 = ol.proj.transformExtent(
357+
extent,
358+
_projection.getCode(),
359+
_proj4326
360+
);
361+
parameters.bbox = extent4326.join(",");
362+
const center = ol.extent.getCenter(extent4326);
363+
parameters.lon = center[0];
364+
parameters.lat = center[1];
365+
}
366+
const searchUrl = new URL(_olsCompletionUrl);
367+
Object.entries(parameters).forEach(([key, val]) => {
368+
if (val !== undefined && val !== null) {
369+
searchUrl.searchParams.append(key, val);
370+
}
371+
});
372+
displaySearchList(searchUrl.toString(), _olsCompletionType);
353373
} else if (["ban", "search"].includes(_olsCompletionType)) {
354374
var parameters = { q: value, limit: 5 };
355375
if (_searchparams.bbox) {
356-
var center = _map.getView().getCenter();
357-
var center = ol.proj.transform(center, _projection.getCode(), _proj4326);
376+
var extent = _map.getView().calculateExtent(_map.getSize());
377+
var extent4326 = ol.proj.transformExtent(
378+
extent,
379+
_projection.getCode(),
380+
_proj4326
381+
);
382+
parameters.bbox = extent4326.join(",");
383+
var center = ol.extent.getCenter(extent4326);
358384
parameters.lon = center[0];
359385
parameters.lat = center[1];
360386
}
361387
// create URL
362388
const searchUrl = new URL(_olsCompletionUrl);
363-
searchUrl.searchParams.append("q", parameters.q);
364-
searchUrl.searchParams.append("limit", parameters.limit);
389+
Object.entries(parameters).forEach(([key, val]) => {
390+
if (val !== undefined && val !== null) {
391+
searchUrl.searchParams.append(key, val);
392+
}
393+
});
365394
const searchUrlString = searchUrl.toString();
366395
// display result
367396
displaySearchList(searchUrlString, _olsCompletionType);
@@ -1141,6 +1170,11 @@ var search = (function () {
11411170
_projection = mviewer.getProjection();
11421171
_overLayers = mviewer.getLayers();
11431172
var sparams = configuration.searchparameters || false;
1173+
const asBool = (val, fallback) => {
1174+
if (val === true || val === "true") return true;
1175+
if (val === false || val === "false") return false;
1176+
return fallback;
1177+
};
11441178
if (configuration.olscompletion) {
11451179
_olsCompletionUrl = configuration.olscompletion.url;
11461180
$("#adresse-attribution").text(configuration.olscompletion.attribution);
@@ -1233,13 +1267,19 @@ var search = (function () {
12331267
if (!_olsCompletionUrl) {
12341268
_searchparams.localities = false;
12351269
}
1236-
if (sparams && sparams.bbox && sparams.localities && sparams.features) {
1237-
_searchparams.bbox = sparams.bbox === "true";
1238-
_searchparams.localities = sparams.localities === "true";
1239-
_searchparams.features = sparams.features === "true";
1240-
_searchparams.static = sparams.static === "true";
1241-
_searchparams.querymaponclick = sparams.querymaponclick === "true";
1242-
_searchparams.closeafterclick = sparams.closeafterclick === "true";
1270+
if (sparams) {
1271+
_searchparams.bbox = asBool(sparams.bbox, _searchparams.bbox);
1272+
_searchparams.localities = asBool(sparams.localities, _searchparams.localities);
1273+
_searchparams.features = asBool(sparams.features, _searchparams.features);
1274+
_searchparams.static = asBool(sparams.static, _searchparams.static);
1275+
_searchparams.querymaponclick = asBool(
1276+
sparams.querymaponclick,
1277+
_searchparams.querymaponclick
1278+
);
1279+
_searchparams.closeafterclick = asBool(
1280+
sparams.closeafterclick,
1281+
_searchparams.closeafterclick
1282+
);
12431283
_searchparams.searchmaxzoomlevel = sparams.searchmaxzoomlevel
12441284
? sparams.searchmaxzoomlevel
12451285
: 15;

0 commit comments

Comments
 (0)