mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-09-02 08:42:31 +00:00
create car/motorcycle category and add garage, related to #7
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { PUBLIC_MAPBOX_TOKEN } from '$env/static/public';
|
import { PUBLIC_MAPBOX_TOKEN } from '$env/static/public';
|
||||||
import { TramFront, Utensils, ShoppingBasket, Droplet, ShowerHead, Fuel, CircleParking, Fence, FerrisWheel, Telescope, Bed, Mountain, Pickaxe, Store, TrainFront, Bus, Ship, Croissant, House, Tent } from 'lucide-static';
|
import { TramFront, Utensils, ShoppingBasket, Droplet, ShowerHead, Fuel, CircleParking, Fence, FerrisWheel, Telescope, Bed, Mountain, Pickaxe, Store, TrainFront, Bus, Ship, Croissant, House, Tent, Wrench } from 'lucide-static';
|
||||||
import { type AnySourceData, type Style } from 'mapbox-gl';
|
import { type AnySourceData, type Style } from 'mapbox-gl';
|
||||||
|
|
||||||
export const basemaps: { [key: string]: string | Style; } = {
|
export const basemaps: { [key: string]: string | Style; } = {
|
||||||
@@ -552,10 +552,7 @@ export const overpassTree: LayerTreeType = {
|
|||||||
amenities: {
|
amenities: {
|
||||||
toilets: true,
|
toilets: true,
|
||||||
"water": true,
|
"water": true,
|
||||||
"water-spring": true,
|
|
||||||
shower: true,
|
shower: true,
|
||||||
"fuel-station": true,
|
|
||||||
parking: true,
|
|
||||||
barrier: true
|
barrier: true
|
||||||
},
|
},
|
||||||
tourism: {
|
tourism: {
|
||||||
@@ -579,6 +576,11 @@ export const overpassTree: LayerTreeType = {
|
|||||||
"bus-stop": true,
|
"bus-stop": true,
|
||||||
ferry: true
|
ferry: true
|
||||||
},
|
},
|
||||||
|
motorized: {
|
||||||
|
"fuel-station": true,
|
||||||
|
parking: true,
|
||||||
|
garage: true
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -638,10 +640,7 @@ export const defaultOverpassQueries: LayerTreeType = {
|
|||||||
amenities: {
|
amenities: {
|
||||||
toilets: false,
|
toilets: false,
|
||||||
"water": false,
|
"water": false,
|
||||||
"water-spring": false,
|
|
||||||
shower: false,
|
shower: false,
|
||||||
"fuel-station": false,
|
|
||||||
parking: false,
|
|
||||||
barrier: false
|
barrier: false
|
||||||
},
|
},
|
||||||
tourism: {
|
tourism: {
|
||||||
@@ -665,6 +664,11 @@ export const defaultOverpassQueries: LayerTreeType = {
|
|||||||
"bus-stop": false,
|
"bus-stop": false,
|
||||||
ferry: false
|
ferry: false
|
||||||
},
|
},
|
||||||
|
motorized: {
|
||||||
|
"fuel-station": false,
|
||||||
|
parking: false,
|
||||||
|
garage: false
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -774,10 +778,7 @@ export const defaultOverpassTree: LayerTreeType = {
|
|||||||
amenities: {
|
amenities: {
|
||||||
toilets: true,
|
toilets: true,
|
||||||
"water": true,
|
"water": true,
|
||||||
"water-spring": false,
|
|
||||||
shower: false,
|
shower: false,
|
||||||
"fuel-station": false,
|
|
||||||
parking: false,
|
|
||||||
barrier: false
|
barrier: false
|
||||||
},
|
},
|
||||||
tourism: {
|
tourism: {
|
||||||
@@ -801,6 +802,11 @@ export const defaultOverpassTree: LayerTreeType = {
|
|||||||
"bus-stop": true,
|
"bus-stop": true,
|
||||||
ferry: false
|
ferry: false
|
||||||
},
|
},
|
||||||
|
motorized: {
|
||||||
|
"fuel-station": false,
|
||||||
|
parking: false,
|
||||||
|
garage: false
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -819,7 +825,7 @@ type OverpassQueryData = {
|
|||||||
svg: string,
|
svg: string,
|
||||||
color: string,
|
color: string,
|
||||||
},
|
},
|
||||||
tags: Record<string, string | boolean | string[]>,
|
tags: Record<string, string | boolean | string[]> | Record<string, string | boolean | string[]>[],
|
||||||
};
|
};
|
||||||
|
|
||||||
export const overpassQueryData: Record<string, OverpassQueryData> = {
|
export const overpassQueryData: Record<string, OverpassQueryData> = {
|
||||||
@@ -864,19 +870,12 @@ export const overpassQueryData: Record<string, OverpassQueryData> = {
|
|||||||
svg: Droplet,
|
svg: Droplet,
|
||||||
color: "DeepSkyBlue",
|
color: "DeepSkyBlue",
|
||||||
},
|
},
|
||||||
tags: {
|
tags: [{
|
||||||
amenity: ["drinking_water", "water_point"]
|
amenity: ["drinking_water", "water_point"]
|
||||||
}
|
}, {
|
||||||
},
|
|
||||||
"water-spring": {
|
|
||||||
icon: {
|
|
||||||
svg: Droplet,
|
|
||||||
color: "DeepSkyBlue",
|
|
||||||
},
|
|
||||||
tags: {
|
|
||||||
natural: "spring",
|
natural: "spring",
|
||||||
drinking_water: "yes"
|
drinking_water: "yes"
|
||||||
}
|
}]
|
||||||
},
|
},
|
||||||
shower: {
|
shower: {
|
||||||
icon: {
|
icon: {
|
||||||
@@ -905,6 +904,15 @@ export const overpassQueryData: Record<string, OverpassQueryData> = {
|
|||||||
amenity: "parking"
|
amenity: "parking"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
garage: {
|
||||||
|
icon: {
|
||||||
|
svg: Wrench,
|
||||||
|
color: "#000000",
|
||||||
|
},
|
||||||
|
tags: {
|
||||||
|
shop: ["car_repair", "motorcycle_repair"]
|
||||||
|
}
|
||||||
|
},
|
||||||
barrier: {
|
barrier: {
|
||||||
icon: {
|
icon: {
|
||||||
svg: Fence,
|
svg: Fence,
|
||||||
|
@@ -260,20 +260,36 @@ function getQueries(queries: string[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getQuery(query: string) {
|
function getQuery(query: string) {
|
||||||
let arrayEntry = Object.entries(overpassQueryData[query].tags).find(([_, value]) => Array.isArray(value));
|
if (Array.isArray(overpassQueryData[query].tags)) {
|
||||||
|
return overpassQueryData[query].tags.map((tags) => getQueryItem(tags)).join('');
|
||||||
|
} else {
|
||||||
|
return getQueryItem(overpassQueryData[query].tags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getQueryItem(tags: Record<string, string | boolean | string[]>) {
|
||||||
|
let arrayEntry = Object.entries(tags).find(([_, value]) => Array.isArray(value));
|
||||||
if (arrayEntry !== undefined) {
|
if (arrayEntry !== undefined) {
|
||||||
return arrayEntry[1].map((val) => `nwr${Object.entries(overpassQueryData[query].tags)
|
return arrayEntry[1].map((val) => `nwr${Object.entries(tags)
|
||||||
.map(([tag, value]) => `[${tag}=${tag === arrayEntry[0] ? val : value}]`)
|
.map(([tag, value]) => `[${tag}=${tag === arrayEntry[0] ? val : value}]`)
|
||||||
.join('')};`).join('');
|
.join('')};`).join('');
|
||||||
} else {
|
} else {
|
||||||
return `nwr${Object.entries(overpassQueryData[query].tags)
|
return `nwr${Object.entries(tags)
|
||||||
.map(([tag, value]) => `[${tag}=${value}]`)
|
.map(([tag, value]) => `[${tag}=${value}]`)
|
||||||
.join('')};`;
|
.join('')};`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function belongsToQuery(element: any, query: string) {
|
function belongsToQuery(element: any, query: string) {
|
||||||
return Object.entries(overpassQueryData[query].tags)
|
if (Array.isArray(overpassQueryData[query].tags)) {
|
||||||
|
return overpassQueryData[query].tags.some((tags) => belongsToQueryItem(element, tags));
|
||||||
|
} else {
|
||||||
|
return belongsToQueryItem(element, overpassQueryData[query].tags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function belongsToQueryItem(element: any, tags: Record<string, string | boolean | string[]>) {
|
||||||
|
return Object.entries(tags)
|
||||||
.every(([tag, value]) => Array.isArray(value) ? value.includes(element.tags[tag]) : element.tags[tag] === value);
|
.every(([tag, value]) => Array.isArray(value) ? value.includes(element.tags[tag]) : element.tags[tag] === value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -294,10 +294,11 @@
|
|||||||
"amenities": "Amenities",
|
"amenities": "Amenities",
|
||||||
"toilets": "Toilets",
|
"toilets": "Toilets",
|
||||||
"water": "Water",
|
"water": "Water",
|
||||||
"water-spring": "Water Spring",
|
|
||||||
"shower": "Shower",
|
"shower": "Shower",
|
||||||
|
"motorized": "Cars and Motorcycles",
|
||||||
"fuel-station": "Fuel Station",
|
"fuel-station": "Fuel Station",
|
||||||
"parking": "Parking",
|
"parking": "Parking",
|
||||||
|
"garage": "Garage",
|
||||||
"barrier": "Barrier",
|
"barrier": "Barrier",
|
||||||
"tourism": "Tourism",
|
"tourism": "Tourism",
|
||||||
"attraction": "Attraction",
|
"attraction": "Attraction",
|
||||||
|
Reference in New Issue
Block a user