django-mapbox-baselayer 1.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django_mapbox_baselayer-1.1.1.dist-info/METADATA +205 -0
- django_mapbox_baselayer-1.1.1.dist-info/RECORD +43 -0
- django_mapbox_baselayer-1.1.1.dist-info/WHEEL +5 -0
- django_mapbox_baselayer-1.1.1.dist-info/top_level.txt +2 -0
- mapbox_baselayer/VERSION.md +1 -0
- mapbox_baselayer/__init__.py +1 -0
- mapbox_baselayer/admin.py +30 -0
- mapbox_baselayer/apps.py +8 -0
- mapbox_baselayer/locale/en/LC_MESSAGES/django.mo +0 -0
- mapbox_baselayer/locale/en/LC_MESSAGES/django.po +46 -0
- mapbox_baselayer/locale/fr/LC_MESSAGES/django.mo +0 -0
- mapbox_baselayer/locale/fr/LC_MESSAGES/django.po +66 -0
- mapbox_baselayer/management/__init__.py +0 -0
- mapbox_baselayer/management/commands/__init__.py +0 -0
- mapbox_baselayer/management/commands/install_ign_baselayer.py +119 -0
- mapbox_baselayer/management/commands/install_mapbox_baselayer.py +27 -0
- mapbox_baselayer/management/commands/install_opentopomap_baselayer.py +39 -0
- mapbox_baselayer/management/commands/install_osm_baselayer.py +34 -0
- mapbox_baselayer/migrations/0001_initial.py +75 -0
- mapbox_baselayer/migrations/0002_auto_20191129_0942.py +17 -0
- mapbox_baselayer/migrations/0003_auto_20191202_0937.py +22 -0
- mapbox_baselayer/migrations/0004_auto_20191202_1834.py +22 -0
- mapbox_baselayer/migrations/0005_auto_20191202_1840.py +20 -0
- mapbox_baselayer/migrations/0006_alter_baselayertile_id_alter_mapbaselayer_id_and_more.py +21 -0
- mapbox_baselayer/migrations/0007_alter_mapbaselayer_attribution.py +20 -0
- mapbox_baselayer/migrations/0008_mapbaselayer_is_overlay_alter_mapbaselayer_order.py +22 -0
- mapbox_baselayer/migrations/0009_alter_mapbaselayer_options.py +20 -0
- mapbox_baselayer/migrations/0010_baselayer_overlaylayer.py +36 -0
- mapbox_baselayer/migrations/0011_alter_mapbaselayer_base_layer_type.py +25 -0
- mapbox_baselayer/migrations/__init__.py +0 -0
- mapbox_baselayer/models.py +152 -0
- mapbox_baselayer/tests/__init__.py +0 -0
- mapbox_baselayer/tests/test_commands.py +135 -0
- mapbox_baselayer/tests/test_models.py +96 -0
- mapbox_baselayer/tests/test_views.py +87 -0
- mapbox_baselayer/urls.py +14 -0
- mapbox_baselayer/views.py +32 -0
- test_mapbox_baselayer/__init__.py +0 -0
- test_mapbox_baselayer/settings.py +126 -0
- test_mapbox_baselayer/test_app/__init__.py +0 -0
- test_mapbox_baselayer/test_app/views.py +5 -0
- test_mapbox_baselayer/urls.py +26 -0
- test_mapbox_baselayer/wsgi.py +16 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: django-mapbox-baselayer
|
|
3
|
+
Version: 1.1.1
|
|
4
|
+
Summary: Django model to store and serve mapbox base layer config
|
|
5
|
+
Home-page: https://github.com/makinacorpus/django-mapbox-baselayer.git
|
|
6
|
+
Author: Makina Corpus
|
|
7
|
+
Author-email: geobi@makina-corpus.com
|
|
8
|
+
Classifier: Environment :: Web Environment
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
11
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Natural Language :: English
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Framework :: Django
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
Requires-Dist: django>=2.2
|
|
19
|
+
Provides-Extra: dev
|
|
20
|
+
Requires-Dist: factory-boy; extra == "dev"
|
|
21
|
+
Requires-Dist: ruff; extra == "dev"
|
|
22
|
+
Requires-Dist: coverage; extra == "dev"
|
|
23
|
+
Requires-Dist: django-debug-toolbar; extra == "dev"
|
|
24
|
+
Dynamic: author
|
|
25
|
+
Dynamic: author-email
|
|
26
|
+
Dynamic: classifier
|
|
27
|
+
Dynamic: description
|
|
28
|
+
Dynamic: description-content-type
|
|
29
|
+
Dynamic: home-page
|
|
30
|
+
Dynamic: provides-extra
|
|
31
|
+
Dynamic: requires-dist
|
|
32
|
+
Dynamic: summary
|
|
33
|
+
|
|
34
|
+
[](https://codecov.io/gh/makinacorpus/django-mapbox-baselayer)
|
|
35
|
+
[](https://github.com/makinacorpus/django-mapbox-baselayer/actions/workflows/python-ci.yml)
|
|
36
|
+
|
|
37
|
+
# Django Mapbox Baselayer
|
|
38
|
+
|
|
39
|
+
Django application to store, manage and serve map base layers and overlay configurations for **MapLibre GL JS** and **Mapbox GL JS**.
|
|
40
|
+
|
|
41
|
+
This package provides:
|
|
42
|
+
- Django models to store base layers and overlay layers configuration
|
|
43
|
+
- Admin interface to manage layers
|
|
44
|
+
- API endpoints to serve layer configurations as TileJSON
|
|
45
|
+
- Support for raster tiles, vector tiles, and Mapbox styles
|
|
46
|
+
|
|
47
|
+

|
|
48
|
+
|
|
49
|
+
# Getting started
|
|
50
|
+
### Installation
|
|
51
|
+
Install it in your project like any dependency
|
|
52
|
+
```bash
|
|
53
|
+
pip install django-mapbox-baselayer
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Usage
|
|
57
|
+
Declare django-mapbox-baselayer in the `INSTALLED_APPS`
|
|
58
|
+
```python
|
|
59
|
+
# settings.py
|
|
60
|
+
|
|
61
|
+
INSTALLED_APPS = [
|
|
62
|
+
# ... other django apps
|
|
63
|
+
"mapbox_baselayer",
|
|
64
|
+
]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
For Mapbox base layers, you do not need to describe the tiles with the `BaseLayerTile` object, but an url is mandatory.
|
|
68
|
+
|
|
69
|
+
For Raster base layers, is it necessary to create a `BaseLayerTile` for each url (`a.tiles.xxx`, `b.tiles.xxx`, etc ...)
|
|
70
|
+
|
|
71
|
+
Tile size should be 256 for raster and 512 for vector.
|
|
72
|
+
|
|
73
|
+
### Commands
|
|
74
|
+
|
|
75
|
+
#### OSM base layer
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
./manage.py install_osm_baselayer
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
#### OpenTopoMap base layer
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
./manage.py install_opentopomap_baselayer
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
#### Mapbox base layer
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
./manage.py install_mapbox_baselayer (use mapbox://styles/mapbox/streets-v11 as default)
|
|
91
|
+
./manage.py install_mapbox_baselayer --mapbox-url=mapbox://styles/mapbox/satellite-streets-v11
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### IGN base layer
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
./manage.py install_ign_baselayer --layers ortho plan maps scan_25 cadastre plan_vt
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
CHANGELOG
|
|
102
|
+
=========
|
|
103
|
+
|
|
104
|
+
1.1.1 (2026-02-07)
|
|
105
|
+
--------------------------
|
|
106
|
+
|
|
107
|
+
**Improvements**
|
|
108
|
+
|
|
109
|
+
* mapbox url is now labeled as "Style URL".
|
|
110
|
+
* IGN Plan Vector tile layer is available
|
|
111
|
+
|
|
112
|
+
**Bugfixes**
|
|
113
|
+
* IGN layers are updated to use the new style url instead of the old tile url.
|
|
114
|
+
|
|
115
|
+
**Development**
|
|
116
|
+
|
|
117
|
+
* Use ruff instead of flake / black / isort
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
1.1.0 (2026-02-06)
|
|
121
|
+
--------------------------
|
|
122
|
+
|
|
123
|
+
**New features**
|
|
124
|
+
|
|
125
|
+
* Add overlays concept to allow adding layers on top of baselayers. This is useful for example to add a layer with markers on top of a baselayer.
|
|
126
|
+
* Add JSON endpoint to get baselayer data. This is useful for example to get the real url of a mapbox style.
|
|
127
|
+
|
|
128
|
+
**Improvements**
|
|
129
|
+
|
|
130
|
+
* Add example view
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
**Maintenance**
|
|
134
|
+
|
|
135
|
+
* Drop official support for python <= 3.9
|
|
136
|
+
* Add official support for python 3.13
|
|
137
|
+
* Add official support for python 5.2 and 6.0
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
1.0.0 (2023-07-11)
|
|
141
|
+
--------------------------
|
|
142
|
+
|
|
143
|
+
* Increase attribution size to 1024 chars.
|
|
144
|
+
* Support django 4.2, drop django 2.2
|
|
145
|
+
* Support python 3.11
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
0.0.9 (2022-11-09)
|
|
149
|
+
--------------------------
|
|
150
|
+
|
|
151
|
+
* Improve install_ign_baselayer command. Add Plan IGN V2 and fix multi layer import.
|
|
152
|
+
* Support django 3.2, 4.0 and 4.1
|
|
153
|
+
* Support python 3.10
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
0.0.8 (2020-11-03)
|
|
157
|
+
--------------------------
|
|
158
|
+
|
|
159
|
+
* Add command to create Mapbox layer
|
|
160
|
+
* Add command to create different IGN layers
|
|
161
|
+
|
|
162
|
+
0.0.7 (2020-10-30)
|
|
163
|
+
--------------------------
|
|
164
|
+
|
|
165
|
+
* Admin is now registered by default. Delete enabling code in your project.
|
|
166
|
+
* Set default mapbox glyphs to avoid map style problems on raster based layer
|
|
167
|
+
* Add commands to create OSM and OpenTopoMap base layers
|
|
168
|
+
|
|
169
|
+
0.0.6 (2020-09-09)
|
|
170
|
+
--------------------------
|
|
171
|
+
|
|
172
|
+
* Support django 3.1
|
|
173
|
+
|
|
174
|
+
0.0.5 (2020-06-03)
|
|
175
|
+
--------------------------
|
|
176
|
+
|
|
177
|
+
* Fix translations
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
0.0.4 (2019-12-04)
|
|
181
|
+
--------------------------
|
|
182
|
+
|
|
183
|
+
* Allow using map_box_url to store vector external json
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
0.0.3 (2019-12-03)
|
|
187
|
+
--------------------------
|
|
188
|
+
|
|
189
|
+
* add tile Size option for raster layers
|
|
190
|
+
* add attribution option for all layers
|
|
191
|
+
* Add real_url property to model MapBaseLayer, to get real url for mapbox styles
|
|
192
|
+
* fix MapBaseLayer deletion
|
|
193
|
+
* Enable fr translation
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
0.0.2 (2019-11-29)
|
|
197
|
+
--------------------------
|
|
198
|
+
|
|
199
|
+
* Increase tile url max size
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
0.0.1 (2019-11-25)
|
|
203
|
+
--------------------------
|
|
204
|
+
|
|
205
|
+
* First release
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
mapbox_baselayer/VERSION.md,sha256=xXUskxWKoLyH9GZQV7PTCja5ljRfxCUKaTaPPORid84,5
|
|
2
|
+
mapbox_baselayer/__init__.py,sha256=0tauVmyoZKZ5zo3zY0lQgEEiNnfY8PfEB0wQaRkre7I,67
|
|
3
|
+
mapbox_baselayer/admin.py,sha256=CKyJg_rS83IGKp_Sm1cb2mVyZc3PeHv_SFI-WmeKYyU,713
|
|
4
|
+
mapbox_baselayer/apps.py,sha256=nnT5Y9vdM9U4OiyVo6--MZJMio02mkD6RsIuoOJMMKg,252
|
|
5
|
+
mapbox_baselayer/models.py,sha256=2mHmhopln7QjjLgCWhIZ0x7XXclqpmt2qN0R6Xrxav0,4705
|
|
6
|
+
mapbox_baselayer/urls.py,sha256=bbWHJfTvqMKcMJhQgxyR0YVEl6XJfaw9Pun_Ht7ENt4,349
|
|
7
|
+
mapbox_baselayer/views.py,sha256=YIGzKjYf3Ybjf1DFSmYiYkI2dCbzcQ1bbx35XG0XLg0,1024
|
|
8
|
+
mapbox_baselayer/locale/en/LC_MESSAGES/django.mo,sha256=N1pb17IfLd0ASiKO8d68-B4ygSpDkhKOCs8YTzMXQo0,380
|
|
9
|
+
mapbox_baselayer/locale/en/LC_MESSAGES/django.po,sha256=Q6Pf9qCIyDSL6Rko7woeL0Deesldsjug54of3XfV8N4,970
|
|
10
|
+
mapbox_baselayer/locale/fr/LC_MESSAGES/django.mo,sha256=CaVjLMXT6lM6QX1W6pk3SOYY39udHZQJ4i37oDLmL0U,1144
|
|
11
|
+
mapbox_baselayer/locale/fr/LC_MESSAGES/django.po,sha256=4NjreX0sK5jmlQVrjBAnjoGdY6yrZcnGI4I4pBVrvTU,1777
|
|
12
|
+
mapbox_baselayer/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
+
mapbox_baselayer/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
mapbox_baselayer/management/commands/install_ign_baselayer.py,sha256=7LClCd_6i5MmIZHSMNx9Wc6JJtlPkWgtsdFuSxaE8dw,4121
|
|
15
|
+
mapbox_baselayer/management/commands/install_mapbox_baselayer.py,sha256=CcRyPKIA-5gMsDAiSvXHWBrpqRn71myn4fPWd3R_V8U,799
|
|
16
|
+
mapbox_baselayer/management/commands/install_opentopomap_baselayer.py,sha256=DCfzw_iADJ6kKNn_ZwCEqyzTxJuNkb1ZS6MEkJqoY-w,1481
|
|
17
|
+
mapbox_baselayer/management/commands/install_osm_baselayer.py,sha256=lbxN3TIEAzyYx0LsqvxIzEJoWvo_m5-wXdDCsnjAwvc,1188
|
|
18
|
+
mapbox_baselayer/migrations/0001_initial.py,sha256=JLtCTGm_tqtkTHr-u-RG7cSXeUn-n4SzkzvziY4idkw,2624
|
|
19
|
+
mapbox_baselayer/migrations/0002_auto_20191129_0942.py,sha256=37yBCzgkfIVBTWEqcjqo3qxY5x8-1m5ofK-zoJ336-c,388
|
|
20
|
+
mapbox_baselayer/migrations/0003_auto_20191202_0937.py,sha256=qmpIlBSdgdHiFzBqtEEQc4N48SYvi6FzYJksmCQQ-7E,590
|
|
21
|
+
mapbox_baselayer/migrations/0004_auto_20191202_1834.py,sha256=h8RMog4Vtpgpd7QJ8eFO8_d332JUSIT-S7oXfCE7kac,602
|
|
22
|
+
mapbox_baselayer/migrations/0005_auto_20191202_1840.py,sha256=7umWiFkblNf2z71H3scOZJVwZOiJ2dYwdTt83LxnG7A,534
|
|
23
|
+
mapbox_baselayer/migrations/0006_alter_baselayertile_id_alter_mapbaselayer_id_and_more.py,sha256=7QHuniltQD9Tf_UbcrEF-O6yUv2WDE9XagHuxfhyYdk,517
|
|
24
|
+
mapbox_baselayer/migrations/0007_alter_mapbaselayer_attribution.py,sha256=EqxuMn7MFA3hbfrccoWHKG6DSD0hq51V4g1Dx5MFpZs,502
|
|
25
|
+
mapbox_baselayer/migrations/0008_mapbaselayer_is_overlay_alter_mapbaselayer_order.py,sha256=CbLrtqCS5rb5LIVlllaAlFPTT_ROK-PSIxF2G_q8B-c,610
|
|
26
|
+
mapbox_baselayer/migrations/0009_alter_mapbaselayer_options.py,sha256=OtOGVhHoL3-pjkRoo4maJBPfk7J5q4SQHxGnvkkojQk,553
|
|
27
|
+
mapbox_baselayer/migrations/0010_baselayer_overlaylayer.py,sha256=s2qm55s5dLgYz6R8kt270nh6b2DgLtfkNo5Bud0FP1I,1019
|
|
28
|
+
mapbox_baselayer/migrations/0011_alter_mapbaselayer_base_layer_type.py,sha256=rludCMNjRNR0n3Ej3ty3w2Vnp-7-mHuZK56VxMb5UIc,662
|
|
29
|
+
mapbox_baselayer/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
+
mapbox_baselayer/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
+
mapbox_baselayer/tests/test_commands.py,sha256=YhkxRkUJzZeOmVW3nqY-mUPciHdR05bqrNECXy8LEmY,4392
|
|
32
|
+
mapbox_baselayer/tests/test_models.py,sha256=vzV1VZjwm_PZbcbjjxNBHOIAOmG4hj76IijiADFTEhw,3576
|
|
33
|
+
mapbox_baselayer/tests/test_views.py,sha256=V5hcOyOGT3RyKvdDbDPeyC2jfNbpQo67haeqNDJHF04,3218
|
|
34
|
+
test_mapbox_baselayer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
|
+
test_mapbox_baselayer/settings.py,sha256=fOSmryforHEgieHMbKwb1Np-I3CFqeOYl5TfnE2co-k,3374
|
|
36
|
+
test_mapbox_baselayer/urls.py,sha256=r7K0D9iJUOdtZo7Q_9vrv8-b7T1byrK9x7Ns6_6Rrq4,972
|
|
37
|
+
test_mapbox_baselayer/wsgi.py,sha256=iVP0iAEWKpGxB8zVKwTndgJmlDuHUteNx9shXILNPHc,419
|
|
38
|
+
test_mapbox_baselayer/test_app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
+
test_mapbox_baselayer/test_app/views.py,sha256=1YEuDVumOCKxDXt979ybIGhbi5Jd275bNj85qlAxg-c,132
|
|
40
|
+
django_mapbox_baselayer-1.1.1.dist-info/METADATA,sha256=e3s5f7cvJuh-KnjfAdAyHtfPzovLgzgQxmTjUbuA1iI,5348
|
|
41
|
+
django_mapbox_baselayer-1.1.1.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
|
|
42
|
+
django_mapbox_baselayer-1.1.1.dist-info/top_level.txt,sha256=5YN9trgD-9iN4i3Yp1PWKVx4Erznh8lX3VfD6FgOVHo,39
|
|
43
|
+
django_mapbox_baselayer-1.1.1.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.1.1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
default_app_config = "mapbox_baselayer.apps.MapboxBaselayerConfig"
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from django.contrib import admin
|
|
2
|
+
|
|
3
|
+
from . import models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class TileInLine(admin.StackedInline):
|
|
7
|
+
model = models.BaseLayerTile
|
|
8
|
+
extra = 0
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class BaseMapLayerAdmin(admin.ModelAdmin):
|
|
12
|
+
list_display = ("name", "slug", "base_layer_type", "order")
|
|
13
|
+
list_filter = ("base_layer_type",)
|
|
14
|
+
search_fields = ("name", "slug")
|
|
15
|
+
exclude = ("is_overlay",)
|
|
16
|
+
|
|
17
|
+
def get_inlines(self, request, obj=None):
|
|
18
|
+
if not obj.pk or (obj and obj.base_layer_type == obj.LayerType.RASTER):
|
|
19
|
+
return [TileInLine]
|
|
20
|
+
return []
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@admin.register(models.BaseLayer)
|
|
24
|
+
class BaseLayerAdmin(BaseMapLayerAdmin):
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@admin.register(models.OverlayLayer)
|
|
29
|
+
class OverlayLayerAdmin(BaseMapLayerAdmin):
|
|
30
|
+
pass
|
mapbox_baselayer/apps.py
ADDED
|
Binary file
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
#, fuzzy
|
|
7
|
+
msgid ""
|
|
8
|
+
msgstr ""
|
|
9
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
10
|
+
"Report-Msgid-Bugs-To: \n"
|
|
11
|
+
"POT-Creation-Date: 2026-02-06 16:09+0000\n"
|
|
12
|
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
13
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
14
|
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
15
|
+
"Language: \n"
|
|
16
|
+
"MIME-Version: 1.0\n"
|
|
17
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
18
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
19
|
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
20
|
+
|
|
21
|
+
msgid "MapBox Utils"
|
|
22
|
+
msgstr ""
|
|
23
|
+
|
|
24
|
+
msgid "Is overlay"
|
|
25
|
+
msgstr ""
|
|
26
|
+
|
|
27
|
+
msgid "Mapbox or tilejson URL"
|
|
28
|
+
msgstr ""
|
|
29
|
+
|
|
30
|
+
msgid "Raster tile size. Set 256 for 3rd party raster tilesets."
|
|
31
|
+
msgstr ""
|
|
32
|
+
|
|
33
|
+
msgid "Map base layers"
|
|
34
|
+
msgstr ""
|
|
35
|
+
|
|
36
|
+
msgid "Base layer"
|
|
37
|
+
msgstr ""
|
|
38
|
+
|
|
39
|
+
msgid "Base layers"
|
|
40
|
+
msgstr ""
|
|
41
|
+
|
|
42
|
+
msgid "Overlay layer"
|
|
43
|
+
msgstr ""
|
|
44
|
+
|
|
45
|
+
msgid "Overlay layers"
|
|
46
|
+
msgstr ""
|
|
Binary file
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
msgid ""
|
|
7
|
+
msgstr ""
|
|
8
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
|
+
"Report-Msgid-Bugs-To: \n"
|
|
10
|
+
"POT-Creation-Date: 2026-02-06 20:41+0000\n"
|
|
11
|
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
12
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
13
|
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
14
|
+
"Language: \n"
|
|
15
|
+
"MIME-Version: 1.0\n"
|
|
16
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
17
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
18
|
+
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
|
19
|
+
|
|
20
|
+
#: mapbox_baselayer/apps.py:8
|
|
21
|
+
msgid "MapBox Utils"
|
|
22
|
+
msgstr "Utilitaires MapBox"
|
|
23
|
+
|
|
24
|
+
#: mapbox_baselayer/models.py:11
|
|
25
|
+
msgid "Style URL"
|
|
26
|
+
msgstr "URL de style"
|
|
27
|
+
|
|
28
|
+
#: mapbox_baselayer/models.py:12
|
|
29
|
+
msgid "Raster tiles"
|
|
30
|
+
msgstr "Tuiles raster"
|
|
31
|
+
|
|
32
|
+
#: mapbox_baselayer/models.py:13
|
|
33
|
+
msgid "Vector tiles"
|
|
34
|
+
msgstr "Tuiles vectorielles"
|
|
35
|
+
|
|
36
|
+
#: mapbox_baselayer/models.py:16
|
|
37
|
+
msgid "Is overlay"
|
|
38
|
+
msgstr "Est une sur-couche"
|
|
39
|
+
|
|
40
|
+
#: mapbox_baselayer/models.py:20
|
|
41
|
+
msgid "Mapbox or tilejson URL"
|
|
42
|
+
msgstr "URL d'un style mapbox ou d'un tilejson"
|
|
43
|
+
|
|
44
|
+
#: mapbox_baselayer/models.py:26
|
|
45
|
+
msgid "Raster tile size. Set 256 for 3rd party raster tilesets."
|
|
46
|
+
msgstr "Taille de tuile raster. Mettre 256 pour les tuiles raster de tiers."
|
|
47
|
+
|
|
48
|
+
#: mapbox_baselayer/models.py:89 mapbox_baselayer/models.py:90
|
|
49
|
+
msgid "Map base layers"
|
|
50
|
+
msgstr "Fonds de plan des cartes"
|
|
51
|
+
|
|
52
|
+
#: mapbox_baselayer/models.py:112
|
|
53
|
+
msgid "Base layer"
|
|
54
|
+
msgstr "Fond de plan de cartes"
|
|
55
|
+
|
|
56
|
+
#: mapbox_baselayer/models.py:113
|
|
57
|
+
msgid "Base layers"
|
|
58
|
+
msgstr "Fonds de plan des cartes"
|
|
59
|
+
|
|
60
|
+
#: mapbox_baselayer/models.py:126
|
|
61
|
+
msgid "Overlay layer"
|
|
62
|
+
msgstr "Sur-couche de cartes"
|
|
63
|
+
|
|
64
|
+
#: mapbox_baselayer/models.py:127
|
|
65
|
+
msgid "Overlay layers"
|
|
66
|
+
msgstr "Sur-couches des cartes"
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
from urllib.parse import urlencode
|
|
2
|
+
|
|
3
|
+
from django.core.management import BaseCommand, CommandError
|
|
4
|
+
|
|
5
|
+
from mapbox_baselayer.models import BaseLayerTile, MapBaseLayer
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Command(BaseCommand):
|
|
9
|
+
help = "Install an IGN base layer"
|
|
10
|
+
raster_layers = {
|
|
11
|
+
"plan": {
|
|
12
|
+
"name": "GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2",
|
|
13
|
+
"format": "png",
|
|
14
|
+
"overlay": False,
|
|
15
|
+
"need_key": False,
|
|
16
|
+
},
|
|
17
|
+
"ortho": {
|
|
18
|
+
"name": "ORTHOIMAGERY.ORTHOPHOTOS",
|
|
19
|
+
"format": "jpeg",
|
|
20
|
+
"overlay": False,
|
|
21
|
+
"need_key": False,
|
|
22
|
+
},
|
|
23
|
+
"maps": {
|
|
24
|
+
"name": "GEOGRAPHICALGRIDSYSTEMS.MAPS",
|
|
25
|
+
"format": "jpeg",
|
|
26
|
+
"overlay": False,
|
|
27
|
+
"need_key": True,
|
|
28
|
+
},
|
|
29
|
+
"scan_25": {
|
|
30
|
+
"name": "GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN25TOUR",
|
|
31
|
+
"format": "jpeg",
|
|
32
|
+
"overlay": False,
|
|
33
|
+
"need_key": True,
|
|
34
|
+
},
|
|
35
|
+
"cadastre": {
|
|
36
|
+
"name": "CADASTRALPARCELS.PARCELS",
|
|
37
|
+
"format": "png",
|
|
38
|
+
"overlay": True,
|
|
39
|
+
"need_key": False,
|
|
40
|
+
},
|
|
41
|
+
}
|
|
42
|
+
mapbox_style_layers = {
|
|
43
|
+
"plan_vt": {
|
|
44
|
+
"url": "//data.geopf.fr/annexes/ressources/vectorTiles/styles/PLAN.IGN/standard.json"
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
def add_arguments(self, parser):
|
|
49
|
+
parser.add_argument("--key", type=str, default="ign_scan_ws")
|
|
50
|
+
parser.add_argument(
|
|
51
|
+
"--layers",
|
|
52
|
+
nargs="+",
|
|
53
|
+
type=str,
|
|
54
|
+
default=[
|
|
55
|
+
"ortho",
|
|
56
|
+
],
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
def handle(self, *args, **options):
|
|
60
|
+
key = options.get("key")
|
|
61
|
+
|
|
62
|
+
for layer in options.get("layers"):
|
|
63
|
+
if (
|
|
64
|
+
layer not in self.raster_layers
|
|
65
|
+
and layer not in self.mapbox_style_layers
|
|
66
|
+
):
|
|
67
|
+
valid_layers = list(self.raster_layers.keys()) + list(
|
|
68
|
+
self.mapbox_style_layers.keys()
|
|
69
|
+
)
|
|
70
|
+
msg = f"'{layer}' is not a valid value. Should be '{', '.join(valid_layers)}'"
|
|
71
|
+
raise CommandError(msg)
|
|
72
|
+
|
|
73
|
+
for layer in options.get("layers"):
|
|
74
|
+
if layer in self.raster_layers:
|
|
75
|
+
params = {
|
|
76
|
+
"LAYER": self.raster_layers[layer]["name"],
|
|
77
|
+
"EXCEPTIONS": "text/xml",
|
|
78
|
+
"FORMAT": f"image/{self.raster_layers[layer]['format']}",
|
|
79
|
+
"SERVICE": "WMTS",
|
|
80
|
+
"VERSION": "1.0.0",
|
|
81
|
+
"REQUEST": "GetTile",
|
|
82
|
+
"STYLE": "normal",
|
|
83
|
+
"TILEMATRIXSET": "PM",
|
|
84
|
+
}
|
|
85
|
+
if self.raster_layers[layer]["need_key"]:
|
|
86
|
+
params["apikey"] = key
|
|
87
|
+
base_url = "//data.geopf.fr/private/wmts"
|
|
88
|
+
|
|
89
|
+
# Build URL with unencoded placeholders
|
|
90
|
+
query_string = urlencode(params)
|
|
91
|
+
final_url = f"{base_url}?{query_string}&TILEMATRIX={{z}}&TILEROW={{y}}&TILECOL={{x}}"
|
|
92
|
+
|
|
93
|
+
base_layer = MapBaseLayer.objects.create(
|
|
94
|
+
name=f"IGN {layer}",
|
|
95
|
+
base_layer_type="raster",
|
|
96
|
+
tile_size=256,
|
|
97
|
+
is_overlay=self.raster_layers[layer]["overlay"],
|
|
98
|
+
min_zoom=0,
|
|
99
|
+
max_zoom=19,
|
|
100
|
+
attribution="© IGN - GeoPortail",
|
|
101
|
+
)
|
|
102
|
+
BaseLayerTile.objects.bulk_create(
|
|
103
|
+
[
|
|
104
|
+
BaseLayerTile(base_layer=base_layer, url=final_url),
|
|
105
|
+
]
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
for layer in options.get("layers"):
|
|
109
|
+
if layer in self.mapbox_style_layers:
|
|
110
|
+
style = self.mapbox_style_layers[layer]
|
|
111
|
+
MapBaseLayer.objects.create(
|
|
112
|
+
name=f"IGN {layer}",
|
|
113
|
+
base_layer_type="mapbox",
|
|
114
|
+
tile_size=512,
|
|
115
|
+
is_overlay=False,
|
|
116
|
+
attribution="© IGN - GeoPortail",
|
|
117
|
+
map_box_url=style["url"],
|
|
118
|
+
)
|
|
119
|
+
self.stdout.write(self.style.SUCCESS("IGN layer(s) created."))
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from django.core.management import BaseCommand
|
|
2
|
+
|
|
3
|
+
from mapbox_baselayer.models import MapBaseLayer
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Command(BaseCommand):
|
|
7
|
+
help = "Install a MapBox base layer"
|
|
8
|
+
|
|
9
|
+
def add_arguments(self, parser):
|
|
10
|
+
parser.add_argument(
|
|
11
|
+
"--mapbox-url",
|
|
12
|
+
action="store",
|
|
13
|
+
help="Mapbox url to use",
|
|
14
|
+
default="mapbox://styles/mapbox/streets-v11",
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
def handle(self, *args, **options):
|
|
18
|
+
MapBaseLayer.objects.create(
|
|
19
|
+
name="Mapbox",
|
|
20
|
+
base_layer_type="mapbox",
|
|
21
|
+
tile_size=512,
|
|
22
|
+
min_zoom=0,
|
|
23
|
+
max_zoom=22,
|
|
24
|
+
attribution="© Mapbox",
|
|
25
|
+
map_box_url=options.get("mapbox_url"),
|
|
26
|
+
)
|
|
27
|
+
self.stdout.write(self.style.SUCCESS("Mapbox base layer has been created."))
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from django.core.management import BaseCommand
|
|
2
|
+
|
|
3
|
+
from mapbox_baselayer.models import BaseLayerTile, MapBaseLayer
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Command(BaseCommand):
|
|
7
|
+
help = "Install an OpenTopoMap base layer"
|
|
8
|
+
|
|
9
|
+
def handle(self, *args, **options):
|
|
10
|
+
base_layer = MapBaseLayer.objects.create(
|
|
11
|
+
name="OpenTopoMap",
|
|
12
|
+
base_layer_type="raster",
|
|
13
|
+
tile_size=256,
|
|
14
|
+
min_zoom=2,
|
|
15
|
+
max_zoom=17,
|
|
16
|
+
attribution='map data: © <a href="https://openstreetmap.org/copyright">OpenStreetMap</a> contributors,'
|
|
17
|
+
'<a href="http://viewfinderpanoramas.org">SRTM</a> | map style: © '
|
|
18
|
+
'<a href="https://opentopomap.org">OpenTopoMap</a> '
|
|
19
|
+
'(<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)',
|
|
20
|
+
)
|
|
21
|
+
BaseLayerTile.objects.bulk_create(
|
|
22
|
+
[
|
|
23
|
+
BaseLayerTile(
|
|
24
|
+
base_layer=base_layer,
|
|
25
|
+
url="https://a.tile.opentopomap.org/{z}/{x}/{y}.png",
|
|
26
|
+
),
|
|
27
|
+
BaseLayerTile(
|
|
28
|
+
base_layer=base_layer,
|
|
29
|
+
url="https://b.tile.opentopomap.org/{z}/{x}/{y}.png",
|
|
30
|
+
),
|
|
31
|
+
BaseLayerTile(
|
|
32
|
+
base_layer=base_layer,
|
|
33
|
+
url="https://c.tile.opentopomap.org/{z}/{x}/{y}.png",
|
|
34
|
+
),
|
|
35
|
+
]
|
|
36
|
+
)
|
|
37
|
+
self.stdout.write(
|
|
38
|
+
self.style.SUCCESS("OpenTopoMap base layer has been created.")
|
|
39
|
+
)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from django.core.management import BaseCommand
|
|
2
|
+
|
|
3
|
+
from mapbox_baselayer.models import BaseLayerTile, MapBaseLayer
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Command(BaseCommand):
|
|
7
|
+
help = "Install an OSM base layer"
|
|
8
|
+
|
|
9
|
+
def handle(self, *args, **options):
|
|
10
|
+
base_layer = MapBaseLayer.objects.create(
|
|
11
|
+
name="OSM",
|
|
12
|
+
base_layer_type="raster",
|
|
13
|
+
tile_size=256,
|
|
14
|
+
min_zoom=0,
|
|
15
|
+
max_zoom=19,
|
|
16
|
+
attribution='<a href="https://www.openstreetmap.org/copyright">OSM Contributors</a>',
|
|
17
|
+
)
|
|
18
|
+
BaseLayerTile.objects.bulk_create(
|
|
19
|
+
[
|
|
20
|
+
BaseLayerTile(
|
|
21
|
+
base_layer=base_layer,
|
|
22
|
+
url="https://a.tile.openstreetmap.org/{z}/{x}/{y}.png",
|
|
23
|
+
),
|
|
24
|
+
BaseLayerTile(
|
|
25
|
+
base_layer=base_layer,
|
|
26
|
+
url="https://b.tile.openstreetmap.org/{z}/{x}/{y}.png",
|
|
27
|
+
),
|
|
28
|
+
BaseLayerTile(
|
|
29
|
+
base_layer=base_layer,
|
|
30
|
+
url="https://c.tile.openstreetmap.org/{z}/{x}/{y}.png",
|
|
31
|
+
),
|
|
32
|
+
]
|
|
33
|
+
)
|
|
34
|
+
self.stdout.write(self.style.SUCCESS("OSM base layer has been created."))
|