46 Commits

Author SHA1 Message Date
vcoppe fe8896e870 get styles from github 2026-05-27 20:17:49 +02:00
vcoppe c99517572e update images 2026-05-27 19:40:09 +02:00
vcoppe 0b7f30a7c4 remove maptiler layers 2026-05-27 18:52:15 +02:00
vcoppe fcfaf043c4 fix map localization 2026-05-26 06:28:32 +02:00
vcoppe 0393a330a6 fix loading initial style 2026-05-26 06:18:00 +02:00
vcoppe 2fdb58bc7d switch contour lines based on units 2026-05-25 16:50:28 +02:00
vcoppe c758bda1a9 update tiles endpoint 2026-05-25 15:48:23 +02:00
vcoppe 88e301e2a2 use maptiler satellite 2026-05-25 14:45:03 +02:00
vcoppe 161c664e08 borders 2026-05-25 11:26:49 +02:00
vcoppe a0408ec798 revert rivers 2026-05-25 11:00:55 +02:00
vcoppe 480d5586b9 inverse font color and halo 2026-05-25 10:58:23 +02:00
vcoppe 7b49018593 remove casings 2026-05-25 10:44:53 +02:00
vcoppe 4b447a9b9d revert some of the changes 2026-05-25 10:40:38 +02:00
vcoppe 443feb2bfa road opacities 2026-05-25 10:29:29 +02:00
vcoppe 8710101a78 remove filled areas 2026-05-25 09:59:54 +02:00
vcoppe 2c20148e64 start satellite style 2026-05-24 13:49:43 +02:00
vcoppe ffc0e84788 slightly bigger paths 2026-05-24 00:23:40 +02:00
vcoppe 2d2004e447 small color change 2026-05-24 00:16:55 +02:00
vcoppe 4a7cfc113d vector terrain 2026-05-24 00:13:26 +02:00
vcoppe f03ad5a0e9 colored track casing 2026-05-24 00:04:09 +02:00
vcoppe 7f5b83f9d8 only use surface for coloring 2026-05-23 20:13:47 +02:00
vcoppe 5a8f93e225 different colors depending on surface 2026-05-23 20:10:21 +02:00
vcoppe 668b0f6b23 clearer path names 2026-05-23 19:59:12 +02:00
vcoppe fc1eb5a408 highlight trails 2026-05-23 19:52:04 +02:00
vcoppe 561c7e22b3 first tweaks 2026-05-23 19:17:37 +02:00
vcoppe ce067d4ff0 add custom layer base from openfreemap (osm liberty) 2026-05-23 19:14:59 +02:00
vcoppe 7361b54255 only apply minify to selection 2026-05-21 20:27:22 +02:00
vcoppe 9e2334ca83 New Crowdin updates (#336)
* New translations en.json (Dutch)

* New translations view.mdx (Dutch)

* New translations en.json (Spanish)

* New translations view.mdx (Spanish)

* New translations view.mdx (Dutch)

* New translations en.json (Chinese Simplified)

* New translations view.mdx (Chinese Simplified)

* New translations map-controls.mdx (Chinese Simplified)

* New translations files-and-stats.mdx (Serbian (Latin))

* New translations edit.mdx (Serbian (Latin))

* New translations elevation.mdx (Serbian (Latin))

* New translations en.json (Serbian (Latin))

* New translations files-and-stats.mdx (Serbian (Latin))

* New translations edit.mdx (Serbian (Latin))

* New translations file.mdx (Serbian (Latin))

* New translations settings.mdx (Serbian (Latin))

* New translations view.mdx (Serbian (Latin))

* New translations clean.mdx (Serbian (Latin))

* New translations extract.mdx (Serbian (Latin))

* New translations merge.mdx (Serbian (Latin))

* New translations poi.mdx (Serbian (Latin))

* New translations routing.mdx (Serbian (Latin))

* New translations scissors.mdx (Serbian (Latin))

* New translations time.mdx (Serbian (Latin))

* New translations elevation.mdx (Serbian (Latin))

* New translations minify.mdx (Serbian (Latin))

* New translations routing.mdx (Serbian (Latin))

* New translations faq.mdx (Serbian (Latin))

* New translations integration.mdx (Serbian (Latin))

* New translations files-and-stats.mdx (Serbian (Latin))

* New translations integration.mdx (Serbian (Latin))

* New translations map-controls.mdx (Serbian (Latin))

* New translations menu.mdx (Serbian (Latin))

* New translations edit.mdx (Serbian (Latin))

* New translations file.mdx (Serbian (Latin))

* New translations view.mdx (Serbian (Latin))

* New translations toolbar.mdx (Serbian (Latin))

* New translations routing.mdx (Serbian (Latin))

* New translations scissors.mdx (Serbian (Latin))

* New translations gpx.mdx (Serbian (Latin))

* New translations integration.mdx (Serbian (Latin))

* New translations en.json (Russian)

* New translations elevation.mdx (Dutch)

[ci skip]

* New translations map-controls.mdx (Dutch)

[ci skip]

* New translations elevation.mdx (Dutch)

[ci skip]

* New translations files-and-stats.mdx (Russian)

[ci skip]

* New translations view.mdx (Russian)

[ci skip]

* New translations clean.mdx (Norwegian)

[ci skip]

* New translations clean.mdx (Norwegian)

[ci skip]

* New translations en.json (Norwegian)

[ci skip]

* New translations poi.mdx (Norwegian)

[ci skip]

* New translations en.json (Indonesian)

[ci skip]

* New translations en.json (Dutch)

[ci skip]
2026-05-21 20:20:49 +02:00
vcoppe 08d1f1d5e4 New Crowdin updates (#334)
* New translations en.json (Basque)

* New translations en.json (Dutch)

* New translations en.json (Catalan)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Belarusian)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Korean)

* New translations en.json (Lithuanian)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Indonesian)

* New translations en.json (Thai)

* New translations en.json (Latvian)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Serbian (Latin))

* New translations view.mdx (Romanian)

* New translations view.mdx (French)

* New translations view.mdx (Spanish)

* New translations view.mdx (Belarusian)

* New translations view.mdx (Catalan)

* New translations view.mdx (Czech)

* New translations view.mdx (Danish)

* New translations view.mdx (German)

* New translations view.mdx (Greek)

* New translations view.mdx (Basque)

* New translations view.mdx (Finnish)

* New translations view.mdx (Hebrew)

* New translations view.mdx (Hungarian)

* New translations view.mdx (Italian)

* New translations view.mdx (Korean)

* New translations view.mdx (Lithuanian)

* New translations view.mdx (Dutch)

* New translations view.mdx (Norwegian)

* New translations view.mdx (Polish)

* New translations view.mdx (Portuguese)

* New translations view.mdx (Russian)

* New translations view.mdx (Swedish)

* New translations view.mdx (Turkish)

* New translations view.mdx (Ukrainian)

* New translations view.mdx (Chinese Simplified)

* New translations view.mdx (Vietnamese)

* New translations view.mdx (Portuguese, Brazilian)

* New translations view.mdx (Indonesian)

* New translations view.mdx (Thai)

* New translations view.mdx (Latvian)

* New translations view.mdx (Chinese Traditional, Hong Kong)

* New translations view.mdx (Serbian (Latin))

* New translations en.json (French)
2026-04-19 19:03:58 +02:00
vcoppe f3bf4f0096 add minimize icon 2026-04-19 18:29:38 +02:00
vcoppe b4094d0a5b slightly resize routing controls 2026-04-19 18:20:01 +02:00
JCarrasco 36122b4ac5 Add fullscreen view mode (#324)
Closes #301
2026-04-19 18:12:02 +02:00
vcoppe dd9aba3adb fine tuning 2026-04-19 16:49:32 +02:00
vcoppe bd40fbae74 fix routing controls on mobile 2026-04-19 16:34:06 +02:00
vcoppe 690cbc49cc avoid querying features when dragging 2026-04-19 16:31:50 +02:00
vcoppe 36b16ddeef catch errors when fetching styles and add fallback one 2026-04-19 14:47:19 +02:00
vcoppe 16b8988fa7 fix layer filtering, must allow unknown intermediary keys 2026-04-17 22:10:30 +02:00
Pablo Ovelleiro Corral 40f97b7c35 Fix: overlays bikerouterGravel, cyclOSMlite, mapterhornHillshade, openRailwayMap cannot be toggled in Layer settings (#329) 2026-04-17 20:07:51 +02:00
vcoppe 54b3113480 New Crowdin updates (#326)
* New translations en.json (Spanish)

* New translations merge.mdx (Spanish)

* New translations elevation.mdx (Spanish)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Spanish)

* New translations integration.mdx (Spanish)

* New translations merge.mdx (Spanish)

* New translations integration.mdx (Spanish)

* New translations map-controls.mdx (Spanish)
2026-04-17 20:00:51 +02:00
vcoppe 7e9140492a fix max zoom 2026-04-09 21:10:45 +02:00
vcoppe 79c0aed54f New Crowdin updates (#323)
* New translations en.json (Basque)

* New translations en.json (Dutch)

* New translations en.json (Catalan)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Belarusian)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Korean)

* New translations en.json (Lithuanian)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Indonesian)

* New translations en.json (Thai)

* New translations en.json (Latvian)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Serbian (Latin))
2026-04-09 20:57:02 +02:00
vcoppe cb5a74de00 add esri satellite 2026-04-09 19:53:53 +02:00
vcoppe 31f25f346a New Crowdin updates (#322)
* New translations en.json (Ukrainian)

* New translations en.json (Ukrainian)

* New translations files-and-stats.mdx (Ukrainian)

* New translations getting-started.mdx (Ukrainian)

* New translations edit.mdx (Ukrainian)

* New translations view.mdx (Ukrainian)

* New translations en.json (Basque)
2026-04-09 19:33:42 +02:00
vcoppe b3a11125a5 adapt temporary anchor layer 2026-04-07 22:19:03 +02:00
vcoppe 71cdc03da5 file specific routing controls layers 2026-04-07 22:15:17 +02:00
vcoppe 694e73a677 reinit shadcn-svelte, fixes #318 2026-04-07 22:01:58 +02:00
127 changed files with 1114 additions and 785 deletions
+18 -15
View File
@@ -1,17 +1,20 @@
{
"$schema": "https://shadcn-svelte.com/schema.json",
"style": "default",
"tailwind": {
"css": "src/app.css",
"baseColor": "slate"
},
"aliases": {
"components": "$lib/components",
"utils": "$lib/utils",
"ui": "$lib/components/ui",
"hooks": "$lib/hooks",
"lib": "$lib"
},
"typescript": true,
"registry": "https://shadcn-svelte.com/registry"
"$schema": "https://shadcn-svelte.com/schema.json",
"tailwind": {
"css": "src/app.css",
"baseColor": "neutral"
},
"aliases": {
"components": "$lib/components",
"utils": "$lib/utils",
"ui": "$lib/components/ui",
"hooks": "$lib/hooks",
"lib": "$lib"
},
"typescript": true,
"registry": "https://shadcn-svelte.com/registry",
"style": "nova",
"iconLibrary": "lucide",
"menuColor": "default",
"menuAccent": "subtle"
}
+70 -10
View File
@@ -14,7 +14,6 @@
"@maplibre/maplibre-gl-geocoder": "^1.9.4",
"chart.js": "^4.5.1",
"chartjs-plugin-zoom": "^2.2.0",
"clsx": "^2.1.1",
"dexie": "^4.0.11",
"file-saver": "^2.0.5",
"gpx": "file:../gpx",
@@ -23,12 +22,12 @@
"mapillary-js": "^4.1.2",
"maplibre-gl": "^5.21.1",
"sanitize-html": "^2.17.0",
"sortablejs": "^1.15.6",
"tailwind-merge": "^3.3.0"
"sortablejs": "^1.15.6"
},
"devDependencies": {
"@fontsource-variable/inter": "^5.2.8",
"@internationalized/date": "^3.12.0",
"@lucide/svelte": "^0.544.0",
"@lucide/svelte": "^1.7.0",
"@sveltejs/adapter-static": "^3.0.8",
"@sveltejs/enhanced-img": "^0.6.0",
"@sveltejs/kit": "^2.21.2",
@@ -45,6 +44,7 @@
"@typescript-eslint/eslint-plugin": "^8.33.1",
"@typescript-eslint/parser": "^8.33.1",
"bits-ui": "^2.17.2",
"clsx": "^2.1.1",
"eslint": "^9.28.0",
"eslint-config-prettier": "^10.1.5",
"eslint-plugin-svelte": "^3.9.1",
@@ -57,15 +57,17 @@
"postcss": "^8.4.47",
"prettier": "^3.5.3",
"prettier-plugin-svelte": "^3.4.0",
"shadcn-svelte": "^1.2.7",
"svelte": "^5.33.18",
"svelte-check": "^4.0.0",
"svelte-dnd-action": "^0.9.65",
"svelte-sonner": "^1.0.5",
"tailwind-variants": "^3.1.1",
"svelte-sonner": "^1.1.0",
"tailwind-merge": "^3.5.0",
"tailwind-variants": "^3.2.2",
"tailwindcss": "^4.1.8",
"tslib": "^2.8.1",
"tsx": "^4.19.1",
"tw-animate-css": "^1.3.4",
"tw-animate-css": "^1.4.0",
"typescript": "^5.8.3",
"vaul-svelte": "^1.0.0-next.7",
"vite": "^6.3.5"
@@ -2567,6 +2569,16 @@
"dev": true,
"license": "MIT"
},
"node_modules/@fontsource-variable/inter": {
"version": "5.2.8",
"resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.2.8.tgz",
"integrity": "sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ==",
"dev": true,
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
}
},
"node_modules/@humanfs/core": {
"version": "0.19.1",
"dev": true,
@@ -3214,9 +3226,9 @@
"license": "MIT"
},
"node_modules/@lucide/svelte": {
"version": "0.544.0",
"resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-0.544.0.tgz",
"integrity": "sha512-9f9O6uxng2pLB01sxNySHduJN3HTl5p0HDu4H26VR51vhZfiMzyOMe9Mhof3XAk4l813eTtl+/DYRvGyoRR+yw==",
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-1.7.0.tgz",
"integrity": "sha512-YytBKOUBGox7yWcykZnYxOkn5WpR5G1qYXLYXV/j1B79SOTTEKzB+s5yF5Rq9l9OkweDStNH2b4yTqfvhEhV8g==",
"dev": true,
"license": "ISC",
"peerDependencies": {
@@ -4726,6 +4738,9 @@
},
"node_modules/clsx": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -4751,6 +4766,16 @@
"dev": true,
"license": "MIT"
},
"node_modules/commander": {
"version": "14.0.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
"integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=20"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -6348,6 +6373,13 @@
"version": "0.2.2",
"license": "MIT"
},
"node_modules/node-fetch-native": {
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
"integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
"dev": true,
"license": "MIT"
},
"node_modules/optionator": {
"version": "0.9.4",
"dev": true,
@@ -6958,6 +6990,25 @@
"version": "1.0.5",
"license": "MIT"
},
"node_modules/shadcn-svelte": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/shadcn-svelte/-/shadcn-svelte-1.2.7.tgz",
"integrity": "sha512-mWuQk4H4gtV+J2wJQ7nEPKNnB/v86AALFryZU0SSM7ChHmJJMZ1kH+qIuxYKrXm9vOOOcSWHRsWzPDB71DnjYA==",
"dev": true,
"license": "MIT",
"dependencies": {
"commander": "^14.0.0",
"node-fetch-native": "^1.6.4",
"postcss": "^8.5.5",
"tailwind-merge": "^3.0.0"
},
"bin": {
"shadcn-svelte": "dist/index.mjs"
},
"peerDependencies": {
"svelte": "^5.0.0"
}
},
"node_modules/sharp": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
@@ -7235,6 +7286,8 @@
},
"node_modules/svelte-sonner": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-1.1.0.tgz",
"integrity": "sha512-3lYM6ZIqWe+p9vwwWHGWP/ZdvHiUtzURsud2quIxivrX4rvpXh6i+geBGn0m3JS6KwW6W8VgbOl3xQMcDuh6gg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7285,6 +7338,9 @@
},
"node_modules/tailwind-merge": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz",
"integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==",
"dev": true,
"license": "MIT",
"funding": {
"type": "github",
@@ -7293,6 +7349,8 @@
},
"node_modules/tailwind-variants": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.2.2.tgz",
"integrity": "sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7392,6 +7450,8 @@
},
"node_modules/tw-animate-css": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz",
"integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==",
"dev": true,
"license": "MIT",
"funding": {
+9 -7
View File
@@ -14,8 +14,9 @@
"format": "prettier --write . --config ../.prettierrc --ignore-path ../.prettierignore --ignore-path ./.gitignore"
},
"devDependencies": {
"@fontsource-variable/inter": "^5.2.8",
"@internationalized/date": "^3.12.0",
"@lucide/svelte": "^0.544.0",
"@lucide/svelte": "^1.7.0",
"@sveltejs/adapter-static": "^3.0.8",
"@sveltejs/enhanced-img": "^0.6.0",
"@sveltejs/kit": "^2.21.2",
@@ -32,6 +33,7 @@
"@typescript-eslint/eslint-plugin": "^8.33.1",
"@typescript-eslint/parser": "^8.33.1",
"bits-ui": "^2.17.2",
"clsx": "^2.1.1",
"eslint": "^9.28.0",
"eslint-config-prettier": "^10.1.5",
"eslint-plugin-svelte": "^3.9.1",
@@ -44,15 +46,17 @@
"postcss": "^8.4.47",
"prettier": "^3.5.3",
"prettier-plugin-svelte": "^3.4.0",
"shadcn-svelte": "^1.2.7",
"svelte": "^5.33.18",
"svelte-check": "^4.0.0",
"svelte-dnd-action": "^0.9.65",
"svelte-sonner": "^1.0.5",
"tailwind-variants": "^3.1.1",
"svelte-sonner": "^1.1.0",
"tailwind-merge": "^3.5.0",
"tailwind-variants": "^3.2.2",
"tailwindcss": "^4.1.8",
"tslib": "^2.8.1",
"tsx": "^4.19.1",
"tw-animate-css": "^1.3.4",
"tw-animate-css": "^1.4.0",
"typescript": "^5.8.3",
"vaul-svelte": "^1.0.0-next.7",
"vite": "^6.3.5"
@@ -65,7 +69,6 @@
"@maplibre/maplibre-gl-geocoder": "^1.9.4",
"chart.js": "^4.5.1",
"chartjs-plugin-zoom": "^2.2.0",
"clsx": "^2.1.1",
"dexie": "^4.0.11",
"file-saver": "^2.0.5",
"gpx": "file:../gpx",
@@ -74,7 +77,6 @@
"mapillary-js": "^4.1.2",
"maplibre-gl": "^5.21.1",
"sanitize-html": "^2.17.0",
"sortablejs": "^1.15.6",
"tailwind-merge": "^3.3.0"
"sortablejs": "^1.15.6"
}
}
+91 -53
View File
@@ -1,76 +1,93 @@
@import 'tailwindcss';
@import 'tw-animate-css';
@import "shadcn-svelte/tailwind.css";
@import "@fontsource-variable/inter";
@custom-variant dark (&:is(.dark *));
:root {
--background: hsl(0 0% 100%) /* <- Wrap in HSL */;
--foreground: hsl(240 10% 3.9%);
--muted: hsl(240 4.8% 95.9%);
--muted-foreground: hsl(240 3.8% 46.1%);
--popover: hsl(0 0% 100%);
--popover-foreground: hsl(240 10% 3.9%);
--card: hsl(0 0% 100%);
--card-foreground: hsl(240 10% 3.9%);
--border: hsl(240 5.9% 90%);
--input: hsl(240 5.9% 90%);
--primary: hsl(240 5.9% 10%);
--primary-foreground: hsl(0 0% 98%);
--secondary: hsl(240 4.8% 95.9%);
--secondary-foreground: hsl(240 5.9% 10%);
--accent: hsl(240 4.8% 95.9%);
--accent-foreground: hsl(240 5.9% 10%);
--destructive: hsl(0 72.2% 50.6%);
--background: oklch(1 0 0);
--foreground: oklch(0.145 0 0);
--muted: oklch(0.97 0 0);
--muted-foreground: oklch(0.556 0 0);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0 0);
--card: oklch(1 0 0);
--card-foreground: oklch(0.145 0 0);
--border: oklch(0.922 0 0);
--input: oklch(0.922 0 0);
--primary: oklch(0.205 0 0);
--primary-foreground: oklch(0.985 0 0);
--secondary: oklch(0.97 0 0);
--secondary-foreground: oklch(0.205 0 0);
--accent: oklch(0.97 0 0);
--accent-foreground: oklch(0.205 0 0);
--destructive: oklch(0.577 0.245 27.325);
--destructive-foreground: hsl(0 0% 98%);
--ring: hsl(240 10% 3.9%);
--sidebar: hsl(0 0% 98%);
--sidebar-foreground: hsl(240 5.3% 26.1%);
--sidebar-primary: hsl(240 5.9% 10%);
--sidebar-primary-foreground: hsl(0 0% 98%);
--sidebar-accent: hsl(240 4.8% 95.9%);
--sidebar-accent-foreground: hsl(240 5.9% 10%);
--sidebar-border: hsl(220 13% 91%);
--sidebar-ring: hsl(217.2 91.2% 59.8%);
--ring: oklch(0.708 0 0);
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0 0);
--sidebar-primary: oklch(0.205 0 0);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.97 0 0);
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
--support: rgb(220 15 130);
--link: rgb(0 110 180);
--selection: hsl(240 4.8% 93%);
--radius: 0.5rem;
--chart-1: oklch(0.87 0 0);
--chart-2: oklch(0.556 0 0);
--chart-3: oklch(0.439 0 0);
--chart-4: oklch(0.371 0 0);
--chart-5: oklch(0.269 0 0);
}
.dark {
--background: hsl(240 10% 3.9%);
--foreground: hsl(0 0% 98%);
--muted: hsl(240 3.7% 15.9%);
--muted-foreground: hsl(240 5% 64.9%);
--popover: hsl(240 10% 3.9%);
--popover-foreground: hsl(0 0% 98%);
--card: hsl(240 10% 3.9%);
--card-foreground: hsl(0 0% 98%);
--border: hsl(240 3.7% 15.9%);
--input: hsl(240 3.7% 15.9%);
--primary: hsl(0 0% 98%);
--primary-foreground: hsl(240 5.9% 10%);
--secondary: hsl(240 3.7% 15.9%);
--secondary-foreground: hsl(0 0% 98%);
--accent: hsl(240 3.7% 15.9%);
--accent-foreground: hsl(0 0% 98%);
--destructive: hsl(0 62.8% 30.6%);
--background: oklch(0.145 0 0);
--foreground: oklch(0.985 0 0);
--muted: oklch(0.269 0 0);
--muted-foreground: oklch(0.708 0 0);
--popover: oklch(0.205 0 0);
--popover-foreground: oklch(0.985 0 0);
--card: oklch(0.205 0 0);
--card-foreground: oklch(0.985 0 0);
--border: oklch(1 0 0 / 10%);
--input: oklch(1 0 0 / 15%);
--primary: oklch(0.922 0 0);
--primary-foreground: oklch(0.205 0 0);
--secondary: oklch(0.269 0 0);
--secondary-foreground: oklch(0.985 0 0);
--accent: oklch(0.269 0 0);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.704 0.191 22.216);
--destructive-foreground: hsl(0 0% 98%);
--ring: hsl(240 4.9% 83.9%);
--sidebar: hsl(240 5.9% 10%);
--sidebar-foreground: hsl(240 4.8% 95.9%);
--sidebar-primary: hsl(224.3 76.3% 48%);
--sidebar-primary-foreground: hsl(0 0% 100%);
--sidebar-accent: hsl(240 3.7% 15.9%);
--sidebar-accent-foreground: hsl(240 4.8% 95.9%);
--sidebar-border: hsl(240 3.7% 15.9%);
--sidebar-ring: hsl(217.2 91.2% 59.8%);
--ring: oklch(0.556 0 0);
--sidebar: oklch(0.205 0 0);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.488 0.243 264.376);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.269 0 0);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.556 0 0);
--support: rgb(255 110 190);
--link: rgb(80 190 255);
--selection: hsl(240 3.7% 22%);
--chart-1: oklch(0.87 0 0);
--chart-2: oklch(0.556 0 0);
--chart-3: oklch(0.439 0 0);
--chart-4: oklch(0.371 0 0);
--chart-5: oklch(0.269 0 0);
}
@theme inline {
@@ -113,14 +130,35 @@
--color-link: var(--link);
--breakpoint-xs: 540px;
--font-sans: 'Inter Variable', sans-serif;
--color-chart-5: var(--chart-5);
--color-chart-4: var(--chart-4);
--color-chart-3: var(--chart-3);
--color-chart-2: var(--chart-2);
--color-chart-1: var(--chart-1);
--radius-2xl: calc(var(--radius) * 1.8);
--radius-3xl: calc(var(--radius) * 2.2);
--radius-4xl: calc(var(--radius) * 2.6);
}
@layer base {
* {
@apply border-border;
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
html {
@apply font-sans;
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 339 KiB

After

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 525 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 710 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 348 KiB

+34 -19
View File
@@ -31,10 +31,30 @@ import bikerouterGravel from './custom/bikerouter-gravel.json';
export const maptilerKeyPlaceHolder = 'MAPTILER_KEY';
export const basemaps: { [key: string]: string | StyleSpecification } = {
maptilerStreets: `https://api.maptiler.com/maps/streets-v4/style.json?key=${maptilerKeyPlaceHolder}`,
maptilerTopo: `https://api.maptiler.com/maps/topo-v4/style.json?key=${maptilerKeyPlaceHolder}`,
maptilerOutdoors: `https://api.maptiler.com/maps/outdoor-v4/style.json?key=${maptilerKeyPlaceHolder}`,
maptilerSatellite: `https://api.maptiler.com/maps/hybrid-v4/style.json?key=${maptilerKeyPlaceHolder}`,
topo: 'https://raw.githubusercontent.com/gpxstudio/styles/refs/heads/main/topo.json',
satellite: 'https://raw.githubusercontent.com/gpxstudio/styles/refs/heads/main/satellite.json',
esriSatellite: {
version: 8,
sources: {
esriSatellite: {
type: 'raster',
tiles: [
'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/WMTS/tile/1.0.0/World_Imagery/default/default028mm/{z}/{y}/{x}.jpg',
],
tileSize: 256,
maxzoom: 19,
attribution:
'© <a href="https://www.esri.com/" target="_blank">Esri</a>, Vantor, Earthstar Geographics, and the GIS User Community',
},
},
layers: [
{
id: 'esriSatellite',
type: 'raster',
source: 'esriSatellite',
},
],
},
openStreetMap: {
version: 8,
sources: {
@@ -777,10 +797,9 @@ export type LayerTreeType = { [key: string]: LayerTreeType | boolean };
export const basemapTree: LayerTreeType = {
basemaps: {
world: {
maptilerStreets: true,
maptilerTopo: true,
maptilerOutdoors: true,
maptilerSatellite: true,
topo: true,
satellite: true,
esriSatellite: true,
openStreetMap: true,
openTopoMap: true,
openHikingMap: true,
@@ -913,7 +932,7 @@ export const overpassTree: LayerTreeType = {
};
// Default basemap used
export const defaultBasemap = 'maptilerStreets';
export const defaultBasemap = 'topo';
// Default overlays used (none)
export const defaultOverlays: LayerTreeType = {
@@ -1002,10 +1021,9 @@ export const defaultOverpassQueries: LayerTreeType = {
export const defaultBasemapTree: LayerTreeType = {
basemaps: {
world: {
maptilerStreets: true,
maptilerTopo: true,
maptilerOutdoors: true,
maptilerSatellite: true,
topo: true,
satellite: true,
esriSatellite: false,
openStreetMap: true,
openTopoMap: true,
openHikingMap: true,
@@ -1463,14 +1481,11 @@ export const overpassQueryData: Record<string, OverpassQueryData> = {
};
export const terrainSources: { [key: string]: RasterDEMSourceSpecification } = {
'maptiler-dem': {
type: 'raster-dem',
url: `https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json?key=${maptilerKeyPlaceHolder}`,
},
mapterhorn: {
type: 'raster-dem',
url: 'https://tiles.mapterhorn.com/tilejson.json',
url: 'https://tiles.gpx.studio/mapterhorn.json',
encoding: 'terrarium',
},
};
export const defaultTerrainSource = 'maptiler-dem';
export const defaultTerrainSource = 'mapterhorn';
+2 -2
View File
@@ -14,12 +14,12 @@
} = $props();
</script>
<div class="text-sm bg-secondary rounded border flex flex-row items-center p-2 {className}">
<div class="text-[13px] bg-secondary rounded border flex flex-row items-center p-2 {className}">
<CircleQuestionMark size="16" class="w-4 mr-2 shrink-0 grow-0" />
<div>
{@render children()}
{#if link}
<a href={link} target="_blank" class="text-sm text-link hover:underline">
<a href={link} target="_blank" class="text-[13px] text-link hover:underline">
{i18n._('menu.more')}
</a>
{/if}
+1 -7
View File
@@ -8,7 +8,7 @@
...others
}: {
iconOnly?: boolean;
company?: 'gpx.studio' | 'maptiler' | 'github' | 'crowdin' | 'facebook' | 'reddit';
company?: 'gpx.studio' | 'github' | 'crowdin' | 'facebook' | 'reddit';
[key: string]: any;
} = $props();
</script>
@@ -19,12 +19,6 @@
alt="Logo of gpx.studio."
{...others}
/>
{:else if company === 'maptiler'}
<img
src="{base}/maptiler-logo{mode.current === 'dark' ? '-dark' : ''}.svg"
alt="Logo of Maptiler."
{...others}
/>
{:else if company === 'github'}
<svg
role="img"
+30 -1
View File
@@ -43,6 +43,8 @@
BookOpenText,
ChartArea,
Maximize,
Maximize2,
Minimize2,
} from '@lucide/svelte';
import { map } from '$lib/components/map/map';
import { editMetadata } from '$lib/components/file-list/metadata/utils.svelte';
@@ -70,7 +72,7 @@
import { copied, selection } from '$lib/logic/selection';
import { allHidden } from '$lib/logic/hidden';
import { boundsManager } from '$lib/logic/bounds';
import { tick } from 'svelte';
import { tick, onMount } from 'svelte';
import { allowedPastes } from '$lib/components/file-list/sortable-file-list';
const {
@@ -105,6 +107,23 @@
}
let layerSettingsOpen = $state(false);
let fullscreen = $state(false);
function toggleFullscreen() {
if (!document.fullscreenElement) {
document.documentElement.requestFullscreen?.();
} else {
document.exitFullscreen?.();
}
}
onMount(() => {
const handler = () => {
fullscreen = document.fullscreenElement !== null;
};
document.addEventListener('fullscreenchange', handler);
return () => document.removeEventListener('fullscreenchange', handler);
});
</script>
<div class="absolute md:top-2 left-0 right-0 z-20 flex flex-row justify-center pointer-events-none">
@@ -377,6 +396,16 @@
{i18n._('menu.toggle_3d')}
<Shortcut key={i18n._('menu.right_click_drag')} />
</Menubar.Item>
<Menubar.Separator />
<Menubar.CheckboxItem checked={fullscreen} onCheckedChange={toggleFullscreen}>
{#if fullscreen}
<Minimize2 size="16" />
{:else}
<Maximize2 size="16" />
{/if}
{i18n._('menu.fullscreen')}
<Shortcut key="F11" />
</Menubar.CheckboxItem>
</Menubar.Content>
</Menubar.Menu>
<Menubar.Menu>
@@ -1,10 +1,10 @@
<script lang="ts">
import maptilerTopoMap from '$lib/assets/img/home/maptiler-topo.png?enhanced';
import waymarkedMap from '$lib/assets/img/home/waymarked.png?enhanced';
import topoMap from '$lib/assets/img/docs/maps/topo.png?enhanced';
import waymarkedMap from '$lib/assets/img/docs/maps/waymarked.png?enhanced';
</script>
<div class="relative h-80 aspect-square rounded-2xl shadow-xl overflow-clip">
<enhanced:img src={maptilerTopoMap} alt="MapTiler Topo map screenshot." class="absolute" />
<enhanced:img src={topoMap} alt="Topo map screenshot." class="absolute" />
<enhanced:img
src={waymarkedMap}
alt="Waymarked Trails map screenshot."
@@ -29,7 +29,7 @@ export const defaultEmbeddingOptions = {
key: '',
files: [],
ids: [],
basemap: 'maptilerStreets',
basemap: 'topo',
elevation: {
show: true,
height: 170,
@@ -125,9 +125,7 @@ export function convertOldEmbeddingOptions(options: URLSearchParams): any {
}
if (options.has('source')) {
let basemap = options.get('source')!;
if (basemap === 'satellite') {
newOptions.basemap = 'maptilerSatellite';
} else if (basemap === 'otm') {
if (basemap === 'otm') {
newOptions.basemap = 'openTopoMap';
} else if (basemap === 'ohm') {
newOptions.basemap = 'openHikingMap';
@@ -142,6 +142,7 @@ export class MapLayerEventManager {
}
private _handleMouseMove(e: maplibregl.MapMouseEvent) {
if (e.originalEvent.buttons > 0) return;
const featuresByLayer = this._getRenderedFeaturesByLayer(e);
Object.keys(this._listeners).forEach((layerId) => {
const features = featuresByLayer[layerId] || [];
+82 -53
View File
@@ -10,7 +10,8 @@ import {
import { getLayers } from '$lib/components/map/layer-control/utils';
import { i18n } from '$lib/i18n.svelte';
const { currentBasemap, currentOverlays, customLayers, opacities, terrainSource } = settings;
const { currentBasemap, currentOverlays, customLayers, opacities, terrainSource, distanceUnits } =
settings;
const emptySource: maplibregl.GeoJSONSourceSpecification = {
type: 'geojson',
@@ -57,15 +58,21 @@ export class StyleManager {
opacities.subscribe(() => this.updateOverlays());
terrainSource.subscribe(() => this.updateTerrain());
customLayers.subscribe(() => this.updateBasemap());
distanceUnits.subscribe(() => {
if (get(currentBasemap) === 'topo') this.updateBasemap();
});
}
updateBasemap() {
const map_ = get(this._map);
if (!map_) return;
this.buildStyle().then((style) => map_.setStyle(style));
let basemap = get(currentBasemap);
this.buildStyle(basemap).then((style) => {
if (get(currentBasemap) === basemap) map_.setStyle(style);
});
}
async buildStyle(): Promise<maplibregl.StyleSpecification> {
async buildStyle(basemap: string): Promise<maplibregl.StyleSpecification> {
const custom = get(customLayers);
const style: maplibregl.StyleSpecification = {
@@ -79,17 +86,31 @@ export class StyleManager {
layers: [],
};
let basemap = get(currentBasemap);
const basemapInfo = basemaps[basemap] ?? custom[basemap]?.value ?? basemaps[defaultBasemap];
const basemapStyle = await this.get(basemapInfo);
let basemapStyle = basemaps.openStreetMap as maplibregl.StyleSpecification;
try {
basemapStyle = await this.get(basemapInfo);
for (const source in basemapStyle.sources) {
const src = basemapStyle.sources[source];
if (
src &&
typeof src === 'object' &&
'url' in src &&
typeof src.url === 'string' &&
src.url.includes(maptilerKeyPlaceHolder)
) {
src.url = src.url.replace(maptilerKeyPlaceHolder, this._maptilerKey);
}
}
} catch (e) {
console.error(e.message);
}
this.merge(style, basemapStyle);
if (this._maptilerKey !== '') {
const terrain = this.getCurrentTerrain();
style.sources[terrain.source] = terrainSources[terrain.source];
style.terrain = terrain.exaggeration > 0 ? terrain : undefined;
}
const terrain = this.getCurrentTerrain();
style.sources[terrain.source] = terrainSources[terrain.source];
style.terrain = terrain.exaggeration > 0 ? terrain : undefined;
style.layers.push(...anchorLayers);
@@ -109,52 +130,58 @@ export class StyleManager {
if (!layers[overlay]) {
if (this._pastOverlays.has(overlay)) {
const overlayInfo = custom[overlay]?.value ?? overlays[overlay];
const overlayStyle = await this.get(overlayInfo);
for (let layer of overlayStyle.layers ?? []) {
if (map_.getLayer(layer.id)) {
map_.removeLayer(layer.id);
try {
const overlayStyle = await this.get(overlayInfo);
for (let layer of overlayStyle.layers ?? []) {
if (map_.getLayer(layer.id)) {
map_.removeLayer(layer.id);
}
}
} catch (e) {
// Should not happen
}
this._pastOverlays.delete(overlay);
}
} else {
const overlayInfo = custom[overlay]?.value ?? overlays[overlay];
const overlayStyle = await this.get(overlayInfo);
const opacity = overlayOpacities[overlay];
try {
const overlayStyle = await this.get(overlayInfo);
const opacity = overlayOpacities[overlay];
for (let sourceId in overlayStyle.sources) {
if (!map_.getSource(sourceId)) {
map_.addSource(sourceId, overlayStyle.sources[sourceId]);
}
}
for (let layer of overlayStyle.layers ?? []) {
if (!map_.getLayer(layer.id)) {
if (opacity !== undefined) {
if (layer.type === 'raster') {
if (!layer.paint) {
layer.paint = {};
}
layer.paint['raster-opacity'] = opacity;
} else if (layer.type === 'hillshade') {
if (!layer.paint) {
layer.paint = {};
}
layer.paint['hillshade-exaggeration'] = opacity / 2;
}
for (let sourceId in overlayStyle.sources) {
if (!map_.getSource(sourceId)) {
map_.addSource(sourceId, overlayStyle.sources[sourceId]);
}
map_.addLayer(layer, ANCHOR_LAYER_KEY.overlays);
}
}
this._pastOverlays.add(overlay);
for (let layer of overlayStyle.layers ?? []) {
if (!map_.getLayer(layer.id)) {
if (opacity !== undefined) {
if (layer.type === 'raster') {
if (!layer.paint) {
layer.paint = {};
}
layer.paint['raster-opacity'] = opacity;
} else if (layer.type === 'hillshade') {
if (!layer.paint) {
layer.paint = {};
}
layer.paint['hillshade-exaggeration'] = opacity / 2;
}
}
map_.addLayer(layer, ANCHOR_LAYER_KEY.overlays);
}
}
this._pastOverlays.add(overlay);
} catch (e) {
console.error(e.message);
}
}
}
} catch (e) {}
}
updateTerrain() {
if (this._maptilerKey === '') return;
const map_ = get(this._map);
if (!map_) return;
@@ -177,10 +204,10 @@ export class StyleManager {
): Promise<maplibregl.StyleSpecification> {
if (typeof styleInfo === 'string') {
let styleUrl = styleInfo as string;
if (styleUrl.includes(maptilerKeyPlaceHolder)) {
styleUrl = styleUrl.replace(maptilerKeyPlaceHolder, this._maptilerKey);
}
const response = await fetch(styleUrl, { cache: 'force-cache' });
if (!response.ok) {
throw new Error(`HTTP error fetching style "${styleInfo}": ${response.status}`);
}
const style = await response.json();
return style;
} else {
@@ -190,17 +217,23 @@ export class StyleManager {
merge(style: maplibregl.StyleSpecification, other: maplibregl.StyleSpecification) {
style.sources = { ...style.sources, ...other.sources };
const units = get(distanceUnits);
for (let layer of other.layers ?? []) {
if ('source' in layer) {
if (layer.source == 'contours_m' && units === 'imperial') continue;
if (layer.source == 'contours_ft' && units !== 'imperial') continue;
}
if (layer.type === 'symbol' && layer.layout && layer.layout['text-field']) {
const textField = layer.layout['text-field'];
if (
Array.isArray(textField) &&
textField.length >= 2 &&
textField[0] === 'coalesce' &&
Array.isArray(textField[1]) &&
textField[1][0] === 'get' &&
typeof textField[1][1] === 'string' &&
textField[1][1].startsWith('name')
textField.length == 4 &&
Array.isArray(textField[3]) &&
textField[3][0] === 'coalesce' &&
Array.isArray(textField[3][1]) &&
textField[3][1][0] === 'get' &&
typeof textField[3][1][1] === 'string' &&
textField[3][1][1].startsWith('name')
) {
layer.layout['text-field'] = [
'coalesce',
@@ -221,10 +254,6 @@ export class StyleManager {
getCurrentTerrain() {
const terrain = get(terrainSource);
const source = terrainSources[terrain];
if (source.url && source.url.includes(maptilerKeyPlaceHolder)) {
source.url = source.url.replace(maptilerKeyPlaceHolder, this._maptilerKey);
}
const map_ = get(this._map);
return {
source: terrain,
@@ -163,6 +163,9 @@ export class ReducedGPXLayerCollection {
reduce() {
let itemsAndPoints = new Map<ListItem, TrackPoint[]>();
this._simplified.forEach(([item, maxPts, points], itemFullId) => {
if (!get(selection).hasAnyParent(item)) {
return;
}
itemsAndPoints.set(
item,
points
@@ -57,8 +57,10 @@ export class RoutingControls {
updateControlsBinded: () => void = this.updateControls.bind(this);
appendAnchorBinded: (e: MapMouseEvent) => void = this.appendAnchor.bind(this);
addIntermediateAnchorBinded: (e: MapMouseEvent) => void = this.addIntermediateAnchor.bind(this);
draggedAnchorIndex: number | null = null;
lastDraggedAnchorEventTime: number = 0;
draggingStartingPosition: maplibregl.Point = new maplibregl.Point(0, 0);
onMouseEnterBinded: () => void = this.onMouseEnter.bind(this);
onMouseLeaveBinded: () => void = this.onMouseLeave.bind(this);
@@ -85,7 +87,7 @@ export class RoutingControls {
this.file = file;
for (let zoom = MIN_ANCHOR_ZOOM; zoom <= MAX_ANCHOR_ZOOM; zoom++) {
this.layers.set(zoom, {
id: `routing-controls-${zoom}`,
id: `routing-controls-${this.fileId}-${zoom}`,
anchors: [],
});
}
@@ -133,6 +135,7 @@ export class RoutingControls {
map_.on('style.load', this.updateControlsBinded);
map_.on('click', this.appendAnchorBinded);
layerEventManager.on('mousemove', this.fileId, this.showTemporaryAnchorBinded);
layerEventManager.on('click', this.fileId, this.addIntermediateAnchorBinded);
this.fileUnsubscribe = this.file.subscribe(this.updateControlsBinded);
}
@@ -237,6 +240,7 @@ export class RoutingControls {
map_?.off('style.load', this.updateControlsBinded);
map_?.off('click', this.appendAnchorBinded);
layerEventManager?.off('mousemove', this.fileId, this.showTemporaryAnchorBinded);
layerEventManager?.off('click', this.fileId, this.addIntermediateAnchorBinded);
map_?.off('mousemove', this.updateTemporaryAnchorBinded);
this.layers.forEach((layer) => {
@@ -521,12 +525,19 @@ export class RoutingControls {
if (get(streetViewEnabled) && get(streetViewSource) === 'google') {
return;
}
if (
this.draggedAnchorIndex !== null ||
Date.now() - this.lastDraggedAnchorEventTime < 100
) {
// Exit if anchor is being dragged
return;
}
if (
e.target.queryRenderedFeatures(e.point, {
layers: [...this.layers.values()].map((layer) => layer.id),
layers: [this.fileId, ...[...this.layers.values()].map((layer) => layer.id)],
}).length
) {
// Clicked on routing control, ignoring
// Clicked on routing control or layer, ignoring
return;
}
this.appendAnchorWithCoordinates({
@@ -598,6 +609,15 @@ export class RoutingControls {
await this.routeBetweenAnchors([lastAnchor, newAnchor], [lastAnchorPoint, newAnchorPoint]);
}
addIntermediateAnchor(e: maplibregl.MapMouseEvent) {
e.preventDefault();
if (this.temporaryAnchor !== null) {
this.turnIntoPermanentAnchor();
return;
}
}
getNeighbouringAnchors(anchor: Anchor): [Anchor | null, Anchor | null] {
let previousAnchor: Anchor | null = null;
let nextAnchor: Anchor | null = null;
@@ -800,7 +820,7 @@ export class RoutingControls {
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
<circle cx="10" cy="10" r="8" fill="white" stroke="black" stroke-width="2" />
</svg>`,
_map.getCanvasContainer().offsetWidth > 1000 ? 50 : 80
_map.getCanvasContainer().offsetWidth > 1000 ? 56 : 80
);
}
@@ -818,8 +838,11 @@ export class RoutingControls {
onClick(e: MapLayerMouseEvent) {
e.preventDefault();
if (this.temporaryAnchor !== null) {
this.turnIntoPermanentAnchor();
if (
this.draggedAnchorIndex !== null ||
Date.now() - this.lastDraggedAnchorEventTime < 100
) {
// Exit if anchor is being dragged
return;
}
@@ -908,6 +931,8 @@ export class RoutingControls {
lat: e.lngLat.lat,
lon: e.lngLat.lng,
});
this.lastDraggedAnchorEventTime = Date.now();
}
onMouseUp(e: MapLayerMouseEvent | MapLayerTouchEvent) {
@@ -946,6 +971,7 @@ export class RoutingControls {
}
this.draggedAnchorIndex = null;
this.lastDraggedAnchorEventTime = Date.now();
}
showTemporaryAnchor(e: MapLayerMouseEvent) {
@@ -1073,7 +1099,9 @@ export class RoutingControls {
if (!this.temporaryAnchor) {
return;
}
let source = get(map)?.getSource('routing-controls-0') as GeoJSONSource | undefined;
let source = get(map)?.getSource(`routing-controls-${this.fileId}-0`) as
| GeoJSONSource
| undefined;
if (source) {
if (this.temporaryAnchor) {
source.updateData({
@@ -1088,7 +1116,9 @@ export class RoutingControls {
return;
}
const map_ = get(map);
let source = map_?.getSource('routing-controls-0') as GeoJSONSource | undefined;
let source = map_?.getSource(`routing-controls-${this.fileId}-0`) as
| GeoJSONSource
| undefined;
if (source) {
if (this.temporaryAnchor) {
source.updateData({
@@ -31,13 +31,13 @@ get along, so we shut typescript up by casting `value` to `never`.
data-slot="slider-track"
data-orientation={orientation}
class={cn(
"h-1.5 bg-muted rounded-full data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1 bg-muted relative grow overflow-hidden data-horizontal:w-full data-vertical:h-full"
"bg-muted rounded-full data-horizontal:h-1.5 data-horizontal:w-full data-vertical:h-full data-vertical:w-1 bg-muted relative grow overflow-hidden data-horizontal:w-full data-vertical:h-full"
)}
>
<SliderPrimitive.Range
data-slot="slider-range"
class={cn(
"h-full bg-black absolute select-none data-horizontal:h-full data-vertical:w-full"
"bg-primary absolute select-none data-horizontal:h-full data-vertical:w-full"
)}
/>
</span>
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
Каб кіраваць арыентацыяй і нахілам карты, вы таксама можаце перацягнуць карту, утрымліваючы <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Opcions de vista
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Entra o surt de la vista de mapa en 3D.
Per controlar l'orientació i inclinació del mapa, pots arrossegar el mapa mentre prems <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Možnosti zobrazení
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Zapnout nebo vypnout 3D zobrazení mapy.
Chcete-li ovládat orientaci a náklon mapy, můžete ji také potáhnout s přidržením klávesy <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Anzeigeoptionen
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Aufrufen oder Beenden der 3D-Kartenansicht.
Um die Ausrichtung und Neigung der Karte zu steuern, können Sie die Karte auch ziehen, während Sie <kbd>die Strg-Taste</kbd> gedrückt halten.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+1 -1
View File
@@ -59,7 +59,7 @@ Only one basemap can be displayed at a time.
<DocsLayers />
<span class="text-sm text-center mt-2">
Hover over the map to show the <a href="https://hiking.waymarkedtrails.org" target="_blank">Waymarked Trails hiking</a> overlay on top of the <a href="https://www.maptiler.com/maps/outdoor-topo/" target="_blank">MapTiler Topo</a> basemap.
Hover over the map to show the <a href="https://hiking.waymarkedtrails.org" target="_blank">Waymarked Trails hiking</a> overlay on top of the topographic basemap.
</span>
</div>
+7 -2
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -46,4 +46,9 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
@@ -18,7 +18,7 @@ This tool allows you to add elevation data to traces and [points of interest](..
<DocsNote>
Elevation data is provided by <a href="https://maptiler.com" target="_blank">MapTiler</a>.
You can learn more about its origin and accuracy in the <a href="https://docs.maptiler.com/guides/map-tiling-hosting/data-hosting/rgb-terrain-by-maptiler/" target="_blank">documentation</a>.
Elevation data is provided by <a href="https://mapterhorn.com" target="_blank">Mapterhorn</a>.
You can learn more about its origin and accuracy in the <a href="https://mapterhorn.com/attribution/" target="_blank">documentation</a>.
</DocsNote>
+2 -2
View File
@@ -13,8 +13,8 @@ Puede usar **gpx.studio** para crear mapas que muestren sus archivos GPX e integ
Todo lo que necesita es:
1. GPX files hosted on your server or on Google Drive, or accessible via a public URL;
2. _Optional:_ a <a href="https://cloud.maptiler.com/auth/widget?next=https://cloud.maptiler.com/maps/" target="_blank">MapTiler key</a> to load MapTiler maps.
1. Archivos GPX alojados en su servidor o en Google Drive, o accesibles a través de una URL pública;
2. _Opcional:_ una <a href="https://cloud.maptiler.com/auth/widget?next=https://cloud.maptiler.com/maps/" target="_blank">Tecla MapTiler</a> para cargar mapas MapTiler.
Luego puede jugar con el configurador de abajo para personalizar su mapa y generar el código HTML correspondiente.
+1 -1
View File
@@ -69,4 +69,4 @@ Pueden activarse en la [configuración de capas del mapa](./menu/settings).
En estos ajustes, también puede administrar la opacidad de las capas superpuestas.
For advanced users, it is possible to add custom basemaps and overlays by providing <a href="https://en.wikipedia.org/wiki/Web_Map_Tile_Service" target="_blank">WMTS</a>, <a href="https://en.wikipedia.org/wiki/Web_Map_Service" target="_blank">WMS</a>, or <a href="https://maplibre.org/maplibre-style-spec/" target="_blank">MapLibre style JSON</a> URLs.
Para los usuarios avanzados, es posible añadir mapas base y superposiciones personalizadas proporcionando <a href="https://en.wikipedia.org/wiki/Web_Map_Tile_Service" target="_blank">WMTS</a>, <a href="https://en.wikipedia.org/wiki/Web_Map_Service" target="_blank">WMS</a> o URLs <a href="https://docs.mapbox.com/help/glossary/style/" target="_blank">JSON estilo Mapbox</a>.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Opciones de vista
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Entra o sale de la vista 3D del mapa.
Para controlar la orientación e inclinación del mapa, puede arrastrarlo mientras mantiene pulsada la tecla <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Pantalla completa
Entrar o salir del modo de pantalla completa.
También puede presionar <kbd>F11</kbd> para alternar, o <kbd>Escape</kbd> para salir.
@@ -10,7 +10,7 @@ title: Desnivel
# <MountainSnow size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
Le permite añadir datos de desnivel a trazas y [puntos de interés](../gpx), o reemplazar los datos existentes.
Esta herramienta permite añadir datos de elevación a los rastros y [puntos de interés](../gpx), o reemplazar los datos existentes.
<div class="flex flex-row justify-center">
<Elevation class="text-foreground p-3 border rounded-md shadow-lg" />
@@ -18,7 +18,7 @@ Le permite añadir datos de desnivel a trazas y [puntos de interés](../gpx), o
<DocsNote>
Elevation data is provided by <a href="https://maptiler.com" target="_blank">MapTiler</a>.
You can learn more about its origin and accuracy in the <a href="https://docs.maptiler.com/guides/map-tiling-hosting/data-hosting/rgb-terrain-by-maptiler/" target="_blank">documentation</a>.
Los datos de notificación son proporcionados por <a href="https://maptiler.com" target="_blank">MapTiler</a>.
Puedes aprender más sobre su origen y precisión en la <a href="https://docs.maptiler.com/guides/map-tiling-hosting/data-hosting/rgb-terrain-by-maptiler/" target="_blank">documentación</a>.
</DocsNote>
+2 -2
View File
@@ -18,8 +18,8 @@ Para usar esta herramienta, necesita [seleccionar](../files-and-stats) múltiple
<DocsNote>
Selected items are merged in the order they appear in the files list.
Reorder items by drag-and-drop if needed.
Los elementos seleccionados se combinan en el orden en que aparecen en la lista de archivos.
Si es necesario, puede reordenar los elementos arrastrando y soltando.
</DocsNote>
+6 -1
View File
@@ -3,7 +3,7 @@ title: Ikusteko aukerak
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Aktibatu edo desaktibatu maparen 3D ikuspegia.
Maparen orientazioa eta okertzea kontrolatzeko, mapa ere arrasta dezakezu <kbd> Ctrl</kbd> sakatzen duzun bitartean.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Options d'affichage
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Entrer ou sortir de la vue 3D de la carte.
Pour contrôler l'orientation et l'inclinaison de la carte, vous pouvez également faire glisser la carte tout en maintenant <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Plein écran
Passer en mode plein écran, ou le quitter.
Vous pouvez également appuyer sur <kbd>F11</kbd> pour activer/désactiver le mode plein écran, ou sur <kbd>Échap</kbd> pour quitter.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Nézet beállításai
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Lépjen be vagy lépjen ki a 3D térképnézetből.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Opzioni di visualizzazione
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Entrare o uscire dalla vista mappa 3D.
Per controllare l'orientamento e l'inclinazione della mappa, puoi anche trascinare la mappa tenendo premuto <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+1 -1
View File
@@ -69,4 +69,4 @@ Ze kunnen worden ingeschakeld in het [map layer settings dialoog](./menu/setting
In deze instellingen kun je ook de transparantie van de lagen beheren.
For advanced users, it is possible to add custom basemaps and overlays by providing <a href="https://en.wikipedia.org/wiki/Web_Map_Tile_Service" target="_blank">WMTS</a>, <a href="https://en.wikipedia.org/wiki/Web_Map_Service" target="_blank">WMS</a>, or <a href="https://maplibre.org/maplibre-style-spec/" target="_blank">MapLibre style JSON</a> URLs.
Voor gevorderde gebruikers is het mogelijk om aangepaste basiskaarten en lagen toe te voegen met <a href="https://en.wikipedia.org/wiki/Web_Map_Tile_Service" target="_blank">WMTS</a>, <a href="https://en.wikipedia.org/wiki/Web_Map_Service" target="_blank">WMS</a>, of <a href="https://maplibre.org/maplibre-style-spec/" target="_blank">MapLibre-stijl JSON</a> URLs.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Bekijk opties
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Voer in of verlaat de 3D-mapweergave.
Om de oriëntatie en kanteling van de kaart te bepalen, kun je ook de kaart slepen terwijl je <kbd>Ctrl</kbd> ingedrukt houdt.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Volledig scherm
Start of stop volledig scherm modus.
Je kunt ook op <kbd>F11</kbd> drukken om te wisselen, of <kbd>Escape</kbd> om af te sluiten.
@@ -18,7 +18,7 @@ Met dit gereedschap kun je hoogtegegevens toevoegen aan sporen en [interessante
<DocsNote>
Elevation data is provided by <a href="https://maptiler.com" target="_blank">MapTiler</a>.
You can learn more about its origin and accuracy in the <a href="https://docs.maptiler.com/guides/map-tiling-hosting/data-hosting/rgb-terrain-by-maptiler/" target="_blank">documentation</a>.
Hoogtegegevens worden verstrekt door <a href="https://maptiler.com" target="_blank">MapTiler</a>.
Je kunt meer leren over de oorsprong en nauwkeurigheid in de <a href="https://docs.maptiler.com/guides/map-tiling-hosting/data-hosting/rgb-terrain-by-maptiler/" target="_blank">documentatie</a>.
</DocsNote>
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+3 -3
View File
@@ -1,5 +1,5 @@
---
title: Clean
title: Rens
---
<script>
@@ -9,9 +9,9 @@ title: Clean
# <SquareDashedMousePointer size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
When the clean tool is selected, dragging the map will create a rectangular selection.
Når rensverktøyet er valgt, markeres et område ved å tegne et rektangel på kartet.
Depending on the options selected in the dialog shown below, clicking the delete button will remove GPS points and/or [points of interest](../gpx) located either inside or outside the selection.
Avhengig av alternativene som er valgt i dialogboksen nedenfor, fjerner slett-knappen GPS-punkter og/eller [interessepunkter POI](../gpx) enten innenfor eller utenfor det merkede området.
<div class="flex flex-row justify-center">
<Clean class="text-foreground p-3 border rounded-md shadow-lg" />
+9 -9
View File
@@ -1,5 +1,5 @@
---
title: Points of interest
title: Interessepunkt
---
<script>
@@ -9,19 +9,19 @@ title: Points of interest
# <MapPin size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
[Points of interest](../gpx) can be added to GPX files to mark locations of interest on the map and display them on your GPS device.
[Interessepunkt](../gpx) kan legges til GPX filer for å markere punkter av interesse for å vises på en GPS-enhet.
### Creating a point of interest
### Opprettelse av interessepunkt
To create a point of interest, fill in the form shown below.
You can choose the location of the point of interest either by clicking on the map or by entering the coordinates manually.
Validate the form when you are done.
Fyll ut skjemaet nedenfor for å opprette et interessepunkt.
Ved å klikke på kartet eller skrive inn koordinatene, kan du angi plassering til interessepunktet.
Bekreft skjemaet når du er ferdig.
<div class="flex flex-row justify-center">
<Waypoint class="text-foreground p-3 border rounded-md shadow-lg" />
</div>
### Editing a point of interest
### Redigering av interessepunkt
The form above can also be used to edit an existing point of interest after selecting it on the map.
If you only need to move the point of interest, you can drag it to the desired location.
Et eksisterende interessepunkt kan også redigeres ved å velge det på kartet og deretter bruke skjemaet over.
Interessepunktet kan flyttes ved å dra det til ønsket plassering.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Akcje menu Widok
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Włącza lub wychodzi z widoku mapy 3D.
Aby kontrolować orientację i pochylenie mapy, możesz również przeciągnąć mapę przytrzymując <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Ver opções
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Entrar ou sair da visualização do mapa 3D.
Para controlar a orientação e a inclinação do mapa, você também pode arrastar o mapa enquanto segura <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+10 -10
View File
@@ -47,11 +47,11 @@ title: Файлы и статистика
Щелкнув правой кнопкой мыши на вкладке файла, вы можете получить доступ к тем же действиям, что и в [меню редактирования](./menu/edit).
### Tree layout
### Древовидное представление
As mentioned in the [view options section](./menu/view), you can switch to a tree layout for the files list.
This layout is ideal for managing a large number of open files, as it organizes them into a vertical list on the right side of the map.
In addition, the file tree view enables you to inspect the [tracks, segments, and points of interest](./gpx) contained inside the files through collapsible sections.
Как указано в разделе [Варианты отображения](./menu/view), вы можете переключаться на древовидное представление для списка файлов.
Эта раскладка идеально подходит для управления большим количеством открытых файлов, так как она упорядочивает их в вертикальный список справа от карты.
Кроме того, древовидное представление файлов позволяет вам исследовать [треки, сегменты и точки интереса](./gpx) содержащиеся в файлах через выпадающие списки.
Вы также можете применять [действия редактирования](./menu/edit) и [инструменты](./toolbar) к внутренним элементам файла.
Кроме того, вы можете перетаскивать внутренние элементы, чтобы изменить их порядок, перемещать их в иерархии или даже в другой файл.
@@ -98,12 +98,12 @@ In addition, the file tree view enables you to inspect the [tracks, segments, an
/>
</div>
### Additional data
### Дополнительная информация
Using the <kbd><ChartNoAxesColumn size="16" class="inline-block" style="margin-bottom: 2px"/></kbd> button at the bottom-right of the elevation profile, you can optionally color the elevation profile by:
С помощью кнопки <kbd><ChartNoAxesColumn size="16" class="inline-block" style="margin-bottom: 2px"/></kbd> справа от профиля высоты можно добавить цветовое выделение профиля на основе:
- **slope** information computed from the elevation data, or
- **surface** or **category** data coming from <a href="https://www.openstreetmap.org/" target="_blank">OpenStreetMap</a>'s <a href="https://wiki.openstreetmap.org/wiki/Key:surface" target="_blank">surface</a> and <a href="https://wiki.openstreetmap.org/wiki/Key:highway" target="_blank">highway</a> tags.
This is only available for files created with **gpx.studio**.
- **угла наклона** информации, вычисленной на основе данных о высоте, или
- **поверхности** или **категории** - данных, полученных из меток <a href="https://wiki.openstreetmap.org/wiki/Key:surface" target="_blank">Поверхность</a> и <a href="https://wiki.openstreetmap.org/wiki/Key:highway" target="_blank">Шоссе</a> карт <a href="https://www.openstreetmap.org/" target="_blank">OpenStreetMap</a>'s.
Данная возможность доступна только для файлов, созданных в **gpx.studio**.
If your selection includes it, you can also visualize: **speed**, **heart rate**, **cadence**, **temperature** and **power** data on the elevation profile.
Если выбрана данная опция, вы также можете добавить визуализацию данных **Скорости**, **Пульса**, **Темпа**, **Температуры** и **Мощности** на профиле высоты.
+7 -2
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -18,7 +18,7 @@ Hide the elevation profile to make room for the map, or show it to inspect the c
### <ListTree size="16" class="inline-block" style="margin-bottom: 2px" /> File tree
Toggle the tree layout for the [file list](../files-and-stats).
This layout is ideal for managing a large number of open files, as it organizes them into a vertical list on the right side of the map.
Эта раскладка идеально подходит для управления большим количеством открытых файлов, так как она упорядочивает их в вертикальный список справа от карты.
In addition, the file tree view enables you to inspect the [tracks, segments, and points of interest](../gpx) contained inside the files through collapsible sections.
### <Map size="16" class="inline-block" style="margin-bottom: 2px" /> Switch to previous basemap
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
Чтобы управлять ориентацией и наклоном карты, вы также можете перетаскивать карту, удерживая <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+15 -15
View File
@@ -1,5 +1,5 @@
---
title: FAQ
title: Česta pitanja
---
<script>
@@ -8,28 +8,28 @@ title: FAQ
# { title }
### Do I need to donate to use the website?
### Da li je potrebno da doniram da bih koristio veb stranicu?
No.
The website is free to use and always will be (as long as it is financially sustainable).
However, donations are appreciated and help keep the website running.
Ne.
Veb-sajt je besplatan za korišćenje i uvek će biti (sve dok je finansijski održiv).
Međutim, donacije su dobrodošle i pomažu u održavanju veb stranice u funkciji.
### Why is this route chosen over that one? _Or_ how can I add something to the map?
### Zašto je ova ruta izabrana umesto one? _Ili_ kako mogu nešto da dodam na mapu?
**gpx.studio** uses data from <a href="https://www.openstreetmap.org/" target="_blank">OpenStreetMap</a>, which is an open and collaborative world map.
This means you can contribute to the map by adding or editing data on OpenStreetMap.
**gpx.studio** koristi podatke iz <a href="https://www.openstreetmap.org/" target="_blank">OpenStreetMap</a>, što je otvorena i kolaborativna mapa sveta.
To znači da možete doprineti mapi dodavanjem ili uređivanjem podataka na OpenStreetMap-u.
If you have never contributed to OpenStreetMap before, here is how you can suggest changes:
Ako nikada ranije niste doprineli OpenStreetMap-u, evo kako možete predložiti izmene:
1. Go to the location where you want to add or edit data on the <a href="https://www.openstreetmap.org/" target="_blank">map</a>.
2. Use the <button>Query features</button> tool on the right to inspect the existing data.
3. Right-click on the location and select <button>Add a note here</button>.
4. Explain what is incorrect or missing in the note and click <button>Add note</button> to submit it.
1. Idite na lokaciju gde želite da dodate ili izmenite podatke na <a href="https://www.openstreetmap.org/" target="_blank">mapi</a>.
2. Koristite alatku <button>Upiti o karakteristikama</button> sa desne strane da biste pregledali postojeće podatke.
3. Kliknite desnim tasterom miša na lokaciju i izaberite <button>Dodaj belešku ovde</button>.
4. Objasnite šta je netačno ili nedostaje u napomeni i kliknite na <button>Dodaj napomenu</button> da biste je poslali.
Someone more experienced with OpenStreetMap will then review your note and make the necessary changes.
Neko ko ima više iskustva sa OpenStreetMap-om će zatim pregledati vašu belešku i napraviti potrebne izmene.
<DocsNote>
More information on how to contribute to OpenStreetMap can be found <a href="https://wiki.openstreetmap.org/wiki/How_to_contribute" target="_blank">here</a>.
Više informacija o tome kako da doprinesete OpenStreetMap-u možete pronaći <a href="https://wiki.openstreetmap.org/wiki/How_to_contribute" target="_blank">ovde</a>.
</DocsNote>
+13 -13
View File
@@ -21,13 +21,13 @@ title: Datoteke i statistike
## Lista datoteka
Jednom kada [otvorite](./menu/file) datoteke, biće prikazane kao kartice na listi datoteka lociranih na dnu mape
Možete im promeniti redosled tako što ćete prevući i pustiti kartice.
Ukoliko je mnogo datoteka otvoreno, možete se kretati kroz njih skrolovanjem.
Jednom kada [otvorite](./menu/file) datoteke, one će biti prikazane kao kartice u listi datoteka koja se nalazi na dnu mape.
Možete ih promeniti tako što ete prevui i ispustiti kartice.
A kada je otvoreno mnogo datoteka, možete se kretati kroz listu kartica da biste se kretali između njih.
<DocsNote>
Pri korišćenju miša, neophodno je držati pritisnuto <kbd>Shift</kbd> da bi se pomeralo horizontalno.
Kada koristite miš, potrebno je da držite <kbd>Shift</kbd> da biste se kretali horizontalno.
</DocsNote>
@@ -47,7 +47,7 @@ Takođe možete se kretati kroz datoteke pomoću tastera sa strelicama na tasta
Desnim klikom na karticu datoteke možete pristupiti istim radnjama kao u [meniju za uređivanje](./menu/edit).
### Izgled drveta
### Raspored stabla
Kao što je pomenuto u [odeljku sa opcijama prikaza](./menu/view), možete da pređete na izgled stabla za listu datoteka.
Ovaj raspored je idealan za upravljanje velikim brojem otvorenih datoteka, jer ih organizuje u vertikalnu listu na desnoj strani mape.
@@ -74,9 +74,9 @@ Veličina profila nadmorske visine može se podesiti prevlačenjem separatora iz
### Interaktivna statistika
Kada pređete mišem preko profila nadmorske visine, opis alata će prikazati statistiku na poziciji kursora.
Kada se kursor zadrži iznad profila elevacije, prikazaće se objašnjenje statistike na poziciji kursora.
Da biste dobili statistiku za određeni deo profila nadmorske visine, možete prevući pravougaonik za izbor na profilu
Da biste dobili statistiku za određeni deo profila visine, možete prevući pravougaonik za selekciju na profilu.
Kliknite na profil da resetujete izbor.
Takođe možete da koristite točkić miša da zumirate i umanjite profil nadmorske visine i da se pomerate levo i desno prevlačenjem profila dok držite taster <kbd>Shift</kbd>.
@@ -98,12 +98,12 @@ Takođe možete da koristite točkić miša da zumirate i umanjite profil nadmo
/>
</div>
### Additional data
### Dodatni podaci
Using the <kbd><ChartNoAxesColumn size="16" class="inline-block" style="margin-bottom: 2px"/></kbd> button at the bottom-right of the elevation profile, you can optionally color the elevation profile by:
Koristeći dugme <kbd><ChartNoAxesColumn size="16" class="inline-block" style="margin-bottom: 2px"/></kbd> u donjem desnom uglu profila visine, možete opciono obojiti profil visine pomoću:
- **slope** information computed from the elevation data, or
- **surface** or **category** data coming from <a href="https://www.openstreetmap.org/" target="_blank">OpenStreetMap</a>'s <a href="https://wiki.openstreetmap.org/wiki/Key:surface" target="_blank">surface</a> and <a href="https://wiki.openstreetmap.org/wiki/Key:highway" target="_blank">highway</a> tags.
This is only available for files created with **gpx.studio**.
- informacije o **nagibu** izračunate iz podataka o nadmorskoj visini, ili
- Podaci o \*površini** ili **kategoriji** koji dolaze iz oznaka <a href="https://www.openstreetmap.org/" target="_blank">OpenStreetMap</a>'s <a href="https://wiki.openstreetmap.org/wiki/Key:surface" target="_blank">površina</a> and <a href="https://wiki.openstreetmap.org/wiki/Key:highway" target="_blank">autoput</a> oznake.
Ovo je dostupno samo za datoteke kreirane pomoću **gpx.studio\*\*.
If your selection includes it, you can also visualize: **speed**, **heart rate**, **cadence**, **temperature** and **power** data on the elevation profile.
Ako vaš izbor to uključuje, možete vizualizovati i: **brzinu**, **puls**, **kadencu**, **temperaturu** i **snagu** na profilu nadmorske visine.
+2 -2
View File
@@ -8,12 +8,12 @@ title: GPX format datoteke
# { title }
<a href="https://www.topografix.com/gpx.asp" target="_blank">Format GPX datoteke</a> je otvoreni standard za razmenu GPS podataka između aplikacija i GPS uređaja
<a href="https://www.topografix.com/gpx.asp" target="_blank">GPX format datoteke</a> je otvoreni standard za razmenu GPS podataka između aplikacija i GPS uređaja.
U suštini se sastoji od niza GPS tačaka koje kodiraju jedan ili više GPS trekova, i, opciono, neke interesantne tačke.
GPX datoteke mogu da sadrže i metapodatke, od kojih su polja **naziv** i **opis** najkorisnija za korisnike.
### <Waypoints size="16" class="inline-block" style="margin-bottom: 2px" /> Putanje, segmenti i GPS tačke
### <Waypoints size="16" class="inline-block" style="margin-bottom: 2px" /> Praćenja, segmenti i GPS tačke
Kao što je gore pomenuto, GPX datoteka može sadržati više GPS trekova.
Oni su organizovani u hijerarhijsku strukturu, sa putanjama na najvišem nivou.
+7 -7
View File
@@ -1,5 +1,5 @@
---
title: Integration
title: Integracija
---
<script>
@@ -9,18 +9,18 @@ title: Integration
# { title }
You can use **gpx.studio** to create maps showing your GPX files and embed them in your website.
Možete koristiti **gpx.studio** da biste kreirali mape koje prikazuju vaše GPX datoteke i ugradili ih na svoju veb stranicu.
All you need is:
Sve što vam je potrebno je:
1. GPX files hosted on your server or on Google Drive, or accessible via a public URL;
2. _Optional:_ a <a href="https://cloud.maptiler.com/auth/widget?next=https://cloud.maptiler.com/maps/" target="_blank">MapTiler key</a> to load MapTiler maps.
1. GPX datoteke smeštene na vašem serveru ili na Gugl disku, ili dostupne preko javne URL adrese;
2. _Opciono:_ <a href="https://cloud.maptiler.com/auth/widget?next=https://cloud.maptiler.com/maps/" target="_blank">MapTiler ključ</a> za učitavanje MapTiler mapa.
You can then play with the configurator below to customize your map and generate the corresponding HTML code.
Zatim možete eksperimentisati sa konfiguratorom ispod da biste prilagodili svoju mapu i generisali odgovarajući HTML kod.
<DocsNote type="warning">
You will need to set up <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" target="_blank">Cross-Origin Resource Sharing (CORS)</a> headers on your server to allow <b>gpx.studio</b> to load your GPX files.
Moraćete da podesite zaglavlja <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" target="_blank">Cross-Origin Resource Sharing (CORS)</a> na vašem serveru kako biste omogućili da <b>gpx.studio</b> učita vaše GPX datoteke.
</DocsNote>
+26 -26
View File
@@ -10,63 +10,63 @@ title: Kontrole mape
# { title }
The map controls are located on the right side of the interface.
Kontrole mape se nalaze na desnoj strani interfejsa.
Ove kontrole vam omogućavaju da se krećete po mapi, uvećavate i umanjujete i prelazite između različitih stilova mape.
### <Diff size="16" class="inline-block" style="margin-bottom: 2px" /> Map navigation
### <Diff size="16" class="inline-block" style="margin-bottom: 2px" /> Navigacija mape
The controls at the top allow you to zoom in <Plus size="16" class="inline-block" style="margin-bottom: 2px" /> and out <Minus size="16" class="inline-block" style="margin-bottom: 2px" />, and to change the orientation and tilt of the map <Compass size="16" class="inline-block" style="margin-bottom: 2px" />.
Kontrole na vrhu vam omogućavaju da uvećate <Plus size="16" class="inline-block" style="margin-bottom: 2px" /> i smanjite <Minus size="16" class="inline-block" style="margin-bottom: 2px" />, i da promenite orijentaciju i nagib mape <Compass size="16" class="inline-block" style="margin-bottom: 2px" />.
<DocsNote>
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
Da biste kontrolisali orijentaciju i nagib mape, možete je prevlačiti dok držite pritisnut taster <kbd>Ctrl</kbd>.
</DocsNote>
### <Search size="16" class="inline-block" style="margin-bottom: 2px" /> Search bar
### <Search size="16" class="inline-block" style="margin-bottom: 2px" /> Traka za pretragu
You can use the search bar to look for an address and navigate to it on the map.
Možete koristiti traku za pretragu da biste potražili adresu i došli do nje na mapi.
### <LocateFixed size="16" class="inline-block" style="margin-bottom: 2px" /> Locate button
### <LocateFixed size="16" class="inline-block" style="margin-bottom: 2px" /> Dugme za lociranje
The locate button centers the map on your current location.
Dugme za lociranje centrira mapu na vašu trenutnu lokaciju.
<DocsNote>
This only works if you have allowed your browser and <b>gpx.studio</b> to access your location.
Ovo funkcioniše samo ako ste dozvolili svom pregledaču i <b>gpx.studio</b> da pristupe vašoj lokaciji.
</DocsNote>
### <PersonStanding size="16" class="inline-block" style="margin-bottom: 2px" /> Street view
### <PersonStanding size="16" class="inline-block" style="margin-bottom: 2px" /> Prikaz ulice
This button can be used to enable street view mode on the map.
Depending on the street view source chosen in the [settings](./menu/settings), street view imagery can be accessed differently.
Ovo dugme se može koristiti za omogućavanje režima prikaza ulice na mapi.
U zavisnosti od izvora prikaza ulice izabranog u [podešavanjima](./menu/settings), slikama prikaza ulice može se pristupiti na različite načine.
- <a href="https://www.mapillary.com/" target="_blank">Mapillary</a>: the street view coverage will appear as green lines on the map. When zoomed in enough, green dots will show the exact locations where street view imagery is available. Hovering over a green dot will show the street view image at that location.
- <a href="https://www.google.com/streetview/" target="_blank">Google Street View</a>: click on the map to open a new tab with the street view imagery at that location.
- <a href="https://www.mapillary.com/" target="_blank">Mapillary</a>: pokrivenost prikazom ulica će se pojaviti kao zelene linije na mapi. Kada se dovoljno uveća, zelene tačke će pokazati tačne lokacije gde su dostupne slike prikaza ulice. Prelazak pokazivača miša iznad zelene tačke prikazaće sliku ulice na toj lokaciji.
- <a href="https://www.google.com/streetview/" target="_blank">Google Street View</a>: kliknite na mapu da biste otvorili novu karticu sa slikama Street View-a na toj lokaciji.
### <Layers size="16" class="inline-block" style="margin-bottom: 2px" /> Map layers
### <Layers size="16" class="inline-block" style="margin-bottom: 2px" /> Slojevi mape
The map layers button allows you to switch between different basemaps, and toggle map overlays and categories of points of interest.
Dugme za slojeve mape vam omogućava da prelazite između različitih osnovnih mapa i da menjate preklapanja mape i kategorije tačaka od interesa.
- **Basemaps** are background maps that present the main geographic features of the world.
Depending on their purpose, basemaps have different styles and levels of detail.
Only one basemap can be displayed at a time.
- **Overlays** are additional layers that can be displayed on top of the basemap to provide complementary information.
- **Points of interest** can be added to the map to show different categories of places, such as shops, restaurants, or accommodations.
- **Osnovne karte** su pozadinske karte koje prikazuju glavne geografske karakteristike sveta.
U zavisnosti od njihove namene, osnovne mape imaju različite stilove i nivoe detalja.
Samo jedna osnovna mapa može biti prikazana istovremeno.
- **Slojevi** su dodatni slojevi koji se mogu prikazati preko osnovne mape radi pružanja dopunskih informacija.
- **Zanimljivosti** mogu se dodati na mapu kako bi se prikazale različite kategorije mesta, kao što su prodavnice, restorani ili smeštaj.
<div class="flex flex-col items-center">
<DocsLayers />
<span class="text-sm text-center mt-2">
Hover over the map to show the <a href="https://hiking.waymarkedtrails.org" target="_blank">Waymarked Trails hiking</a> overlay on top of the <a href="https://www.maptiler.com/maps/outdoor-topo/" target="_blank">MapTiler Topo</a> basemap.
Postavite pokazivač miša iznad mape da biste prikazali preklapanje <a href="https://hiking.waymarkedtrails.org" target="_blank">Planinarske staze sa obeleženim putevima</a> preko osnovne mape <a href="https://www.maptiler.com/maps/outdoor-topo/" target="_blank">MapTiler Topo</a>.
</span>
</div>
A large collection of global and local basemaps and overlays is available in **gpx.studio**, as well as a selection of point-of-interest categories.
They can be enabled in the [map layer settings dialog](./menu/settings).
Velika kolekcija globalnih i lokalnih osnovnih mapa i slojeva dostupna je u **gpx.studio**, kao i izbor kategorija tačaka interesa.
Mogu se omogućiti u [dijalogu za podešavanja sloja mape](./menu/settings).
In these settings, you can also manage the opacity of the overlays.
U ovim podešavanjima možete takođe upravljati neprozirnošću preklapanja.
For advanced users, it is possible to add custom basemaps and overlays by providing <a href="https://en.wikipedia.org/wiki/Web_Map_Tile_Service" target="_blank">WMTS</a>, <a href="https://en.wikipedia.org/wiki/Web_Map_Service" target="_blank">WMS</a>, or <a href="https://maplibre.org/maplibre-style-spec/" target="_blank">MapLibre style JSON</a> URLs.
Za napredne korisnike, moguće je dodati prilagođene osnovne mape i preklapanja pružanjem <a href="https://en.wikipedia.org/wiki/Web_Map_Tile_Service" target="_blank">WMTS</a>, <a href="https://en.wikipedia.org/wiki/Web_Map_Service" target="_blank">WMS</a> ili <a href="https://maplibre.org/maplibre-style-spec/" target="_blank">JSON stila MapLibre</a> URL-ova.
+2 -2
View File
@@ -8,10 +8,10 @@ title: Meni
# { title }
The main menu, located at the top of the interface, provides access to actions, options, and settings divided into several categories, explained separately in the following sections.
Glavni meni, koji se nalazi na vrhu interfejsa, pruža pristup radnjama, opcijama i podešavanjima podeljenim u nekoliko kategorija, objašnjenih odvojeno u sledećim odeljcima.
<DocsNote>
Most of the menu actions can also be performed using the keyboard shortcuts displayed in the menu.
Većina radnji u meniju može se izvršiti i pomoću prečica na tastaturi prikazanih u meniju.
</DocsNote>
+35 -35
View File
@@ -9,88 +9,88 @@ title: Akcije uređivanja
# { title }
Unlike the file actions, the edit actions can potentially modify the content of the currently selected files.
Moreover, when the tree layout of the files list is enabled (see [Files and statistics](../files-and-stats)), they can also be applied to [tracks, segments, and points of interest](../gpx).
Therefore, we will refer to the elements that can be modified by these actions as _file items_.
Note that except for the undo and redo actions, the edit actions are also accessible through the context menu (right-click) of the file items.
Za razliku od radnji sa datotekama, radnje uređivanja mogu potencijalno izmeniti sadržaj trenutno izabranih datoteka.
Štaviše, kada je omogućen raspored stabla liste datoteka (pogledajte [Datoteke i statistika](../files-and-stats)), one se takođe mogu primeniti na [trase, segmente i tačke interesa](../gpx).
Stoga ćemo elemente koji se mogu izmeniti ovim radnjama nazivati _stavkama datoteke_.
Imajte na umu da su, osim radnji poništavanja i ponavljanja, radnje uređivanja takođe dostupne preko kontekstnog menija (desni klik) na stavke datoteke.
### <Undo2 size="16" class="inline-block" style="margin-bottom: 2px" /><Redo2 size="16" class="inline-block" style="margin-bottom: 2px" /> Undo and redo
### <Undo2 size="16" class="inline-block" style="margin-bottom: 2px" /><Redo2 size="16" class="inline-block" style="margin-bottom: 2px" /> Poništi i ponovi
Using these buttons, you can undo or redo the last actions you performed.
This applies to all actions of the interface but not to view options, application settings, or map navigation.
Pomoću ovih dugmadi možete poništiti ili ponoviti poslednje izvršene radnje.
Ovo se odnosi na sve radnje interfejsa, ali ne i na opcije prikaza, podešavanja aplikacije ili navigaciju mapom.
### <Info size="16" class="inline-block" style="margin-bottom: 2px" /> Info...
Open the information dialog of the currently selected file item, where you can see and edit its name and description.
Otvorite dijalog sa informacijama o trenutno izabranoj datoteci, gde možete videti i izmeniti njeno ime i opis.
### <PaintBucket size="16" class="inline-block" style="margin-bottom: 2px" /> Appearance...
### <PaintBucket size="16" class="inline-block" style="margin-bottom: 2px" /> Izgled...
Open the appearance dialog, where you can change the color, opacity, and width of the selected file items on the map.
Otvorite dijalog izgleda, gde možete promeniti boju, neprozirnost i širinu izabranih stavki datoteke na mapi.
### <EyeOff size="16" class="inline-block" style="margin-bottom: 2px" /> Hide/unhide
### <EyeOff size="16" class="inline-block" style="margin-bottom: 2px" /> Sakrij/prikaži
Toggle the visibility of the selected file items on the map.
Promeni vidljivost izabranih stavki datoteke na mapi.
### <Plus size="16" class="inline-block" style="margin-bottom: 2px" /> New track
### <Plus size="16" klas="inline-blok" stil="margin-bottom: 2pk" /> Nova traka
Create a new track in the selected file.
Napravite novi segment u izabranoj numeri.
<DocsNote>
This action is only available when the tree layout of the files list is enabled.
Additionally, the selection must be a single file.
Ova radnja je dostupna samo kada je omogućen raspored stabla liste datoteka.
Pored toga, izbor mora biti jedna datoteka.
</DocsNote>
### <Plus size="16" class="inline-block" style="margin-bottom: 2px" /> New segment
### <Plus size="16" class="inline-block" style="margin-bottom: 2px" /> Novi segment
Create a new segment in the selected track.
Napravite novi segment u izabranoj numeri.
<DocsNote>
This action is only available when the tree layout of the files list is enabled.
Additionally, the selection must be a single track.
Ova radnja je dostupna samo kada je omogućen raspored stabla liste datoteka.
Pored toga, izbor mora biti jedna datoteka.
</DocsNote>
### <FileStack size="16" class="inline-block" style="margin-bottom: 2px" /> Select all
### <FileStack size="16" class="inline-block" style="margin-bottom: 2px" /> Izaberi sve
Add all file items in the current hierarchy level to the selection.
Dodaj sve stavke datoteke na trenutnom nivou hijerarhije u selekciju.
### <Maximize size="16" class="inline-block" style="margin-bottom: 2px" /> Center
### <Maximize size="16" class="inline-block" style="margin-bottom: 2px" /> Centar
Center the map on the selected file items.
Centrirajte mapu na izabrane stavke datoteke.
### <ClipboardCopy size="16" class="inline-block" style="margin-bottom: 2px" /> Copy
### <ClipboardCopy size="16" class="inline-block" style="margin-bottom: 2px" /> Kopiraj
Copy the selected file items to the clipboard.
Kopirajte izabrane stavke datoteke u međuspremnik.
<DocsNote>
This action is only available when the tree layout of the files list is enabled.
Ova radnja je dostupna samo kada je omogućen raspored stabla liste datoteka.
</DocsNote>
### <Scissors size="16" class="inline-block" style="margin-bottom: 2px" /> Cut
### <Scissors size="16" class="inline-block" style="margin-bottom: 2px" /> Iseci
Cut the selected file items to the clipboard.
Iseci izabrane stavke datoteke u međuspremnik.
<DocsNote>
This action is only available when the tree layout of the files list is enabled.
Ova radnja je dostupna samo kada je omogućen raspored stabla liste datoteka.
</DocsNote>
### <ClipboardPaste size="16" class="inline-block" style="margin-bottom: 2px" /> Paste
### <ClipboardPaste size="16" class="inline-block" style="margin-bottom: 2px" /> Nalepi
Paste the file items from the clipboard to the current hierarchy level if they are compatible with it.
Nalepite stavke datoteke iz međuspremnika na trenutni nivo hijerarhije ako su kompatibilne sa njim.
<DocsNote>
This action is only available when the tree layout of the files list is enabled.
Ova radnja je dostupna samo kada je omogućen raspored stabla liste datoteka.
</DocsNote>
### <Trash2 size="16" class="inline-block" style="margin-bottom: 2px" /> Delete
### <Trash2 size="16" class="inline-block" style="margin-bottom: 2px" /> Obriši
Delete the selected file items.
Obrišite izabrane stavke datoteke.
+18 -18
View File
@@ -1,5 +1,5 @@
---
title: File actions
title: Radnje sa datotekama
---
<script lang="ts">
@@ -9,44 +9,44 @@ title: File actions
# { title }
The file actions menu contains a set of pretty self-explanatory file operations.
Meni sa akcijama za datoteke sadrži skup prilično samorazumljivih operacija sa datotekama.
### <Plus size="16" class="inline-block" style="margin-bottom: 2px" /> New
### <Plus size="16" class="inline-block" style="margin-bottom: 2px" /> Novo
Create a new empty file.
Napravite novu praznu datoteku.
### <FolderOpen size="16" class="inline-block" style="margin-bottom: 2px" /> Open...
### <FolderOpen size="16" class="inline-block" style="margin-bottom: 2px" /> Otvoreno...
Open files from your computer.
Otvorite datoteke sa računara.
<DocsNote>
You can also drag and drop files directly from your file system into the window.
Takođe možete prevući i ispustiti datoteke direktno iz sistema datoteka u prozor.
</DocsNote>
### <Copy size="16" class="inline-block" style="margin-bottom: 2px" /> Duplicate
### <Copy size="16" class="inline-block" style="margin-bottom: 2px" /> Dupliraj
Create a copy of the currently selected files.
Napravite kopiju trenutno izabranih datoteka.
### <FileX size="16" class="inline-block" style="margin-bottom: 2px" /> Delete
### <FileX size="16" class="inline-block" style="margin-bottom: 2px" /> Obriši
Delete the currently selected files.
Obrišite trenutno izabrane datoteke.
### <FileX size="16" class="inline-block" style="margin-bottom: 2px" /> Delete all
### <FileX size="16" class="inline-block" style="margin-bottom: 2px" /> Obriši sve
Delete all files.
Obrišite sve datoteke.
### <Download size="16" class="inline-block" style="margin-bottom: 2px" /> Export...
### <Download size="16" class="inline-block" style="margin-bottom: 2px" /> Izvoz...
Open the export dialog to save the currently selected files to your computer.
Otvorite dijalog za izvoz da biste sačuvali trenutno izabrane datoteke na računar.
### <Download size="16" class="inline-block" style="margin-bottom: 2px" /> Export all...
### <Download size="16" class="inline-block" style="margin-bottom: 2px" /> Izvezi sve...
Open the export dialog to save all files to your computer.
Otvorite dijalog za izvoz da biste sačuvali sve datoteke na računar.
<DocsNote type="warning">
If your download does not start after clicking the download button, please check your browser settings to allow downloads from <b>gpx.studio</b>.
Ako preuzimanje ne počne nakon što kliknete na dugme za preuzimanje, proverite podešavanja pregledača da biste dozvolili preuzimanja sa <b>gpx.studio</b>.
</DocsNote>
+22 -22
View File
@@ -1,5 +1,5 @@
---
title: Settings
title: Podešavanja
---
<script lang="ts">
@@ -9,42 +9,42 @@ title: Settings
# { title }
### <Ruler size="16" class="inline-block" style="margin-bottom: 2px" /> Distance units
### <Ruler size="16" class="inline-block" style="margin-bottom: 2px" /> Jedinica razdaljine
Change the units used to display distances in the interface.
Promenite jedinice koje se koriste za prikazivanje udaljenosti u interfejsu.
### <Zap size="16" class="inline-block" style="margin-bottom: 2px" /> Velocity units
### <Zap size="16" class="inline-block" style="margin-bottom: 2px" /> Jedinice brzine
Change the units used to display velocities in the interface.
You can choose between distance per hour or minutes per distance, which can be more suitable for running activities.
Promenite jedinice koje se koriste za prikazivanje udaljenosti u interfejsu.
Možete birati između udaljenosti po satu ili minuta po udaljenosti, što može biti pogodnije za trčanje.
### <Thermometer size="16" class="inline-block" style="margin-bottom: 2px" /> Temperature units
### <Thermometer size="16" class="inline-block" style="margin-bottom: 2px" /> Jedinice temperature
Change the units used to display temperatures in the interface.
Promenite jedinice koje se koriste za prikazivanje udaljenosti u interfejsu.
### <Languages size="16" class="inline-block" style="margin-bottom: 2px" /> Language
### <Languages size="16" class="inline-block" style="margin-bottom: 2px" /> Jezik
Change the language used in the interface.
Promenite jezik koji se koristi u interfejsu.
<DocsNote>
You can contribute by adding or improving translations on our <a href="https://crowdin.com/project/gpxstudio" target="_blank">Crowdin project</a>.
If you would like to start translating into a new language, please <a href="#contact">get in touch</a>.
Any help is greatly appreciated!
Možete doprineti dodavanjem ili poboljšanjem prevoda na našem <a href="https://crowdin.com/project/gpxstudio" target="_blank">Crowdin project</a>.
Ako želite da počnete sa prevođenjem na novi jezik, molimo vas <a href="#contact">get in touch</a>.
Bilo kakva pomoć je veoma cenjena!
</DocsNote>
### <Sun size="16" class="inline-block" style="margin-bottom: 2px" /> Theme
### <Sun size="16" class="inline-block" style="margin-bottom: 2px" /> Tema
Change the theme used in the interface.
Promenite temu koja se koristi u interfejsu.
### <PersonStanding size="16" class="inline-block" style="margin-bottom: 2px" /> Street view source
### I<PersonStanding size="16" class="inline-block" style="margin-bottom: 2px" /> Izvor prikaza ulice
Change the source used for the [street view control](../map-controls).
The default one is <a href="https://www.mapillary.com" target="_blank">Mapillary</a>, but you can also use <a href="https://www.google.com/streetview/" target="_blank">Google Street View</a>.
Learn more about how to use the street view control in the [map controls section](../map-controls).
Promenite izvor koji se koristi za [kontrolu prikaza ulice](../map-controls).
Podrazumevani je <a href="https://www.mapillary.com" target="_blank">Mapillary</a>, ali možete koristiti i <a href="https://www.google.com/streetview/" target="_blank">Google Street View</a>.
Saznajte više o tome kako da koristite kontrolu za prikaz ulice u [odeljku kontrole mape](../map-controls).
### <Layers size="16" class="inline-block" style="margin-bottom: 2px" /> Map layers...
### <Layers size="16" class="inline-block" style="margin-bottom: 2px" /> Slojevi mape...
Open a dialog where you can enable or disable map layers, add custom ones, change the opacity of overlays, and more.
More information about map layers can be found in the [map controls section](../map-controls).
Otvorite dijalog u kojem možete omogućiti ili onemogućiti slojeve mape, dodati prilagođene, promeniti neprozirnost preklapanja i još mnogo toga.
Više informacija o slojevima mape možete pronaći u odeljku [kontrole mape](../map-controls).
+25 -20
View File
@@ -1,49 +1,54 @@
---
title: View options
title: Opcije prikaza
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
# { title }
This menu provides options to rearrange the interface and the map view.
Ovaj meni pruža opcije za promenu rasporeda interfejsa i prikaza mape.
### <ChartArea size="16" class="inline-block" style="margin-bottom: 2px" /> Elevation profile
### <ChartArea size="16" class="inline-block" style="margin-bottom: 2px" /> Visinski profil
Hide the elevation profile to make room for the map, or show it to inspect the current selection.
Sakrijte profil nadmorske visine da biste napravili mesta za mapu ili ga prikažite da biste pregledali trenutni izbor.
### <ListTree size="16" class="inline-block" style="margin-bottom: 2px" /> File tree
### <ListTree size="16" class="inline-block" style="margin-bottom: 2px" /> Stablo datoteka
Toggle the tree layout for the [file list](../files-and-stats).
Uključi/isključi raspored stabla za [listu datoteka](../files-and-stats).
Ovaj raspored je idealan za upravljanje velikim brojem otvorenih datoteka, jer ih organizuje u vertikalnu listu na desnoj strani mape.
In addition, the file tree view enables you to inspect the [tracks, segments, and points of interest](../gpx) contained inside the files through collapsible sections.
Pored toga, prikaz stabla datoteka vam omogućava da pregledate [trase, segmente i tačke interesovanja](../gpx) sadržane unutar datoteka putem sklopivih odeljaka.
### <Map size="16" class="inline-block" style="margin-bottom: 2px" /> Switch to previous basemap
### <Map size="16" class="inline-block" style="margin-bottom: 2px" /> Vrati prethodnu osnovnu mapu
Change the basemap to the one previously selected through the [map layer control](../map-controls).
Promenite osnovnu mapu na onu koja je prethodno izabrana pomoću [kontrole sloja mape](../map-controls).
### <Layers2 size="16" class="inline-block" style="margin-bottom: 2px" /> Toggle overlays
### <Layers2 size="16" class="inline-block" style="margin-bottom: 2px" /> Uključi/isključi preklapanja
Toggle the visibility of the map overlays selected through the [map layer control](../map-controls).
Uključite/isključite vidljivost slojeva mape izabranih pomoću [kontrole sloja mape](../map-controls).
### <Coins size="16" class="inline-block" style="margin-bottom: 2px" /> Distance markers
### <Coins size="16" class="inline-block" style="margin-bottom: 2px" /> Označivači udaljenosti
Toggle the visibility of distance markers on the map.
They are displayed for the current selection, like the [elevation profile](../files-and-stats).
Uključite/isključite vidljivost markera udaljenosti na mapi.
Prikazuju se za trenutni izbor, kao što je [profil nadmorske visine](../datoteke-i-statistika).
### <Milestone size="16" class="inline-block" style="margin-bottom: 2px" /> Direction arrows
### <Milestone size="16" class="inline-block" style="margin-bottom: 2px" /> Strelice za smer
Toggle the visibility of direction arrows on the map.
Uključite/isključite vidljivost strelica za smer na mapi.
### <Box size="16" class="inline-block" style="margin-bottom: 2px" /> Toggle 3D
### <Box size="16" class="inline-block" style="margin-bottom: 2px" /> Uključi/isključi 3D
Enter or exit the 3D map view.
Uđite u 3D prikaz mape ili ga zatvorite.
<DocsNote>
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
Da biste kontrolisali orijentaciju i nagib mape, možete je prevlačiti dok držite pritisnut taster <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Ceo ekran
Uđite u režim celog ekrana ili ga izbacite.
Takođe možete pritisnuti <kbd>F11</kbd> da biste prebacili ili <kbd>Escape</kbd> da biste izašli.
+4 -4
View File
@@ -18,8 +18,8 @@ title: Traka sa alatkama
# { title }
The toolbar is located on the left side of the map and is the heart of the application, as it provides access to the main features of **gpx.studio**.
Each tool is represented by an icon and can be activated by clicking on it.
Traka sa alatkama se nalazi na levoj strani mape i predstavlja srce aplikacije, jer omogućava pristup glavnim funkcijama **gpx.studio**.
Svaki alat je predstavljen ikonom i može se aktivirati klikom na nju.
<div class="flex flex-row justify-center text-foreground">
<div>
@@ -27,6 +27,6 @@ Each tool is represented by an icon and can be activated by clicking on it.
</div>
</div>
As with [edit actions](./menu/edit), most tools can be applied to multiple files at once and to [inner tracks and segments](./gpx).
Kao i kod [akcija uređivanja](./menu/edit), većina alata se može primeniti na više datoteka odjednom i na [unutrašnje tragove i segmente](./gpx).
The next sections describe each tool in detail.
Sledeći odeljci detaljno opisuju svaki alat.
+3 -3
View File
@@ -1,5 +1,5 @@
---
title: Clean
title: Očisti
---
<script>
@@ -9,9 +9,9 @@ title: Clean
# <SquareDashedMousePointer size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
When the clean tool is selected, dragging the map will create a rectangular selection.
Kada je izabran alat za čišćenje, prevlačenjem mape će se kreirati pravougaoni izbor.
Depending on the options selected in the dialog shown below, clicking the delete button will remove GPS points and/or [points of interest](../gpx) located either inside or outside the selection.
U zavisnosti od opcija izabranih u dijalogu prikazanom ispod, klikom na dugme za brisanje uklonićete GPS tačke i/ili [tačke interesa](../gpx) koje se nalaze unutar ili van selekcije.
<div class="flex flex-row justify-center">
<Clean class="text-foreground p-3 border rounded-md shadow-lg" />
@@ -1,5 +1,5 @@
---
title: Elevation
title: Nadmorska visina
---
<script>
@@ -10,7 +10,7 @@ title: Elevation
# <MountainSnow size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
This tool allows you to add elevation data to traces and [points of interest](../gpx), or to replace the existing data.
Ovaj alat vam omogućava da dodate podatke o nadmorskoj visini trasama i [tačkama interesa](../gpx), ili da zamenite postojeće podatke.
<div class="flex flex-row justify-center">
<Elevation class="text-foreground p-3 border rounded-md shadow-lg" />
@@ -18,7 +18,7 @@ This tool allows you to add elevation data to traces and [points of interest](..
<DocsNote>
Elevation data is provided by <a href="https://maptiler.com" target="_blank">MapTiler</a>.
You can learn more about its origin and accuracy in the <a href="https://docs.maptiler.com/guides/map-tiling-hosting/data-hosting/rgb-terrain-by-maptiler/" target="_blank">documentation</a>.
Podatke o nadmorskoj visini obezbeđuje <a href="https://maptiler.com" target="_blank">MapTiler</a>.
Više o njegovom poreklu i tačnosti možete saznati u <a href="https://docs.maptiler.com/guides/map-tiling-hosting/data-hosting/rgb-terrain-by-maptiler/" target="_blank">dokumentaciji</a>.
</DocsNote>
+5 -5
View File
@@ -1,5 +1,5 @@
---
title: Extract
title: Raspakuj
---
<script>
@@ -10,17 +10,17 @@ title: Extract
# <Ungroup size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
This tool allows you to extract [tracks (or segments)](../gpx) from files (or tracks) containing multiple of them.
Ovaj alat vam omogućava da izdvojite [numere (ili segmente)](../gpx) iz datoteka (ili numera) koje sadrže više njih.
<div class="flex flex-row justify-center">
<Extract class="text-foreground p-3 border rounded-md shadow-lg" />
</div>
Applying the tool to a file containing multiple tracks will create a new file for each of the tracks it contains.
Similarly, applying the tool to a track containing multiple segments will create (in the same file) a new track for each of the segments it contains.
Primenom alata na datoteku koja sadrži više numera kreiraće se nova datoteka za svaku od numera koje sadrži.
Slično tome, primena alata na numeru koja sadrži više segmenata će kreirati (u istoj datoteci) novu numeru za svaki od segmenata koje sadrži.
<DocsNote>
When extracting the tracks from a file containing <a href="../gpx">points of interest</a>, the tool will automatically assign each point of interest to the track it is closest to.
Prilikom izdvajanja tragova iz datoteke koja sadrži <a href="../gpx">tačke interesa</a>, alat će automatski dodeliti svaku tačku interesa trasi kojoj je najbliža.
</DocsNote>
+7 -7
View File
@@ -1,5 +1,5 @@
---
title: Merge
title: Spojiti
---
<script>
@@ -10,16 +10,16 @@ title: Merge
# <Group size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
To use this tool, you need to [select](../files-and-stats) multiple files, [tracks, or segments](../gpx).
Da biste koristili ovaj alat, potrebno je da [izaberete](../files-and-stats) više datoteka, [tragova ili segmenata](../gpx).
- If your goal is to create a single continuous trace from your selection, use the **Connect the traces** option and validate.
- The second option can be used to create or manage files with multiple [tracks or segments](../gpx).
Merging files (or tracks) will result in a single file (or track) containing all tracks (or segments) from the selection.
- Ako vam je cilj da kreirate jedan kontinuirani trag iz vašeg izbora, koristite opciju **Poveži tragove** i potvrdite.
- Druga opcija se može koristiti za kreiranje ili upravljanje datotekama sa više [numera ili segmenata](../gpx).
Spajanje datoteka (ili numera) će rezultirati jednom datotekom (ili numerom) koja sadrži sve numere (ili segmente) iz selekcije.
<DocsNote>
Selected items are merged in the order they appear in the files list.
Reorder items by drag-and-drop if needed.
Izabrane stavke se spajaju redosledom kojim se pojavljuju na listi datoteka.
Promenite redosled stavki prevlačenjem i ispuštanjem ako je potrebno.
</DocsNote>
+5 -5
View File
@@ -1,5 +1,5 @@
---
title: Minify
title: Umanjiti
---
<script>
@@ -10,9 +10,9 @@ title: Minify
# <Funnel size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
This tool can be used to reduce the number of GPS points in a trace, which can be useful for decreasing its size.
Ovaj alat se može koristiti za smanjenje broja GPS tačaka u trasu, što može biti korisno za smanjenje njegove veličine.
You can adjust the tolerance of the simplification algorithm using the slider, and see the number of points that will be kept, as well as the simplified trace on the map.
Možete podesiti toleranciju algoritma za pojednostavljivanje pomoću klizača i videti broj tačaka koje će biti zadržane, kao i pojednostavljeni trag na mapi.
<div class="flex flex-row justify-center">
<Reduce class="text-foreground p-3 border rounded-md shadow-lg" />
@@ -20,7 +20,7 @@ You can adjust the tolerance of the simplification algorithm using the slider, a
<DocsNote>
The tolerance value represents the maximum distance allowed between the original trace and the simplified trace.
You can read more about the algorithm used <a href="https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm" target="_blank">here</a>.
Vrednost tolerancije predstavlja maksimalno dozvoljeno rastojanje između originalnog traga i pojednostavljenog traga.
Више о коришћеном алгоритму можете прочитати <a href="https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm" target="_blank">овде</a>.
</DocsNote>
+9 -9
View File
@@ -1,5 +1,5 @@
---
title: Points of interest
title: Tačke interesa
---
<script>
@@ -9,19 +9,19 @@ title: Points of interest
# <MapPin size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
[Points of interest](../gpx) can be added to GPX files to mark locations of interest on the map and display them on your GPS device.
[Tačke interesa](../gpx) mogu se dodati GPX datotekama da bi se označile lokacije od interesa na mapi i prikazale na vašem GPS uređaju.
### Creating a point of interest
### Uređivanje tačke interesa
To create a point of interest, fill in the form shown below.
You can choose the location of the point of interest either by clicking on the map or by entering the coordinates manually.
Validate the form when you are done.
Da biste kreirali tačku interesovanja, popunite obrazac prikazan ispod.
Lokaciju tačke interesovanja možete odabrati klikom na mapu ili ručnim unosom koordinata.
Potvrdite obrazac kada završite.
<div class="flex flex-row justify-center">
<Waypoint class="text-foreground p-3 border rounded-md shadow-lg" />
</div>
### Editing a point of interest
### Uređivanje tačke interesa
The form above can also be used to edit an existing point of interest after selecting it on the map.
If you only need to move the point of interest, you can drag it to the desired location.
Gornji obrazac se takođe može koristiti za uređivanje postojeće tačke interesovanja nakon što je odaberete na mapi.
Ako samo treba da pomerite tačku interesovanja, možete je prevući na željenu lokaciju.
+34 -34
View File
@@ -1,5 +1,5 @@
---
title: Route planning and editing
title: Planiranje i uređivanje rute
---
<script>
@@ -11,74 +11,74 @@ title: Route planning and editing
# <Pencil size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
The route planning and editing tool allows you to create and edit routes by placing or moving anchor points on the map.
Alat za planiranje i uređivanje ruta vam omogućava da kreirate i uređujete rute postavljanjem ili pomeranjem tačaka sidra na mapi.
## Settings
## Podešavanja
As shown below, the tool dialog contains a few settings to control the routing behavior.
You can minimize the dialog to save space by clicking on <button><SquareArrowUpLeft size="16" class="inline-block" style="margin-bottom: 2px" /></button>.
Kao što je prikazano ispod, dijalog alata sadrži nekoliko podešavanja za kontrolu ponašanja rutiranja.
Dijalog možete minimizirati da biste uštedeli prostor klikom na <button><SquareArrowUpLeft size="16" class="inline-block" style="margin-bottom: 2px" /></button>.
<div class="flex flex-row justify-center">
<Routing minimizable={false} class="text-foreground p-3 border rounded-md shadow-lg" />
</div>
### <Route size="16" class="inline-block" style="margin-bottom: 2px" /> Routing
### <Route size="16" class="inline-block" style="margin-bottom: 2px" /> Rutiranje
When routing is enabled, anchor points placed or moved on the map will be connected by a route calculated on the <a href="https://www.openstreetmap.org" target="_blank">OpenStreetMap</a> road network.
Disable routing to connect anchor points with straight lines.
This setting can also be toggled by pressing <kbd>F5</kbd>.
Kada je rutiranje omogućeno, sidrene tačke postavljene ili pomerene na mapi biće povezane rutom izračunatom na putnoj mreži <a href="https://www.openstreetmap.org" target="_blank">OpenStreetMap</a>.
Onemogućite rutiranje da biste povezali sidrene tačke pravim linijama.
Ovo podešavanje se takođe može promeniti pritiskom na <kbd>F5</kbd>.
### <Bike size="16" class="inline-block" style="margin-bottom: 2px" /> Activity
### <Bike size="16" class="inline-block" style="margin-bottom: 2px" /> Aktivnost
Select the activity type to tailor the routes for.
Izaberite tip aktivnosti za koju želite da prilagodite rute.
### <TriangleAlert size="16" class="inline-block" style="margin-bottom: 2px" /> Allow private roads
### <TriangleAlert size="16" class="inline-block" style="margin-bottom: 2px" /> Dozvoli privatne puteve
When enabled, the routing engine will consider private roads when computing routes.
Kada je omogućeno, sistem za rutiranje će uzeti u obzir privatne puteve prilikom izračunavanja ruta.
<DocsNote type="warning">
Only use this option if you have local knowledge of the area and have permission to use the roads in question.
Koristite ovu opciju samo ako poznajete lokalno područje i imate dozvolu za korišćenje dotičnih puteva.
</DocsNote>
## Plotting and editing routes
## Plasiranje i uređivanje ruta
Creating a route or extending an existing one is as simple as clicking on the map to place a new anchor point.
Kreiranje rute ili proširenje postojeće je jednostavno kao klik na mapu da biste postavili novu sidrenu tačku.
You can also drag an existing anchor point to reroute the segment connecting it with the previous and next anchor point.
Takođe možete prevući postojeću sidrenu tačku da biste preusmerili segment koji je povezuje sa prethodnom i sledećom sidrenom tačkom.
Furthermore, new anchor points can be inserted between existing ones by hovering over the segment connecting them and dragging the anchor point that appears to the desired location.
On touch devices, you can tap on the segment to insert a new anchor point.
Štaviše, nove sidrene tačke mogu se umetnuti između postojećih tako što ćete zadržati pokazivač miša iznad segmenta koji ih povezuje i prevući sidrenu tačku koja se pojavi na željenu lokaciju.
Na uređajima osetljivim na dodir, možete dodirnuti segment da biste umetnuli novu sidrenu tačku.
<DocsNote>
When editing imported GPX files, an initial set of anchor points is created automatically.
To ease the editing process, the more the map is zoomed in, the more anchor points are displayed.
This allows the route to be edited at different levels of detail.
Prilikom uređivanja uvezenih GPX datoteka, početni skup sidrenih tačaka se kreira automatski.
Radi olakšavanja procesa uređivanja, što je mapa više zumirana, to se više sidrenih tačaka prikazuje.
Ovo omogućava uređivanje rute na različitim nivoima detalja.
</DocsNote>
Finally, you can delete anchor points by clicking on them and selecting <button><Trash2 size="16" class="inline-block" style="margin-bottom: 4px" /> Delete</button> from the context menu.
Konačno, možete obrisati sidrene tačke tako što ćete kliknuti na njih i izabrati <button><Trash2 size="16" class="inline-block" style="margin-bottom: 4px" /> Obriši</button> iz kontekstnog menija.
<DocsImage src="tools/routing" alt="Anchor points allow you to easily edit a route." />
<DocsImage src="tools/routing" alt="Sidrene tačke vam omogućavaju da lako izmenite rutu." />
## Additional tools
## Dodatni alati
The following tools automate some common route modification operations.
Sledeći alati automatizuju neke uobičajene operacije modifikacije rute.
### <ArrowRightLeft size="16" class="inline-block" style="margin-bottom: 2px" /> Reverse
### <ArrowRightLeft size="16" class="inline-block" style="margin-bottom: 2px" /> Obrnuto
Reverse the direction of the route.
Promenite smer rute.
### <House size="16" class="inline-block" style="margin-bottom: 2px" /> Back to start
### <House size="16" class="inline-block" style="margin-bottom: 2px" /> Nazad na početak
Connect the last point of the route with the starting point, using the chosen routing settings.
Povežite poslednju tačku rute sa početnom tačkom, koristeći izabrana podešavanja rutiranja.
### <Repeat size="16" class="inline-block" style="margin-bottom: 2px" /> Round trip
### <Repeat size="16" class="inline-block" style="margin-bottom: 2px" /> Kružno putovanje
Return to the starting point by the same route.
Povratak na početnu tačku istim putem.
### <CirclePlay size="16" class="inline-block" style="margin-bottom: 2px" /> Change the start of the loop
### <CirclePlay size="16" class="inline-block" style="margin-bottom: 2px" /> Promeni početak petlje
When the end point of the route is close enough to the start, you can change the start of the loop by clicking on any anchor point and selecting <button><CirclePlay size="16" class="inline-block" style="margin-bottom: 2px" /> Start loop here</button> from the context menu.
Kada je krajnja tačka rute dovoljno blizu početka, možete promeniti početak petlje klikom na bilo koju sidrenu tačku i odabirom opcije <button><CirclePlay size="16" class="inline-block" style="margin-bottom: 2px" /> Počni petlju ovde</button> iz kontekstnog menija.
+12 -12
View File
@@ -1,5 +1,5 @@
---
title: Crop and split
title: Iseci i podeli
---
<script>
@@ -10,23 +10,23 @@ title: Crop and split
# <ScissorsIcon size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
## Crop
## Iseci
Using the slider, you can define the part of the selected trace that you want to keep.
The start and end markers on the map and the [statistics and elevation profile](../files-and-stats) are updated in real time to reflect the selection.
Alternatively, you can drag a selection rectangle directly on the elevation profile.
Validate the selection when you are satisfied with the result.
Pomoću klizača možete definisati deo izabrane trage koji želite da zadržite.
Početni i krajnji markeri na mapi i [statistika i profil nadmorske visine](../files-and-stats) se ažuriraju u realnom vremenu kako bi odražavali izbor.
Alternativno, možete prevući pravougaonik za selekciju direktno na profil elevacije.
Potvrdite izbor kada ste zadovoljni rezultatom.
<div class="flex flex-row justify-center">
<Scissors class="text-foreground p-3 border rounded-md shadow-lg" />
</div>
## Split
## Podeli
To split the selected trace into two parts, click on one of the split markers displayed along the trace.
To split at a specific point of your choice, hover over the trace on the map.
Scissors will appear at the cursor position, showing that you can split the trace at that point.
Da biste podelili izabrani trag na dva dela, kliknite na jedan od markera podele prikazanih duž traga.
Da biste se podelili na određenoj tački po vašem izboru, zadržite pokazivač miša iznad trase na mapi.
Makaze će se pojaviti na poziciji kursora, pokazujući da možete podeliti trag na toj tački.
You can choose to split the trace into two GPX files, or to keep the split parts in the same file as [tracks or segments](../gpx).
Možete da podelite trag u dve GPX datoteke ili da podeljene delove zadržite u istoj datoteci kao [tragove ili segmente](../gpx).
<DocsImage src="tools/split" alt="Hovering over the selected trace turns your cursor into scissors." />
<DocsImage src="tools/split" alt="Prelazak kursorom preko izabrane trake pretvara kursor u makaze." />
+6 -6
View File
@@ -1,5 +1,5 @@
---
title: Time
title: Vreme
---
<script>
@@ -10,18 +10,18 @@ title: Time
# <CalendarClock size="24" class="inline-block" style="margin-bottom: 5px" /> { title }
This tool allows you to change or add timestamps to a trace.
You simply need to use the form shown below and validate it when you are done.
Ovaj alat vam omogućava da promenite ili dodate vremenske oznake tragu.
Jednostavno treba da koristite obrazac prikazan ispod i da ga potvrdite kada završite.
<div class="flex flex-row justify-center">
<Time class="text-foreground p-3 border rounded-md shadow-lg" />
</div>
When you edit the speed, the moving time is adapted accordingly in the form, and vice versa.
Similarly, when you edit the start time, the end time is updated to keep the same total duration, and vice versa.
Kada uređujete brzinu, vreme kretanja se shodno tome prilagođava u formi i obrnuto.
Slično tome, kada izmenite vreme početka, vreme završetka se ažurira kako bi se zadržalo isto ukupno trajanje i obrnuto.
<DocsNote>
When using this tool with existing timestamps, changing the time or speed will simply shift, stretch, or compress them accordingly.
Kada koristite ovaj alat sa postojećim vremenskim oznakama, promena vremena ili brzine će ih jednostavno pomeriti, rastegnuti ili kompresovati u skladu sa tim.
</DocsNote>
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: Görünüm seçenekleri
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Yön işaretlerinin haritada görünürlülüğünü değiştir.
Haritanın oryantasyonunu ve eğimini <kbd>Ctrl</kbd> basılı tutarken sürükleyerek de yapabilirsiniz.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+18 -18
View File
@@ -1,5 +1,5 @@
---
title: Files and statistics
title: Файли та статистика
---
<script lang="ts">
@@ -19,41 +19,41 @@ title: Files and statistics
# { title }
## File list
## Список файлів
Once you have [opened](./menu/file) files, they will be shown as tabs in the file list located at the bottom of the map.
You can reorder them by dragging and dropping the tabs.
And when many files are open, you can scroll through the list of tabs to navigate between them.
Після того як ви [відкриєте](./menu/file) файли, вони будуть показуватися у вигляді вкладок у списку файлів, розташованому внизу карти.
Ви можете змінити їх порядок, перетягуючи вкладки.
А коли відкрито багато файлів, ви можете прокручувати список вкладок, щоб переходити між ними.
<DocsNote>
When using a mouse, you need to hold <kbd>Shift</kbd> to scroll horizontally.
Під час роботи з мишею для горизонтальної прокрутки потрібно утримувати клавіші <kbd>Shift</kbd>.
</DocsNote>
### File selection
### Вибір файлу
By clicking on a tab, you can switch between the files to inspect their statistics, and apply [edit actions](./menu/edit) and [tools](./toolbar) to them.
By holding the <kbd>Ctrl/Cmd</kbd> key, you can add files to the selection or remove them, and by holding <kbd>Shift</kbd>, you can select a range of files.
Most of the [edit actions](./menu/edit) and [tools](./toolbar) can be applied to multiple files at once.
Натиснувши на вкладку, ви можете перемикатися між файлами, щоб переглянути їхні статистичні дані, а також застосовувати до них [дії редагування](./menu/edit) та [інструменти](./toolbar).
Утримуючи клавішу <kbd>Ctrl/Cmd</kbd>, ви можете додавати файли до виділення або видаляти їх, а утримуючи клавішу <kbd>Shift</kbd>, ви можете виділити діапазон файлів.
Більшість [операцій редагування](./menu/edit) та [інструментів](./toolbar) можна застосовувати одразу до декількох файлів.
<DocsNote>
You can also navigate through the files using the arrow keys on your keyboard, and use <kbd>Shift</kbd> to add files to the selection.
Ви також можете переходити між файлами за допомогою клавіш зі стрілками на клавіатурі, а також натискати <kbd>Shift</kbd>, щоб додати файли до виділення.
</DocsNote>
### Edit actions
### Редагувати дії
By right-clicking on a file tab, you can access the same actions as in the [edit menu](./menu/edit).
Клацнувши правою кнопкою миші на вкладці файлу, ви отримаєте доступ до тих самих дій, що й у [меню редагування](./menu/edit).
### Tree layout
### Структура дерева
As mentioned in the [view options section](./menu/view), you can switch to a tree layout for the files list.
This layout is ideal for managing a large number of open files, as it organizes them into a vertical list on the right side of the map.
In addition, the file tree view enables you to inspect the [tracks, segments, and points of interest](./gpx) contained inside the files through collapsible sections.
Як зазначено в [розділі налаштувань перегляду](./menu/view), ви можете перейти до деревоподібного показу списку файлів.
Ця схема ідеально підходить для роботи з великою кількістю відкритих файлів, оскільки вони розміщуються у вигляді вертикального списку в правій частині екрана.
Крім того, у дереві файлів можна переглядати [треки, сегменти та цікаві місця](./gpx), що містяться у файлах, за допомогою розгортальних розділів.
You can also apply [edit actions](./menu/edit) and [tools](./toolbar) to internal file items.
Ви також можете застосовувати [дії редагування](./menu/edit) та [інструменти](./toolbar) до елементів внутрішніх файлів.
Furthermore, you can drag and drop the inner items to reorder them, or move them in the hierarchy or even to another file.
<DocsNote>
+1 -1
View File
@@ -21,7 +21,7 @@ Before we dive into the details of each section, let's have a quick overview of
At the top of the interface, you will find the [main menu](./menu).
This is where you can access common actions such as opening, closing, and exporting files, undoing and redoing actions, and adjusting the application settings.
## Files and statistics
## Файли та статистика
At the bottom of the interface, you will find the list of files currently open in the application.
You can click on a file to select it and display its statistics below the list.
+1 -1
View File
@@ -1,5 +1,5 @@
---
title: Edit actions
title: Редагувати дії
---
<script lang="ts">
+7 -2
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -18,7 +18,7 @@ Hide the elevation profile to make room for the map, or show it to inspect the c
### <ListTree size="16" class="inline-block" style="margin-bottom: 2px" /> File tree
Toggle the tree layout for the [file list](../files-and-stats).
This layout is ideal for managing a large number of open files, as it organizes them into a vertical list on the right side of the map.
Ця схема ідеально підходить для роботи з великою кількістю відкритих файлів, оскільки вони розміщуються у вигляді вертикального списку в правій частині екрана.
In addition, the file tree view enables you to inspect the [tracks, segments, and points of interest](../gpx) contained inside the files through collapsible sections.
### <Map size="16" class="inline-block" style="margin-bottom: 2px" /> Switch to previous basemap
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+6 -1
View File
@@ -3,7 +3,7 @@ title: View options
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ Enter or exit the 3D map view.
To control the orientation and tilt of the map, you can also drag the map while holding <kbd>Ctrl</kbd>.
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit.
+1 -1
View File
@@ -69,4 +69,4 @@ Hover over the map to show the <a href="https://hiking.waymarkedtrails.org" targ
还可以设置叠加层的不透明度。
For advanced users, it is possible to add custom basemaps and overlays by providing <a href="https://en.wikipedia.org/wiki/Web_Map_Tile_Service" target="_blank">WMTS</a>, <a href="https://en.wikipedia.org/wiki/Web_Map_Service" target="_blank">WMS</a>, or <a href="https://maplibre.org/maplibre-style-spec/" target="_blank">MapLibre style JSON</a> URLs.
本站还支持通过添加 <a href="https://en.wikipedia.org/wiki/Web_Map_Tile_Service" target="_blank">WMTS</a>, <a href="https://en.wikipedia.org/wiki/Web_Map_Service" target="_blank">WMS</a>, or <a href="https://maplibre.org/maplibre-style-spec/" target="_blank">MapLibre JSON</a> 链接的方式来自定义底图和叠加层。
+6 -1
View File
@@ -3,7 +3,7 @@ title: 显示
---
<script lang="ts">
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box } from '@lucide/svelte';
import { ChartArea, ListTree, Map, Layers2, Coins, Milestone, Box, Maximize2 } from '@lucide/svelte';
import DocsNote from '$lib/components/docs/DocsNote.svelte';
</script>
@@ -47,3 +47,8 @@ title: 显示
也可在按住 <kbd>Ctrl</kbd> 的同时用鼠标拖拽地图实现此功能。
</DocsNote>
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> 全屏
进入或退出全屏模式。
你也可以按 <kbd>F11</kbd> 来切换,也可以按 <kbd>Escape</kbd> 来退出。
+23 -28
View File
@@ -162,38 +162,33 @@ function getLayerValidator(allowed: Record<string, any>, fallback: string) {
function filterLayerTree(t: LayerTreeType, allowed: LayerTreeType | undefined): LayerTreeType {
const filtered: LayerTreeType = {};
const values = Object.values(t);
if (values.length == 0) return filtered;
if (typeof values[0] === 'boolean') {
if (allowed) {
Object.keys(allowed).forEach((key) => {
if (Object.hasOwn(t, key)) {
if (allowed) {
Object.entries(allowed).forEach(([key, value]) => {
if (Object.hasOwn(t, key)) {
if (typeof value === 'boolean') {
filtered[key] = t[key];
} else {
filtered[key] = allowed[key];
} else if (typeof value === 'object') {
filtered[key] = filterLayerTree(
typeof t[key] === 'object' ? t[key] : {},
value
);
}
});
}
Object.entries(t).forEach(([key, value]) => {
if (
!Object.hasOwn(filtered, key) &&
(key.startsWith('custom-') || key.startsWith('extension-'))
) {
} else {
filtered[key] = value;
}
});
} else {
Object.entries(t).forEach(([key, value]) => {
if (typeof value === 'object') {
filtered[key] = filterLayerTree(
value,
typeof allowed === 'object' && typeof allowed[key] === 'object'
? allowed[key]
: undefined
);
}
});
}
Object.entries(t).forEach(([key, value]) => {
if (!Object.hasOwn(filtered, key)) {
if (typeof value === 'boolean') {
if (key.startsWith('custom-') || key.startsWith('extension-')) {
filtered[key] = value;
}
} else if (typeof value === 'object') {
filtered[key] = filterLayerTree(value, undefined);
}
}
});
return filtered;
}
@@ -215,7 +210,7 @@ type RoutingProfile =
| 'motorcycle'
| 'water'
| 'railway';
type TerrainSource = 'maptiler-dem' | 'mapterhorn';
type TerrainSource = 'mapterhorn';
type StreetViewSource = 'mapillary' | 'google';
export const settings = {
@@ -313,7 +308,7 @@ export const settings = {
terrainSource: new Setting<TerrainSource>(
'terrainSource',
defaultTerrainSource,
getValueValidator(['maptiler-dem', 'mapterhorn'], defaultTerrainSource)
getValueValidator(['mapterhorn'], defaultTerrainSource)
),
directionMarkers: new Setting('directionMarkers', false),
distanceMarkers: new Setting('distanceMarkers', false),
+10 -14
View File
@@ -1,4 +1,4 @@
import { type ClassValue, clsx } from 'clsx';
import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';
import { base } from '$app/paths';
import { languages } from '$lib/languages';
@@ -7,7 +7,6 @@ import maplibregl from 'maplibre-gl';
import { pointToTile, pointToTileFraction } from '@mapbox/tilebelt';
import type { GPXStatisticsTree } from '$lib/logic/statistics-tree';
import { ListTrackSegmentItem } from '$lib/components/file-list/file-list';
import { PUBLIC_MAPTILER_KEY } from '$env/static/public';
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
@@ -18,9 +17,7 @@ export type WithoutChild<T> = T extends { child?: any } ? Omit<T, 'child'> : T;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type WithoutChildren<T> = T extends { children?: any } ? Omit<T, 'children'> : T;
export type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;
export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & {
ref?: U | null;
};
export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & { ref?: U | null };
export function getClosestLinePoint(
points: TrackPoint[],
@@ -103,7 +100,7 @@ export function getClosestTrackSegments(
export function getElevation(
points: (TrackPoint | Waypoint | Coordinates)[],
ELEVATION_ZOOM: number = 13,
ELEVATION_ZOOM: number = 12,
tileSize = 512
): Promise<number[]> {
let coordinates = points.map((point) =>
@@ -124,10 +121,9 @@ export function getElevation(
};
let promises = uniqueTiles.map((tile) =>
fetch(
`https://api.maptiler.com/tiles/terrain-rgb-v2/${ELEVATION_ZOOM}/${tile[0]}/${tile[1]}.webp?key=${PUBLIC_MAPTILER_KEY}`,
{ cache: 'force-cache' }
)
fetch(`https://tiles.gpx.studio/mapterhorn/${ELEVATION_ZOOM}/${tile[0]}/${tile[1]}.webp`, {
cache: 'force-cache',
})
.then((response) => response.blob())
.then(
(blob) =>
@@ -182,10 +178,10 @@ export function getElevation(
_y + (_y + 1 == tileSize ? 0 : 1)
);
let ele00 = -10000 + (p00[0] * 256 * 256 + p00[1] * 256 + p00[2]) * 0.1;
let ele01 = -10000 + (p01[0] * 256 * 256 + p01[1] * 256 + p01[2]) * 0.1;
let ele10 = -10000 + (p10[0] * 256 * 256 + p10[1] * 256 + p10[2]) * 0.1;
let ele11 = -10000 + (p11[0] * 256 * 256 + p11[1] * 256 + p11[2]) * 0.1;
let ele00 = -32768 + p00[0] * 256 + p00[1] + p00[2] / 256;
let ele01 = -32768 + p01[0] * 256 + p01[1] + p01[2] / 256;
let ele10 = -32768 + p10[0] * 256 + p10[1] + p10[2] / 256;
let ele11 = -32768 + p11[0] * 256 + p11[1] + p11[2] / 256;
return (
ele00 * (1 - dx) * (1 - dy) +
+2
View File
@@ -36,6 +36,7 @@
"switch_basemap": "Switch to previous basemap",
"toggle_overlays": "Toggle overlays",
"toggle_3d": "Toggle 3D",
"fullscreen": "Full screen",
"settings": "Налады",
"distance_units": "Адзінкі вымярэння адлегласці",
"metric": "Метрычная",
@@ -307,6 +308,7 @@
"maptilerTopo": "MapTiler Topo",
"maptilerOutdoors": "MapTiler Outdoors",
"maptilerSatellite": "MapTiler Satellite",
"esriSatellite": "Esri Satellite",
"openStreetMap": "OpenStreetMap",
"openTopoMap": "OpenTopoMap",
"openHikingMap": "OpenHikingMap",
+2
View File
@@ -36,6 +36,7 @@
"switch_basemap": "Canviar al mapa base anterior",
"toggle_overlays": "Intercanvia capes",
"toggle_3d": "Canvia a 3D",
"fullscreen": "Full screen",
"settings": "Configuració",
"distance_units": "Unitats de distancia",
"metric": "Mètric",
@@ -307,6 +308,7 @@
"maptilerTopo": "MapTiler Topo",
"maptilerOutdoors": "MapTiler Outdoors",
"maptilerSatellite": "MapTiler Satellite",
"esriSatellite": "Esri Satellite",
"openStreetMap": "OpenStreetMap",
"openTopoMap": "OpenTopoMap",
"openHikingMap": "OpenHikingMap",
+2
View File
@@ -36,6 +36,7 @@
"switch_basemap": "Přepnout na předchozí podkladovou mapu",
"toggle_overlays": "Přepnout překryv",
"toggle_3d": "Přepnout 3D",
"fullscreen": "Full screen",
"settings": "Nastavení",
"distance_units": "Jednotky vzdálenosti",
"metric": "Metrické",
@@ -307,6 +308,7 @@
"maptilerTopo": "MapTiler Topo",
"maptilerOutdoors": "MapTiler Outdoors",
"maptilerSatellite": "MapTiler Satellite",
"esriSatellite": "Esri Satellite",
"openStreetMap": "OpenStreetMap",
"openTopoMap": "OpenTopoMap",
"openHikingMap": "OpenHikingMap",
+2
View File
@@ -36,6 +36,7 @@
"switch_basemap": "Switch to previous basemap",
"toggle_overlays": "Toggle overlays",
"toggle_3d": "Toggle 3D",
"fullscreen": "Full screen",
"settings": "Settings",
"distance_units": "Distance units",
"metric": "Metric",
@@ -307,6 +308,7 @@
"maptilerTopo": "MapTiler Topo",
"maptilerOutdoors": "MapTiler Outdoors",
"maptilerSatellite": "MapTiler Satellite",
"esriSatellite": "Esri Satellite",
"openStreetMap": "OpenStreetMap",
"openTopoMap": "OpenTopoMap",
"openHikingMap": "OpenHikingMap",
+2
View File
@@ -36,6 +36,7 @@
"switch_basemap": "Zur vorherigen Basemap wechseln",
"toggle_overlays": "Overlay umschalten",
"toggle_3d": "3D umschalten",
"fullscreen": "Full screen",
"settings": "Einstellungen",
"distance_units": "Entfernungseinheiten",
"metric": "Metrisch",
@@ -307,6 +308,7 @@
"maptilerTopo": "MapTiler Topo",
"maptilerOutdoors": "MapTiler Outdoors",
"maptilerSatellite": "MapTiler Satellite",
"esriSatellite": "Esri Satellite",
"openStreetMap": "OpenStreetMap",
"openTopoMap": "OpenTopoMap",
"openHikingMap": "OpenHikingMap",
+2
View File
@@ -36,6 +36,7 @@
"switch_basemap": "Switch to previous basemap",
"toggle_overlays": "Toggle overlays",
"toggle_3d": "Toggle 3D",
"fullscreen": "Full screen",
"settings": "Settings",
"distance_units": "Μονάδες απόστασης",
"metric": "Μονάδες Μέτρησης",
@@ -307,6 +308,7 @@
"maptilerTopo": "MapTiler Topo",
"maptilerOutdoors": "MapTiler Outdoors",
"maptilerSatellite": "MapTiler Satellite",
"esriSatellite": "Esri Satellite",
"openStreetMap": "OpenStreetMap",
"openTopoMap": "OpenTopoMap",
"openHikingMap": "OpenHikingMap",
+5 -6
View File
@@ -36,6 +36,7 @@
"switch_basemap": "Switch to previous basemap",
"toggle_overlays": "Toggle overlays",
"toggle_3d": "Toggle 3D",
"fullscreen": "Full screen",
"settings": "Settings",
"distance_units": "Distance units",
"metric": "Metric",
@@ -234,7 +235,7 @@
},
"elevation": {
"button": "Request elevation data",
"help": "Requesting elevation data will erase the existing elevation data, if any, and replace it with data from MapTiler.",
"help": "Requesting elevation data will erase the existing elevation data, if any, and replace it with data from Mapterhorn.",
"help_no_selection": "Select a file item to request elevation data."
},
"waypoint": {
@@ -303,10 +304,9 @@
"switzerland": "Switzerland",
"united_kingdom": "United Kingdom",
"united_states": "United States",
"maptilerStreets": "MapTiler Streets",
"maptilerTopo": "MapTiler Topo",
"maptilerOutdoors": "MapTiler Outdoors",
"maptilerSatellite": "MapTiler Satellite",
"topo": "Topo",
"satellite": "Satellite",
"esriSatellite": "Esri Satellite",
"openStreetMap": "OpenStreetMap",
"openTopoMap": "OpenTopoMap",
"openHikingMap": "OpenHikingMap",
@@ -386,7 +386,6 @@
"tram-stop": "Tram Stop",
"bus-stop": "Bus Stop",
"ferry": "Ferry",
"maptiler-dem": "MapTiler DEM",
"mapterhorn": "Mapterhorn"
}
},
+14 -12
View File
@@ -2,10 +2,10 @@
"metadata": {
"home_title": "el editor online de archivos GPX",
"app_title": "app",
"embed_title": " editor online de archivos GPX",
"embed_title": "Editor online de archivos GPX",
"help_title": "ayuda",
"404_title": "página no encontrada",
"description": "Mira, edita y crea archivos GPX online con planificación avanzada de rutas y herramientas de procesamiento de archivos, bonitos mapas y visualizaciones detalladas de datos."
"description": "Visualiza, edita y crea archivos GPX online con planificación avanzada de rutas y herramientas de procesamiento de archivos, bonitos mapas y visualizaciones detalladas de datos."
},
"menu": {
"new": "Nuevo",
@@ -36,6 +36,7 @@
"switch_basemap": "Cambiar al mapa base anterior",
"toggle_overlays": "Alternar capas",
"toggle_3d": "Alternar 3D",
"fullscreen": "Pantalla completa",
"settings": "Configuración",
"distance_units": "Unidades de distancia",
"metric": "Métrico",
@@ -234,7 +235,7 @@
},
"elevation": {
"button": "Solicitar datos de desnivel",
"help": "Requesting elevation data will erase the existing elevation data, if any, and replace it with data from MapTiler.",
"help": "La solicitud de datos de desnivel borrará los datos de desnivel existentes, si los hay, y los reemplazará con datos de Mapbox.",
"help_no_selection": "Seleccione un elemento del archivo para solicitar datos de desnivel."
},
"waypoint": {
@@ -276,7 +277,7 @@
"new": "Nueva capa personalizada",
"edit": "Editar capa personalizada",
"urls": "URL(s)",
"url_placeholder": "WMTS, WMS or MapLibre style JSON",
"url_placeholder": "WMTS, WMS o JSON estilo Mapbox",
"max_zoom": "Zoom máximo",
"layer_type": "Tipo de capa",
"basemap": "Mapa base",
@@ -307,6 +308,7 @@
"maptilerTopo": "MapTiler Topo",
"maptilerOutdoors": "MapTiler Outdoors",
"maptilerSatellite": "MapTiler Satellite",
"esriSatellite": "Esri Satellite",
"openStreetMap": "OpenStreetMap",
"openTopoMap": "OpenTopoMap",
"openHikingMap": "OpenHikingMap",
@@ -493,7 +495,7 @@
"email": "Email",
"contribute": "Contribuir",
"supported_by": "con el apoyo de",
"features": "Features",
"features": "Características",
"route_planning": "Planificación de ruta",
"route_planning_description": "Una interfaz intuitiva para crear itinerarios adaptados a cada deporte, basada en datos de OpenStreetMap.",
"file_processing": "Procesamiento avanzado de archivo",
@@ -502,15 +504,15 @@
"maps_description": "Una gran colección de mapas base, capas y puntos de interés para ayudarle a crear su próxima aventura al aire libre o visualizar su último logro.",
"data_visualization": "Visualización de datos",
"data_visualization_description": "Un perfil de elevación interactivo con estadísticas detalladas para analizar actividades registradas y futuros objetivos.",
"philosophy": "Philosophy",
"foss": "Free, ad-free and open source",
"foss_description": "The website is free to use, without ads, and the source code is publicly available on GitHub.",
"privacy": "Privacy-friendly",
"philosophy": "Filosofía",
"foss": "Gratis, sin anuncios y código abierto",
"foss_description": "El sitio web es de uso gratuito, sin anuncios, y el código fuente está disponible públicamente en GitHub.",
"privacy": "Respetuosa con la privacidad",
"privacy_description": "Tus archivos GPX nunca abandonan tu navegador. Sin seguimiento, sin recopilación de datos.",
"community": "Made possible by the community",
"community": "Posible gracias a la comunidad",
"community_description": "gpx.studio tiene una comunidad asombrosa que ha cubierto sus costes a través de donaciones durante años, mientras ha dado forma al proyecto a través de sugerencias de características, informes de fallos y traducciones a muchos idiomas.",
"support_button": "Apoya a gpx.studio en Open Collective",
"translate_button": "Help translate the website on Crowdin"
"translate_button": "Ayuda a traducir el sitio web en Crowdin"
},
"docs": {
"translate": "Mejorar la traducción en Crowdin",
@@ -535,7 +537,7 @@
},
"embedding": {
"title": "Crear su propio mapa",
"maptiler_key": "MapTiler key (optional, only required for MapTiler maps)",
"maptiler_key": "Clave MapTiler (opcional, sólo se requiere para mapas MapTiler)",
"file_urls": "URLs de archivo (separados por comas)",
"drive_ids": "IDs de archivo de Google Drive (separados por comas)",
"basemap": "Mapa base",
+3 -1
View File
@@ -4,7 +4,7 @@
"app_title": "aplikazioa",
"embed_title": "lineako GPX fitxategi editorea",
"help_title": "laguntza",
"404_title": "Ez da orrialdea aurkitu",
"404_title": "ez da orrialdea aurkitu",
"description": "Ikusi, editatu eta sortu GPX fitxategiak bideak bilatzeko aukera aurreratuarekin eta fitxategiak prozesatzeko tresnekin, mapa ederrekin eta datuak ikusteko xehetasun handiarekin."
},
"menu": {
@@ -36,6 +36,7 @@
"switch_basemap": "Aldatu aurreko mapa erabiltzera",
"toggle_overlays": "Txandakatu geruzak",
"toggle_3d": "Txandakatu 3D",
"fullscreen": "Full screen",
"settings": "Ezarpenak",
"distance_units": "Distantzia unitateak",
"metric": "Metrikoa",
@@ -307,6 +308,7 @@
"maptilerTopo": "MapTiler Topo",
"maptilerOutdoors": "MapTiler Outdoors",
"maptilerSatellite": "MapTiler Satellite",
"esriSatellite": "Esri Satellite",
"openStreetMap": "OpenStreetMap",
"openTopoMap": "OpenTopoMap",
"openHikingMap": "OpenHikingMap",

Some files were not shown because too many files have changed in this diff Show More