Skip to content

Commit d2f4b69

Browse files
Separarate Geoportal.js between 2 separate files for layers and controls, and update the SearchEngine, MousePosition and Route controls.
1 parent db52eb3 commit d2f4b69

File tree

5 files changed

+142
-67
lines changed

5 files changed

+142
-67
lines changed

examples/GeoportalControls.ipynb

+23-11
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
"cells": [
33
{
44
"cell_type": "code",
5-
"execution_count": null,
5+
"execution_count": 1,
66
"id": "6bb0dd68-f96d-45c5-b3de-48c2092f2690",
77
"metadata": {},
88
"outputs": [],
99
"source": [
1010
"from ipyleaflet import *\n",
11-
"from ipyleaflet.geoportal import GeoportalWMTS, GeoportalLayerSwitcher, GeoportalSearchEngine, GeoportalRoute, GeoportalMousePosition, GeoportalElevationPath, GeoportalIsocurve"
11+
"from ipyleaflet.geoportal import GeoportalLayerSwitcher, GeoportalSearchEngine, GeoportalRoute, GeoportalMousePosition, GeoportalElevationPath, GeoportalIsocurve"
1212
]
1313
},
1414
{
@@ -19,7 +19,7 @@
1919
"outputs": [],
2020
"source": [
2121
"#Route control for itinerary calculation\n",
22-
"layer = GeoportalWMTS(layer = 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2', api_key = 'cartes', format = 'image/png')\n",
22+
"layer = basemap_to_tiles(basemaps.GeoportailFrance.plan)\n",
2323
"m = Map(center=(44.799999, 2.26667), zoom=10, zoom_control=True)\n",
2424
"m.add(layer)\n",
2525
"route_control = GeoportalRoute()\n",
@@ -28,21 +28,33 @@
2828
},
2929
{
3030
"cell_type": "code",
31-
"execution_count": null,
31+
"execution_count": 2,
3232
"id": "3a686d99-c3ca-4596-81aa-24442564bea2",
3333
"metadata": {},
34-
"outputs": [],
34+
"outputs": [
35+
{
36+
"data": {
37+
"application/vnd.jupyter.widget-view+json": {
38+
"model_id": "47bf5fd8b8aa413fb0eacad5627beee6",
39+
"version_major": 2,
40+
"version_minor": 0
41+
},
42+
"text/plain": [
43+
"Map(center=[44.799999, 2.26667], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', '…"
44+
]
45+
},
46+
"execution_count": 2,
47+
"metadata": {},
48+
"output_type": "execute_result"
49+
}
50+
],
3551
"source": [
3652
"#LayerSwitcher control\n",
3753
"m1 = Map(center=(44.799999, 2.26667), zoom=10, zoom_control=True)\n",
38-
"layer1 = GeoportalWMTS() #default\n",
39-
"layer2 = GeoportalWMTS(layer = 'ELEVATION.SLOPES', api_key = 'altimetrie')\n",
40-
"layer3 = GeoportalWMTS(layer = 'HYDROGRAPHY.BCAE.LATEST', api_key = 'agriculture', format = 'image/png')\n",
41-
"layer4 = GeoportalWMTS(layer = 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2', api_key = 'cartes', format = 'image/png')\n",
54+
"layer1 = basemap_to_tiles(basemaps.GeoportailFrance.plan)\n",
55+
"layer2 = basemap_to_tiles(basemaps.GeoportailFrance.orthos)\n",
4256
"m1.add(layer1)\n",
4357
"m1.add(layer2)\n",
44-
"m1.add(layer3)\n",
45-
"m1.add(layer4)\n",
4658
"layer_control = GeoportalLayerSwitcher()\n",
4759
"m1.add(layer_control)"
4860
]

ipyleaflet/geoportal.py

+35-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#
44

55

6-
from traitlets import Unicode
6+
from traitlets import Unicode, Bool, List, Dict
77
from .leaflet import TileLayer, Control
88

99

@@ -48,6 +48,19 @@ class GeoportalSearchEngine(Control):
4848

4949
_view_name = Unicode('LeafletGeoportalSearchEngineView').tag(sync=True)
5050
_model_name = Unicode('LeafletGeoportalSearchEngineModel').tag(sync=True)
51+
layer = Unicode('ORTHOIMAGERY.ORTHOPHOTOS').tag(sync=True, o=True)
52+
api_key = Unicode('essentiels').tag(sync=True, o=True)
53+
format = Unicode('image/jpeg').tag(sync=True, o=True)
54+
position = Unicode('topleft').tag(sync=True, o=True)
55+
collapsed = Bool(True).tag(sync=True, o=True)
56+
zoomTo = Unicode('auto').tag(sync=True, o=True)
57+
displayInfo = Bool(True).tag(sync=True, o=True)
58+
apiKey = Unicode('cartes').tag(sync=True, o=True)
59+
displayAdvancedSearch = Bool(True).tag(sync=True, o=True)
60+
resources = List( ["PositionOfInterest", "StreetAddress"]).tag(sync=True, o=True)
61+
advancedSearch = Dict({}).tag(sync=True, o=True)
62+
geocodeOptions = Dict({}).tag(sync=True, o=True)
63+
autocompleteOptions = Dict({}).tag(sync=True, o=True)
5164

5265

5366
class GeoportalRoute(Control):
@@ -59,6 +72,14 @@ class GeoportalRoute(Control):
5972

6073
_view_name = Unicode('LeafletGeoportalRouteView').tag(sync=True)
6174
_model_name = Unicode('LeafletGeoportalRouteModel').tag(sync=True)
75+
position = Unicode("bottomleft").tag(sync=True)
76+
collapsed = Bool(True).tag(sync=True)
77+
exclusions = Dict ({"toll" : True,
78+
"bridge" : False,
79+
"tunnel" : True}).tag(sync=True)
80+
graphs = List( ['Pieton', 'Voiture']).tag(sync=True)
81+
autocompleteOptions = Dict({}).tag(sync=True)
82+
routeOptions = Dict({}).tag(sync=True)
6283

6384

6485
class GeoportalMousePosition(Control):
@@ -70,6 +91,19 @@ class GeoportalMousePosition(Control):
7091

7192
_view_name = Unicode('LeafletGeoportalMousePositionView').tag(sync=True)
7293
_model_name = Unicode('LeafletGeoportalMousePositionModel').tag(sync=True)
94+
position = Unicode('bottomleft').tag(sync=True)
95+
collapsed = Bool(False).tag(sync=True)
96+
displayAltitude = Bool(True).tag(sync=True)
97+
displayCoordinates = Bool(True).tag(sync=True)
98+
editCoordinates = Bool(False).tag(sync=True)
99+
altitude = Dict({}).tag(sync=True)
100+
serviceOptions = Dict({})
101+
crs = Unicode().tag(sync=True)
102+
label = Unicode().tag(sync=True)
103+
selectedtype = Unicode().tag(sync=True)
104+
systems = List([{crs : '', label : "Lon,Lat", selectedtype : "Geographical"},
105+
{crs :'', label : "Lambert 93",selectedtype : "Metric"}]).tag(sync=True),
106+
units = List (["DEC", "DMS"]).tag(sync=True)
73107

74108

75109
class GeoportalElevationPath(Control):

js/src/layers/Geoportal.js renamed to js/src/controls/GeoportalControls.js

+56-54
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,8 @@
22
// Distributed under the terms of the Modified BSD License.
33

44
const L = require('../leaflet.js');
5-
const layer = require('./TileLayer.js');
65
const control = require('../controls/Control.js');
7-
const utils = require('../utils');
86

9-
export class LeafletGeoportalWMTSModel extends layer.LeafletTileLayerModel {
10-
defaults() {
11-
return {
12-
...super.defaults(),
13-
_view_name: 'LeafletGeoportalWMTSView',
14-
_model_name: 'LeafletGeoportalWMTSModel',
15-
layer : 'ORTHOIMAGERY.ORTHOPHOTOS',
16-
apiKey : 'essentiels',
17-
format : 'image/jpeg'
18-
};
19-
}
20-
}
21-
22-
export class LeafletGeoportalWMTSView extends layer.LeafletTileLayerView {
23-
create_obj() {
24-
this.obj = L.geoportalLayer.WMTS({layer : this.model.get('layer'), apiKey : this.model.get('api_key')}, {format : this.model.get('format')})
25-
}
26-
}
277

288
export class LeafletGeoportalLayerSwitcherModel extends control.LeafletControlModel {
299
defaults() {
@@ -49,8 +29,18 @@ export class LeafletGeoportalLayerSwitcherModel extends control.LeafletControlMo
4929
defaults() {
5030
return {
5131
...super.defaults(),
52-
_view_name: 'LeafletGeoportalSearchEngineView',
53-
_model_name: 'LeafletGeoportalSearchEngineModel'
32+
_view_name: 'LeafletGeoportalSearchEngineView',
33+
_model_name: 'LeafletGeoportalSearchEngineModel',
34+
position : 'topleft',
35+
collapsed : true,
36+
zoomTo : 'auto',
37+
displayInfo : true,
38+
apiKey : 'cartes',
39+
displayAdvancedSearch : true,
40+
resources : ["PositionOfInterest", "StreetAddress"],
41+
advancedSearch : {},
42+
geocodeOptions : {},
43+
autocompleteOptions : {}
5444
};
5545
}
5646
}
@@ -61,31 +51,25 @@ export class LeafletGeoportalLayerSwitcherModel extends control.LeafletControlMo
6151
this.map_view = this.options.map_view;
6252
}
6353
create_obj() {
64-
this.obj = L.geoportalControl.SearchEngine({
65-
position : "topleft",
66-
collapsed : true,
67-
zoomTo : "auto",
68-
displayInfo : true,
69-
displayAdvancedSearch : true,
70-
resources : ["PositionOfInterest", "StreetAddress"],
71-
advancedSearch : {
72-
PositionOfInterest : [{name : "municipality", title : "Ville"}],
73-
StreetAddress : [{}],
74-
CadastralParcel : null,
75-
},
76-
apiKey : "cartes",
77-
geocodeOptions : {},
78-
autocompleteOptions : {}
79-
})
54+
this.obj = L.geoportalControl.SearchEngine(this.get_options())
8055
}
8156
}
8257

8358
export class LeafletGeoportalRouteModel extends control.LeafletControlModel {
8459
defaults() {
8560
return {
8661
...super.defaults(),
87-
_view_name: 'LeafletGeoportalLayerSwitcherView',
88-
_model_name: 'LeafletGeoportalLayerSwitcherModel'
62+
_view_name: 'LeafletGeoportalRouteView',
63+
_model_name: 'LeafletGeoportalRouteModel',
64+
position : "bottomleft",
65+
collapsed : true,
66+
exclusions : {"toll" : true,
67+
"bridge" : false,
68+
"tunnel" : true
69+
},
70+
graphs : ['Pieton', 'Voiture'],
71+
autocompleteOptions : {},
72+
routeOptions : {}
8973
};
9074
}
9175
}
@@ -96,27 +80,45 @@ export class LeafletGeoportalLayerSwitcherModel extends control.LeafletControlMo
9680
this.map_view = this.options.map_view;
9781
}
9882
create_obj() {
99-
this.obj = L.geoportalControl.Route({
100-
position : "bottomleft",
101-
collapsed : true,
102-
exclusions : {
103-
"toll" : true,
104-
"bridge" : false,
105-
"tunnel" : true
106-
},
107-
graphs : ['Pieton', 'Voiture'],
108-
autocompleteOptions : {},
109-
routeOptions : {}
110-
})
83+
this.obj = L.geoportalControl.Route(this.get_options())
11184
}
11285
}
11386

11487
export class LeafletGeoportalMousePositionModel extends control.LeafletControlModel {
11588
defaults() {
11689
return {
11790
...super.defaults(),
118-
_view_name: 'LeafletGeoportalMousePositionView',
119-
_model_name: 'LeafletGeoportalMousePositionModel'
91+
_view_name: 'LeafletGeoportalMousePositionView',
92+
_model_name: 'LeafletGeoportalMousePositionModel',
93+
position : 'bottomleft',
94+
collapsed : false,
95+
displayAltitude : true,
96+
displayCoordinates : true,
97+
editCoordinates : false,
98+
crs : '',
99+
label : '',
100+
selectedtype: '',
101+
altitude : {
102+
triggerDelay : 100,
103+
responseDelay : 500,
104+
noDataValue : -99999,
105+
noDataValueTolerance : 90000,
106+
serviceOptions : {}
107+
},
108+
systems : [
109+
{
110+
crs : L.CRS.EPSG4326,
111+
label : "Lon,Lat",
112+
selectedtype : "Geographical"
113+
},
114+
{
115+
crs : L.geoportalCRS.EPSG2154,
116+
label : "Lambert 93",
117+
selectedtype : "Metric"
118+
}
119+
],
120+
units : ["DEC", "DMS"]
121+
120122
};
121123
}
122124
}

js/src/jupyter-leaflet.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export * from './layers/LayerGroup.js';
3030
export * from './layers/FeatureGroup.js';
3131
export * from './layers/GeoJSON.js';
3232
export * from './layers/DivIcon.js';
33-
export * from './layers/Geoportal.js';
33+
export * from './layers/GeoportalLayers.js';
3434

3535
//Controls
3636
export * from './controls/AttributionControl.js';
@@ -45,6 +45,7 @@ export * from './controls/ZoomControl.js';
4545
export * from './controls/ScaleControl.js';
4646
export * from './controls/LegendControl.js';
4747
export * from './controls/SearchControl.js';
48+
export * from './controls/GeoportalControls.js';
4849

4950
//Map
5051
export * from './Map.js';

js/src/layers/GeoportalLayers.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (c) Jupyter Development Team.
2+
// Distributed under the terms of the Modified BSD License.
3+
4+
const L = require('../leaflet.js');
5+
const layer = require('./TileLayer.js');
6+
const utils = require('../utils');
7+
8+
export class LeafletGeoportalWMTSModel extends layer.LeafletTileLayerModel {
9+
defaults() {
10+
return {
11+
...super.defaults(),
12+
_view_name: 'LeafletGeoportalWMTSView',
13+
_model_name: 'LeafletGeoportalWMTSModel',
14+
layer : 'ORTHOIMAGERY.ORTHOPHOTOS',
15+
apiKey : 'essentiels',
16+
format : 'image/jpeg'
17+
};
18+
}
19+
}
20+
21+
export class LeafletGeoportalWMTSView extends layer.LeafletTileLayerView {
22+
create_obj() {
23+
this.obj = L.geoportalLayer.WMTS({layer : this.model.get('layer'), apiKey : this.model.get('api_key')}, {format : this.model.get('format')})
24+
}
25+
}
26+

0 commit comments

Comments
 (0)