Performance: specify separate editor layer index

This commit is contained in:
Pieter Vander Vennet 2025-04-26 22:39:05 +02:00
parent 77af14e9c6
commit 8444cb86bc
7 changed files with 47 additions and 20 deletions

15
package-lock.json generated
View file

@ -1,4 +1,3 @@
{
"name": "mapcomplete", "name": "mapcomplete",
"version": "0.51.0", "version": "0.51.0",
"lockfileVersion": 2, "lockfileVersion": 2,
@ -67,7 +66,7 @@
"marked": "^12.0.2", "marked": "^12.0.2",
"monaco-editor": "^0.46.0", "monaco-editor": "^0.46.0",
"mvt-to-geojson": "^0.0.6", "mvt-to-geojson": "^0.0.6",
"name-suggestion-index": "^6.0.20250302", "name-suggestion-index": "^6.0.20250413",
"npm": "^11.1.0", "npm": "^11.1.0",
"opening_hours": "^3.6.0", "opening_hours": "^3.6.0",
"osm-auth": "^2.6.0", "osm-auth": "^2.6.0",
@ -20056,9 +20055,9 @@
} }
}, },
"node_modules/name-suggestion-index": { "node_modules/name-suggestion-index": {
"version": "6.0.20250302", "version": "6.0.20250413",
"resolved": "https://registry.npmjs.org/name-suggestion-index/-/name-suggestion-index-6.0.20250302.tgz", "resolved": "https://registry.npmjs.org/name-suggestion-index/-/name-suggestion-index-6.0.20250413.tgz",
"integrity": "sha512-9tdHRaHBXhFTXCt0FGWhOuIRWx8GalsbTD2GIL9B8XmFah8q6hk99yjMMnRkRAedarvJpYHaUCSbkaH6QQpplA==", "integrity": "sha512-rJ+6A2pp/NQ9gidWs72XuVBlfzynF4IaoeOFhKX19fCQbVNHiWbxlTSxQ852pQoisJXDSW5kgzakoKz7uxo9BA==",
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"dependencies": { "dependencies": {
"diacritics": "^1.3.0", "diacritics": "^1.3.0",
@ -44340,9 +44339,9 @@
} }
}, },
"name-suggestion-index": { "name-suggestion-index": {
"version": "6.0.20250302", "version": "6.0.20250413",
"resolved": "https://registry.npmjs.org/name-suggestion-index/-/name-suggestion-index-6.0.20250302.tgz", "resolved": "https://registry.npmjs.org/name-suggestion-index/-/name-suggestion-index-6.0.20250413.tgz",
"integrity": "sha512-9tdHRaHBXhFTXCt0FGWhOuIRWx8GalsbTD2GIL9B8XmFah8q6hk99yjMMnRkRAedarvJpYHaUCSbkaH6QQpplA==", "integrity": "sha512-rJ+6A2pp/NQ9gidWs72XuVBlfzynF4IaoeOFhKX19fCQbVNHiWbxlTSxQ852pQoisJXDSW5kgzakoKz7uxo9BA==",
"requires": { "requires": {
"diacritics": "^1.3.0", "diacritics": "^1.3.0",
"run-s": "^0.0.0", "run-s": "^0.0.0",

View file

@ -37,6 +37,8 @@
"summary_server": "https://cache.mapcomplete.org/", "summary_server": "https://cache.mapcomplete.org/",
"geoip_server": "https://ipinfo.mapcomplete.org/", "geoip_server": "https://ipinfo.mapcomplete.org/",
"error_server": "https://report.mapcomplete.org/report", "error_server": "https://report.mapcomplete.org/report",
"#nsi_logos_server": "The location where a running instance of MapComplete will fetch the NSI-logos. This is by default the host itself, but not in e.g. the android app",
"nsi_logos_server": "https://mapcomplete.org/assets/data/nsi/",
"api_keys": { "api_keys": {
"#": "Various API-keys for various services. Feel free to reuse those in another MapComplete-hosted version", "#": "Various API-keys for various services. Feel free to reuse those in another MapComplete-hosted version",
"#fork": "Not bound to a domain; can be reused", "#fork": "Not bound to a domain; can be reused",
@ -111,7 +113,7 @@
"generate": "npm run generate:licenses && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run refresh:layeroverview && npm run generate:service-worker", "generate": "npm run generate:licenses && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run refresh:layeroverview && npm run generate:service-worker",
"generate:charging-stations": "cd ./assets/layers/charging_station && vite-node csvToJson.ts && cd -", "generate:charging-stations": "cd ./assets/layers/charging_station && vite-node csvToJson.ts && cd -",
"clean:tests": "find . -type f -name \"*.doctest.ts\" | xargs -r rm", "clean:tests": "find . -type f -name \"*.doctest.ts\" | xargs -r rm",
"clean": "rm -rf .cache/ && (find *.html | grep -v \"^\\(404\\|index\\|land\\|privacy\\|test\\|studio\\|theme\\|style_test\\|statistics\\|status\\|leaderboard\\|inspector\\).html\" | xargs -r rm) && (ls | grep \"^index_[a-zA-Z_-]\\+\\.ts$\" | xargs -r rm)", "clean": "echo '{\n \"#\": \"Settings in this file override the `config`-section of `package.json`\"\n}' > config.json && rm -rf .cache/ && (find *.html | grep -v \"^\\(404\\|index\\|land\\|privacy\\|test\\|studio\\|theme\\|style_test\\|statistics\\|status\\|leaderboard\\|inspector\\).html\" | xargs -r rm) && (ls | grep \"^index_[a-zA-Z_-]\\+\\.ts$\" | xargs -r rm)",
"generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot", "generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot",
"scrapeWebsites": "vite-node scripts/importscripts/compareWebsiteData.ts -- ~/Downloads/ShopsWithWebsiteNodes.csv ~/data/scraped_websites/", "scrapeWebsites": "vite-node scripts/importscripts/compareWebsiteData.ts -- ~/Downloads/ShopsWithWebsiteNodes.csv ~/data/scraped_websites/",
"### 0": "VELOPARK", "### 0": "VELOPARK",
@ -229,7 +231,7 @@
"marked": "^12.0.2", "marked": "^12.0.2",
"monaco-editor": "^0.46.0", "monaco-editor": "^0.46.0",
"mvt-to-geojson": "^0.0.6", "mvt-to-geojson": "^0.0.6",
"name-suggestion-index": "^6.0.20250302", "name-suggestion-index": "^6.0.20250413",
"npm": "^11.1.0", "npm": "^11.1.0",
"opening_hours": "^3.6.0", "opening_hours": "^3.6.0",
"osm-auth": "^2.6.0", "osm-auth": "^2.6.0",

View file

@ -126,7 +126,7 @@ class DownloadEli extends Script {
fs.writeFileSync(targetGlobal, JSON.stringify(contentsGlobal, null, " "), { fs.writeFileSync(targetGlobal, JSON.stringify(contentsGlobal, null, " "), {
encoding: "utf8", encoding: "utf8",
}) })
console.log("Written", keptGlobalLayers.length + ", entries to the global ELI") console.log("Written", keptGlobalLayers.length + ", entries to the global ELI ("+targetGlobal+")")
} }
} }

View file

@ -211,7 +211,7 @@ class NsiLogos extends Script {
const config: LayerConfigJson = { const config: LayerConfigJson = {
id: "nsi_" + type, id: "nsi_" + type,
description: { description: {
en: "Exposes part of the NSI to reuse in other themes, e.g. for rendering", en: "Exposes part of the NSI to reuse in other themes, e.g. for rendering. Automatically generated and never directly loaded in a theme",
}, },
source: "special:library", source: "special:library",
pointRendering: null, pointRendering: null,

View file

@ -8,7 +8,18 @@ then
npm run generate:layeroverview npm run generate:layeroverview
npm run generate:layouts npm run generate:layouts
fi fi
vite-node scripts/nsiLogos.ts -- patch echo '''
{
"nsi_logos_server": "https://mapcomplete.org/assets/data/nsi/logos/"
}
''' > config.json
cat config.json | jq
if [ $? -ne 0 ]
then
echo "config.json file is invalid, exiting now"
tput bel
exit 0
fi
npm run build npm run build
echo ''' echo '''
import type { CapacitorConfig } from "@capacitor/cli"; import type { CapacitorConfig } from "@capacitor/cli";
@ -22,6 +33,7 @@ const config: CapacitorConfig = {
export default config; export default config;
''' > capacitor.config.ts ''' > capacitor.config.ts
# copy distribution files # copy distribution files
rm -rf dist-full rm -rf dist-full
mkdir dist-full mkdir dist-full
@ -51,6 +63,11 @@ cp -r dist/assets/svg dist-full/assets/
cp -r dist/assets/templates dist-full/assets/ cp -r dist/assets/templates dist-full/assets/
cp -r dist/assets/generated/themes/ dist-full/assets/generated/ cp -r dist/assets/generated/themes/ dist-full/assets/generated/
cp -r dist/assets/themes dist-full/assets/ cp -r dist/assets/themes dist-full/assets/
cp dist/assets/*.js.map dist-full/assets/
rm -rf dist-full/assets/data/nsi
rm /home/pietervdvn/git/MapComplete/dist-full/assets/layers/nsi_brand/nsi_brand.json
rm /home/pietervdvn/git/MapComplete/dist-full/assets/layers/nsi_operator/nsi_operator.json
# mkdir dist-full/assets/generated # mkdir dist-full/assets/generated
nvm use nvm use
@ -59,7 +76,8 @@ nvm use
npx capacitor-assets generate npx capacitor-assets generate
npx cap sync npx cap sync
cd android npm run clean
echo "All done! Don't forget to click 'gradle sync files' in Android Studio" echo "All done! Don't forget to click 'gradle sync files' in Android Studio"
tput bel tput bel
tput bel tput bel

View file

@ -8,6 +8,7 @@ import { TypedTranslation } from "../../UI/i18n/Translation"
import { RegexTag } from "../Tags/RegexTag" import { RegexTag } from "../Tags/RegexTag"
import { TagConfigJson } from "../../Models/ThemeConfig/Json/TagConfigJson" import { TagConfigJson } from "../../Models/ThemeConfig/Json/TagConfigJson"
import { TagUtils } from "../Tags/TagUtils" import { TagUtils } from "../Tags/TagUtils"
import Constants from "../../Models/Constants"
/** /**
* Main name suggestion index file * Main name suggestion index file
@ -69,8 +70,10 @@ export default class NameSuggestionIndex {
private loco: LocationConflation // Some additional boundaries private loco: LocationConflation // Some additional boundaries
private _supportedTypes: string[] private _supportedTypes: string[]
private _serverLocation: string
constructor( private constructor(
serverLocation: string,
nsiFile: Readonly<NSIFile>, nsiFile: Readonly<NSIFile>,
nsiWdFile: Readonly< nsiWdFile: Readonly<
Record< Record<
@ -82,6 +85,7 @@ export default class NameSuggestionIndex {
>, >,
features: Readonly<FeatureCollection> features: Readonly<FeatureCollection>
) { ) {
this._serverLocation = serverLocation
this.nsiFile = nsiFile this.nsiFile = nsiFile
this.nsiWdFile = nsiWdFile this.nsiWdFile = nsiWdFile
this.loco = new LocationConflation(features) this.loco = new LocationConflation(features)
@ -101,6 +105,7 @@ export default class NameSuggestionIndex {
].map((url) => Utils.downloadJsonCached(url, 1000 * 60 * 60 * 24 * 30)) ].map((url) => Utils.downloadJsonCached(url, 1000 * 60 * 60 * 24 * 30))
) )
NameSuggestionIndex.inited = new NameSuggestionIndex( NameSuggestionIndex.inited = new NameSuggestionIndex(
Constants.nsiLogosEndpoint,
<any>nsi, <any>nsi,
<any>nsiWd["wikidata"], <any>nsiWd["wikidata"],
<any>features <any>features
@ -129,12 +134,13 @@ export default class NameSuggestionIndex {
* @param countries * @param countries
* @private * @private
*/ */
private static async fetchFrequenciesFor(type: string, countries: string[]) { private async fetchFrequenciesFor(type: string, countries: string[]) {
const server = this._serverLocation
let stats = await Promise.all( let stats = await Promise.all(
countries.map((c) => { countries.map((c) => {
try { try {
return Utils.downloadJsonCached<Record<string, number>>( return Utils.downloadJsonCached<Record<string, number>>(
`./assets/data/nsi/stats/${type}.${c.toUpperCase()}.json`, `${server}/stats/${type}.${c.toUpperCase()}.json`,
24 * 60 * 60 * 1000 24 * 60 * 60 * 1000
) )
} catch (e) { } catch (e) {
@ -194,7 +200,7 @@ export default class NameSuggestionIndex {
const mappings: (Mapping & { frequency: number })[] = [] const mappings: (Mapping & { frequency: number })[] = []
const frequencies = const frequencies =
country !== undefined country !== undefined
? await NameSuggestionIndex.fetchFrequenciesFor(type, country) ? await this.fetchFrequenciesFor(type, country)
: {} : {}
for (const key in tags) { for (const key in tags) {
if (key.startsWith("_")) { if (key.startsWith("_")) {
@ -398,11 +404,12 @@ export default class NameSuggestionIndex {
} }
public getIconUrl(nsiItem: NSIItem): string | undefined { public getIconUrl(nsiItem: NSIItem): string | undefined {
if (!nsiItem.ext) { const baseUrl = this._serverLocation
if (!nsiItem.ext || baseUrl === null) {
// No extension -> there is no logo // No extension -> there is no logo
return undefined return undefined
} }
return "./assets/data/nsi/logos/" + nsiItem.id + "." + nsiItem.ext return baseUrl +"/logos/"+ nsiItem.id + "." + nsiItem.ext
} }
private static readonly brandPrefix = ["name", "alt_name", "operator", "brand"] as const private static readonly brandPrefix = ["name", "alt_name", "operator", "brand"] as const

View file

@ -139,6 +139,7 @@ export default class Constants {
public static osmAuthConfig: AuthConfig = Constants.config.oauth_credentials public static osmAuthConfig: AuthConfig = Constants.config.oauth_credentials
public static nominatimEndpoint: string = Constants.config.nominatimEndpoint public static nominatimEndpoint: string = Constants.config.nominatimEndpoint
public static photonEndpoint: string = Constants.config.photonEndpoint public static photonEndpoint: string = Constants.config.photonEndpoint
public static nsiLogosEndpoint: string = Constants.config.nsi_logos_server ?? null
public static weblate: string = "https://translate.mapcomplete.org/" public static weblate: string = "https://translate.mapcomplete.org/"
public static linkedDataProxy: string = Constants.config["jsonld-proxy"] public static linkedDataProxy: string = Constants.config["jsonld-proxy"]