348 lines
11 KiB
Markdown
348 lines
11 KiB
Markdown
# Dyomedea
|
|
|
|
## Hiking app.
|
|
|
|
## Documentation
|
|
|
|
```bash
|
|
vdv@nuc:~/projects/tea/dyomedea/dyomedea$ npx typedoc
|
|
./src/serviceWorkerRegistration.ts:21:0 - warning Config is referenced by serviceWorkerRegistration.register.register.config but not included in the documentation.
|
|
|
|
21 type Config = {
|
|
|
|
Documentation generated at ./doc
|
|
vdv@nuc:~/projects/tea/dyomedea/dyomedea$
|
|
```
|
|
|
|
## Components
|
|
|
|
TBD
|
|
|
|
## Data formats
|
|
|
|
There is a number of data formats more or less specific to geography and hiking, such as:
|
|
|
|
* [GPX 1.1 Schema Documentation](https://www.topografix.com/GPX/1/1/)
|
|
* [GeoJSON](https://geojson.org/)
|
|
* [Keyhole Markup Language - Wikipedia](https://en.m.wikipedia.org/wiki/Keyhole_Markup_Language)
|
|
* [Elements — OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Elements)
|
|
* [<svg> - SVG: Scalable Vector Graphics | MDN](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg)
|
|
|
|
SVG is very generic and is used to draw 2D figures in HTML applications and doesn't care about geography.
|
|
|
|
KML, GeoJSON and OSM elements have been designed to represent generic geographical points and shapes.
|
|
|
|
GPX is more specific, having been designed to represent routes and tracks and its semantics are directly useable in our application.
|
|
|
|
The structure of our components and indexes can therefore follow the GPX format.
|
|
|
|
OSM elements is interesting to extract information from the OSM DB, either by querying their API or by downloading portions of the database.
|
|
|
|
GeoJSON might be of interest as an intermediate format since a number of JS libraries have been developed to perform queries or draw GeoJSON data as SVG.
|
|
|
|
KML might be considered as an import format.
|
|
|
|
And SVG, of course will be used to render tracks and routes on a map since its elements are directly supported by React.
|
|
|
|
## Notes to self
|
|
|
|
### Patching node_modules
|
|
|
|
This can be done by updating their sources in the node_modules directory and using the patch-package npm CLI command (thanks [stackoverflow](https://stackoverflow.com/a/13302095/1402881)) :
|
|
|
|
```
|
|
$npx patch-package localized-strings
|
|
```
|
|
|
|
However, it takes ages before `ionic serve` takes these modifications into account.
|
|
|
|
### Visual Code snippets
|
|
|
|
* [Create Your Own VSCode Snippets - DEV Community 👩💻👨💻](https://dev.to/brianmmdev/create-your-own-vscode-snippets-33c7)
|
|
* [vscode settings - How can I create templates for file extensions in Visual Studio Code? - Stack Overflow](https://stackoverflow.com/questions/50571130/how-can-i-create-templates-for-file-extensions-in-visual-studio-code)
|
|
|
|
|
|
### Useful commands
|
|
```bash
|
|
vdv@nuc:~/projects/tea/dyomedea/dyomedea$ adb --version
|
|
Android Debug Bridge version 1.0.41
|
|
Version 33.0.3-8952118
|
|
Installed as /homext/Android/Sdk/platform-tools/adb
|
|
|
|
$ ionic capacitor run --target RFCN20NEZ4R android
|
|
|
|
$ ionic serve --no-open
|
|
|
|
$ npm test
|
|
|
|
$ npx typedoc
|
|
|
|
$ npx trapeze run trapeze.config.yaml
|
|
|
|
vdv@nuc:~/projects/tea/dyomedea/dyomedea$ echo $ANDROID_SDK_ROOT
|
|
/home/vdv/Android/Sdk
|
|
|
|
```
|
|
|
|
### To (re)generate android/
|
|
|
|
```bash
|
|
$ rm capacitor.config.ts
|
|
$ rm -rf android
|
|
$ npx cap init dyomedea com.dyomedea.dyomedea # assets in dist/
|
|
$ npx cap add android
|
|
$ cp AndroidManifest.xml ./android/app/src/main/AndroidManifest.xml
|
|
$ npx cap run --target RFCN20NEZ4R android
|
|
|
|
```
|
|
|
|
### To generate style filters
|
|
|
|
```bash
|
|
vdv@nuc:~/projects/tea/dyomedea/dyomedea$ esrun helper.ts
|
|
{
|
|
caller: 'overlay-definitions',
|
|
overlayDefinitions: {
|
|
amenity: {
|
|
bar: [Object],
|
|
fast_food: [Object],
|
|
food_court: [Object],
|
|
pub: [Object],
|
|
restaurant: [Object],
|
|
cafe: [Object],
|
|
atm: [Object],
|
|
bank: [Object],
|
|
doctors: [Object],
|
|
hospital: [Object],
|
|
pharmacy: [Object],
|
|
police: [Object],
|
|
fire_station: [Object],
|
|
drinking_water: [Object],
|
|
water_point: [Object],
|
|
waste_basket: [Object],
|
|
waste_disposal: [Object],
|
|
vending_machine: [Object]
|
|
},
|
|
shop: {
|
|
bakery: [Object],
|
|
butcher: [Object],
|
|
cheese: [Object],
|
|
chocolate: [Object],
|
|
convenience: [Object],
|
|
dairy: [Object],
|
|
farm: [Object],
|
|
greengrocer: [Object],
|
|
health_food: [Object],
|
|
pasta: [Object],
|
|
pastry: [Object],
|
|
seafood: [Object],
|
|
water: [Object],
|
|
department_store: [Object],
|
|
general: [Object],
|
|
mall: [Object],
|
|
supermarket: [Object],
|
|
wholesale: [Object],
|
|
outdoor: [Object],
|
|
laundry: [Object]
|
|
},
|
|
tourism: {
|
|
hotel: [Object],
|
|
alpine_hut: [Object],
|
|
apartment: [Object],
|
|
camp_site: [Object],
|
|
chalet: [Object],
|
|
guest_house: [Object],
|
|
hostel: [Object],
|
|
motel: [Object],
|
|
wilderness_hut: [Object],
|
|
viewpoint: [Object]
|
|
},
|
|
waterway: { waterfall: [Object] },
|
|
natural: {
|
|
peak: [Object],
|
|
cave_entrance: [Object],
|
|
volcano: [Object],
|
|
arch: [Object],
|
|
arete: [Object],
|
|
fumarole: [Object],
|
|
rock: [Object],
|
|
saddle: [Object],
|
|
sinkhole: [Object],
|
|
stone: [Object],
|
|
glacier: [Object],
|
|
spring: [Object],
|
|
hot_spring: [Object],
|
|
geyser: [Object]
|
|
}
|
|
},
|
|
_flat: [
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] },
|
|
{ hiking: [Object] }, { hiking: [Object] }, { hiking: [Object] }
|
|
],
|
|
overlayCategories: {
|
|
hiking: Set(9) {
|
|
'drinking',
|
|
'eating',
|
|
'money',
|
|
'dayToDay',
|
|
'health',
|
|
'security',
|
|
'material',
|
|
'sleeping',
|
|
'naturalSites'
|
|
}
|
|
}
|
|
}
|
|
{
|
|
overlayDefinitions: {
|
|
amenity: {
|
|
bar: [Object],
|
|
fast_food: [Object],
|
|
food_court: [Object],
|
|
pub: [Object],
|
|
restaurant: [Object],
|
|
cafe: [Object],
|
|
atm: [Object],
|
|
bank: [Object],
|
|
doctors: [Object],
|
|
hospital: [Object],
|
|
pharmacy: [Object],
|
|
police: [Object],
|
|
fire_station: [Object],
|
|
drinking_water: [Object],
|
|
water_point: [Object],
|
|
waste_basket: [Object],
|
|
waste_disposal: [Object],
|
|
vending_machine: [Object]
|
|
},
|
|
shop: {
|
|
bakery: [Object],
|
|
butcher: [Object],
|
|
cheese: [Object],
|
|
chocolate: [Object],
|
|
convenience: [Object],
|
|
dairy: [Object],
|
|
farm: [Object],
|
|
greengrocer: [Object],
|
|
health_food: [Object],
|
|
pasta: [Object],
|
|
pastry: [Object],
|
|
seafood: [Object],
|
|
water: [Object],
|
|
department_store: [Object],
|
|
general: [Object],
|
|
mall: [Object],
|
|
supermarket: [Object],
|
|
wholesale: [Object],
|
|
outdoor: [Object],
|
|
laundry: [Object]
|
|
},
|
|
tourism: {
|
|
hotel: [Object],
|
|
alpine_hut: [Object],
|
|
apartment: [Object],
|
|
camp_site: [Object],
|
|
chalet: [Object],
|
|
guest_house: [Object],
|
|
hostel: [Object],
|
|
motel: [Object],
|
|
wilderness_hut: [Object],
|
|
viewpoint: [Object]
|
|
},
|
|
waterway: { waterfall: [Object] },
|
|
natural: {
|
|
peak: [Object],
|
|
cave_entrance: [Object],
|
|
volcano: [Object],
|
|
arch: [Object],
|
|
arete: [Object],
|
|
fumarole: [Object],
|
|
rock: [Object],
|
|
saddle: [Object],
|
|
sinkhole: [Object],
|
|
stone: [Object],
|
|
glacier: [Object],
|
|
spring: [Object],
|
|
hot_spring: [Object],
|
|
geyser: [Object]
|
|
}
|
|
},
|
|
filters: [
|
|
'any',
|
|
[
|
|
'in', 'amenity',
|
|
'bar', 'fast_food',
|
|
'food_court', 'pub',
|
|
'restaurant', 'cafe',
|
|
'atm', 'bank',
|
|
'doctors', 'hospital',
|
|
'pharmacy', 'police',
|
|
'fire_station', 'drinking_water',
|
|
'water_point', 'waste_basket',
|
|
'waste_disposal', 'vending_machine'
|
|
],
|
|
[
|
|
'in', 'shop',
|
|
'bakery', 'butcher',
|
|
'cheese', 'chocolate',
|
|
'convenience', 'dairy',
|
|
'farm', 'greengrocer',
|
|
'health_food', 'pasta',
|
|
'pastry', 'seafood',
|
|
'water', 'department_store',
|
|
'general', 'mall',
|
|
'supermarket', 'wholesale',
|
|
'outdoor', 'laundry'
|
|
],
|
|
[
|
|
'in', 'tourism',
|
|
'hotel', 'alpine_hut',
|
|
'apartment', 'camp_site',
|
|
'chalet', 'guest_house',
|
|
'hostel', 'motel',
|
|
'wilderness_hut', 'viewpoint'
|
|
],
|
|
[ 'in', 'waterway', 'waterfall' ],
|
|
[
|
|
'in', 'natural',
|
|
'peak', 'cave_entrance',
|
|
'volcano', 'arch',
|
|
'arete', 'fumarole',
|
|
'rock', 'saddle',
|
|
'sinkhole', 'stone',
|
|
'glacier', 'spring',
|
|
'hot_spring', 'geyser'
|
|
]
|
|
],
|
|
json: '["any",["in","amenity","bar","fast_food","food_court","pub","restaurant","cafe","atm","bank","doctors","hospital","pharmacy","police","fire_station","drinking_water","water_point","waste_basket","waste_disposal","vending_machine"],["in","shop","bakery","butcher","cheese","chocolate","convenience","dairy","farm","greengrocer","health_food","pasta","pastry","seafood","water","department_store","general","mall","supermarket","wholesale","outdoor","laundry"],["in","tourism","hotel","alpine_hut","apartment","camp_site","chalet","guest_house","hostel","motel","wilderness_hut","viewpoint"],["in","waterway","waterfall"],["in","natural","peak","cave_entrance","volcano","arch","arete","fumarole","rock","saddle","sinkhole","stone","glacier","spring","hot_spring","geyser"]]'
|
|
}
|
|
```
|
|
|
|
(Just copy the filters as json)
|
|
|
|
Requires esrun (`sudo npm i -g @digitak/esrun`)
|
|
|
|
### Patches
|
|
|
|
* suid: https://github.com/swordev/suid/issues/89
|
|
|