Skip to content

Commit 2b618cd

Browse files
authored
Merge pull request #70 from mapswipe/replace-bing-component
feat: generic quadkey tile url function for xyz sources
2 parents 867d4a0 + 30f7080 commit 2b618cd

File tree

5 files changed

+49
-40
lines changed

5 files changed

+49
-40
lines changed

src/components/DigitizeProject.vue

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,14 @@ export default defineComponent({
198198
this.taskFeatures.clear()
199199
this.taskFeatures.push(newFeature)
200200
},
201+
xyzUrl(tileCoord: [number, number, number]) {
202+
const url = makeXyzUrl(this.project.tileServer, tileCoord)
203+
return url
204+
},
205+
xyzUrlB(tileCoord: [number, number, number]) {
206+
const url = makeXyzUrl(this.project.tileServerB, tileCoord)
207+
return url
208+
},
201209
},
202210
created() {
203211
this.startTime = new Date().toISOString()
@@ -280,24 +288,17 @@ export default defineComponent({
280288
</ol-tile-layer>
281289

282290
<ol-tile-layer ref="basemapLayer" :zIndex="2">
283-
<ol-source-bingmaps
284-
v-if="project?.tileServer?.name === 'bing'"
285-
:api-key="project?.tileServer?.apiKey"
286-
:imagery-set="project?.tileServer?.imagerySet || 'Aerial'"
287-
/>
288291
<ol-source-xyz
289-
v-else
292+
:tile-url-function="xyzUrl"
290293
:opaque="false"
291-
:url="makeXyzUrl(project.tileServer)"
292294
:attributions="project.tileServer.credits"
293295
/>
294296
</ol-tile-layer>
295-
296297
<ol-tile-layer v-if="project.tileServerB && !transparent" ref="basemapLayerB" :zIndex="3">
297298
<ol-source-xyz
299+
:tile-url-function="xyzUrlB"
298300
:opaque="false"
299-
:url="makeXyzUrl(project.tileServerB)"
300-
:attributions="project.tileServerB.credits"
301+
:attributions="project.tileServer.credits"
301302
/>
302303
</ol-tile-layer>
303304

src/components/ValidateProjectTask.vue

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,6 @@ export default defineComponent({
6969
height: 'max(calc(100vh - 390px), 600px)',
7070
}
7171
},
72-
xyzUrl() {
73-
return makeXyzUrl(this.project.tileServer)
74-
},
7572
strokeColor() {
7673
const color = hex2rgb(theme.light.accent, this.transparent ? 0.4 : 1)
7774
return color
@@ -116,6 +113,10 @@ export default defineComponent({
116113
}, delay)
117114
}
118115
},
116+
xyzUrl(tileCoord: [number, number, number]) {
117+
const url = makeXyzUrl(this.project.tileServer, tileCoord)
118+
return url
119+
},
119120
},
120121
})
121122
</script>
@@ -138,12 +139,7 @@ export default defineComponent({
138139
<ol-source-osm />
139140
</ol-tile-layer>
140141
<ol-tile-layer id="basemapLayer" ref="basemapLayer" :zIndex="2">
141-
<ol-source-bingmaps
142-
v-if="project?.tileServer?.name === 'bing'"
143-
:api-key="project?.tileServer?.apiKey"
144-
:imagery-set="project?.tileServer?.imagerySet || 'Aerial'"
145-
/>
146-
<ol-source-xyz v-else :url="xyzUrl" :attributions="project.tileServer.credits" />
142+
<ol-source-xyz :tile-url-function="xyzUrl" :attributions="project.tileServer.credits" />
147143
</ol-tile-layer>
148144
<ol-vector-layer id="taskLayer" ref="taskLayer" :zIndex="3" :key="task.taskId">
149145
<ol-source-vector :features="taskFeatures" ref="taskSource" ident="taskSource" />

src/utils/buildTasks.ts

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import getQuadKeyFromCoordsAndZoom from './getQuadKeyFromCoordsAndZoom'
2+
13
const arrayFromMinMax = (min, max) => {
24
min = parseInt(min)
35
max = parseInt(max)
@@ -21,25 +23,6 @@ const getBingURLFromQuadKey = (urlTemplate, quadKey, apiKey) => {
2123
return bingUrl
2224
}
2325

24-
const getQuadKeyFromCoordsAndZoom = (x, y, zoom) => {
25-
// Create a quadkey for use with certain tileservers that use them, e.g. Bing
26-
let quadKey = ''
27-
for (let i = zoom; i > 0; i -= 1) {
28-
let digit = 0
29-
/* eslint-disable no-bitwise */
30-
const mask = 1 << (i - 1)
31-
if ((x & mask) !== 0) {
32-
digit += 1
33-
}
34-
if ((y & mask) !== 0) {
35-
digit += 2
36-
}
37-
/* eslint-enable no-bitwise */
38-
quadKey += digit.toString()
39-
}
40-
return quadKey
41-
}
42-
4326
const getTileUrlFromCoordsAndTileserver = (x, y, zoom, tileServer) => {
4427
// based on https://github.com/mapswipe/mapswipe/blob/master/src/shared/common/tile_functions.js
4528
const urlTemplate = tileServer.url
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const getQuadKeyFromCoordsAndZoom = (x: number, y: number, zoom: number) => {
2+
// Create a quadkey for use with certain tileservers that use them, e.g. Bing
3+
let quadKey = ''
4+
for (let i = zoom; i > 0; i -= 1) {
5+
let digit = 0
6+
/* eslint-disable no-bitwise */
7+
const mask = 1 << (i - 1)
8+
if ((x & mask) !== 0) {
9+
digit += 1
10+
}
11+
if ((y & mask) !== 0) {
12+
digit += 2
13+
}
14+
/* eslint-enable no-bitwise */
15+
quadKey += digit.toString()
16+
}
17+
return quadKey
18+
}
19+
20+
export default getQuadKeyFromCoordsAndZoom

src/utils/makeXyzUrl.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
1-
const makeXyzUrl = (tileServer) => {
1+
import getQuadKeyFromCoordsAndZoom from './getQuadKeyFromCoordsAndZoom'
2+
3+
const makeXyzUrl = (tileServer: string, tileCoord: [number, number, number]) => {
24
const apiKey = tileServer.apiKey
35
const wmtsLayerName = tileServer.wmtsLayerName
4-
const url = tileServer.url
6+
const [zoom, x, y] = tileCoord
7+
const quadkey = getQuadKeyFromCoordsAndZoom(x, y, zoom)
8+
let url = tileServer.url
59
.replace(/({apiKey})|({key})/, apiKey)
610
.replace(/({layer})|({name})/, wmtsLayerName)
11+
.replace(/({quad_key})/, quadkey)
12+
.replace(/{z}/gi, zoom.toString())
13+
.replace(/{x}/gi, x.toString())
14+
.replace(/{y}/gi, y.toString())
15+
console.log(url)
716
return url
817
}
918

0 commit comments

Comments
 (0)