Compare commits
10 commits
f4139723e5
...
b08100a3f7
| Author | SHA1 | Date | |
|---|---|---|---|
| b08100a3f7 | |||
| c29d53091b | |||
| 036771d2da | |||
| be885c8b46 | |||
| 829547e599 | |||
| e3e7445cc0 | |||
| dba7cd0be4 | |||
| f0e84f3142 | |||
| f3adeb7482 | |||
| d666f15b00 |
3
.gitignore
vendored
|
|
@ -1,2 +1,5 @@
|
||||||
data/plats.geojson
|
data/plats.geojson
|
||||||
|
data/track.geojson
|
||||||
satellite/
|
satellite/
|
||||||
|
images/thumbs/*
|
||||||
|
unused/
|
||||||
|
|
|
||||||
27
Makefile
|
|
@ -1,3 +1,17 @@
|
||||||
|
THUMB_SRC := $(wildcard images/*.jpg)
|
||||||
|
THUMB_FILES := $(patsubst images/%.jpg, images/thumbs/%.jpg, $(THUMB_SRC))
|
||||||
|
|
||||||
|
.PHONY: deploy
|
||||||
|
deploy: data/plats.json data/track.geojson satellite $(THUMB_FILES)
|
||||||
|
rsync -avz --exclude=unused/ --delete ./ bert:/srv/www/lawrencedeerclub.chandlerswift.com/
|
||||||
|
|
||||||
|
# Build a thumbnail next to each source image so new photos are picked up automatically.
|
||||||
|
images/thumbs/%.jpg: images/%.jpg | images/thumbs
|
||||||
|
magick $< -resize 400x400 -quality 80 $@
|
||||||
|
|
||||||
|
images/thumbs:
|
||||||
|
mkdir -p $@
|
||||||
|
|
||||||
data/plats.json: scripts/get_plats.py
|
data/plats.json: scripts/get_plats.py
|
||||||
./scripts/get_plats.py data/plats.geojson
|
./scripts/get_plats.py data/plats.geojson
|
||||||
|
|
||||||
|
|
@ -5,6 +19,13 @@ data/plats.json: scripts/get_plats.py
|
||||||
satellite:
|
satellite:
|
||||||
./scripts/download_satellite.py
|
./scripts/download_satellite.py
|
||||||
|
|
||||||
.PHONY: deploy
|
data/track.geojson: resources/deercamp.osm
|
||||||
deploy: data/plats.json satellite
|
OSM_USE_CUSTOM_INDEXING=NO ogr2ogr \
|
||||||
rsync -avz --exclude=unused/ --delete ./ bert:/srv/www/lawrencedeerclub.chandlerswift.com/
|
-overwrite \
|
||||||
|
-f GeoJSON \
|
||||||
|
-nln track \
|
||||||
|
-lco RFC7946=YES \
|
||||||
|
-lco COORDINATE_PRECISION=8 \
|
||||||
|
-dialect SQLITE \
|
||||||
|
-sql "SELECT HSTORE_GET_VALUE(other_tags,'type') AS type, geometry FROM lines WHERE HSTORE_GET_VALUE(other_tags,'type') IS NOT NULL" \
|
||||||
|
$@ $<
|
||||||
|
|
|
||||||
114
data/data.json
|
|
@ -1,9 +1,8 @@
|
||||||
{
|
[
|
||||||
"stands": [
|
|
||||||
{
|
{
|
||||||
"name": "Fridge",
|
"name": "Fridge",
|
||||||
"image": "fridge.jpg",
|
"image": "fridge.jpg",
|
||||||
"type": "barrel",
|
"type": "barrel-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"fridge1.jpg",
|
"fridge1.jpg",
|
||||||
"fridge2.jpg",
|
"fridge2.jpg",
|
||||||
|
|
@ -18,7 +17,7 @@
|
||||||
{
|
{
|
||||||
"name": "Tupperware",
|
"name": "Tupperware",
|
||||||
"image": "tupperware.jpg",
|
"image": "tupperware.jpg",
|
||||||
"type": "castle",
|
"type": "castle-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"tupperware1.jpg",
|
"tupperware1.jpg",
|
||||||
"tupperware2.jpg",
|
"tupperware2.jpg",
|
||||||
|
|
@ -33,7 +32,7 @@
|
||||||
{
|
{
|
||||||
"name": "Castle",
|
"name": "Castle",
|
||||||
"image": "castle.jpg",
|
"image": "castle.jpg",
|
||||||
"type": "castle",
|
"type": "castle-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"castle1.jpg",
|
"castle1.jpg",
|
||||||
"castle2.jpg",
|
"castle2.jpg",
|
||||||
|
|
@ -49,7 +48,7 @@
|
||||||
{
|
{
|
||||||
"name": "Ladder",
|
"name": "Ladder",
|
||||||
"image": "ladder.jpg",
|
"image": "ladder.jpg",
|
||||||
"type": "tree",
|
"type": "ladder-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"ladder1.jpg",
|
"ladder1.jpg",
|
||||||
"ladder2.jpg",
|
"ladder2.jpg",
|
||||||
|
|
@ -64,7 +63,7 @@
|
||||||
{
|
{
|
||||||
"name": "Alan's",
|
"name": "Alan's",
|
||||||
"image": "alans.jpg",
|
"image": "alans.jpg",
|
||||||
"type": "castle",
|
"type": "castle-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"alans1.jpg",
|
"alans1.jpg",
|
||||||
"alans2.jpg",
|
"alans2.jpg",
|
||||||
|
|
@ -79,7 +78,7 @@
|
||||||
{
|
{
|
||||||
"name": "East Barrel",
|
"name": "East Barrel",
|
||||||
"image": "eastbarrel.jpg",
|
"image": "eastbarrel.jpg",
|
||||||
"type": "barrel",
|
"type": "barrel-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"eastbarrel1.jpg",
|
"eastbarrel1.jpg",
|
||||||
"eastbarrel2.jpg",
|
"eastbarrel2.jpg",
|
||||||
|
|
@ -95,7 +94,7 @@
|
||||||
{
|
{
|
||||||
"name": "Iron Castle",
|
"name": "Iron Castle",
|
||||||
"image": "ironcastle.jpg",
|
"image": "ironcastle.jpg",
|
||||||
"type": "castle",
|
"type": "castle-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"ironcastle1.jpg",
|
"ironcastle1.jpg",
|
||||||
"ironcastle2.jpg"
|
"ironcastle2.jpg"
|
||||||
|
|
@ -109,7 +108,7 @@
|
||||||
{
|
{
|
||||||
"name": "Mile-high stand (TODO: rename)",
|
"name": "Mile-high stand (TODO: rename)",
|
||||||
"image": "irontree.jpg",
|
"image": "irontree.jpg",
|
||||||
"type": "tree",
|
"type": "ladder-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"irontree1.jpg",
|
"irontree1.jpg",
|
||||||
"irontree2.jpg"
|
"irontree2.jpg"
|
||||||
|
|
@ -123,7 +122,7 @@
|
||||||
{
|
{
|
||||||
"name": "Three-Legged Barrel",
|
"name": "Three-Legged Barrel",
|
||||||
"image": "threeleggedbarrel.jpg",
|
"image": "threeleggedbarrel.jpg",
|
||||||
"type": "barrel",
|
"type": "barrel-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"threeleggedbarrel1.jpg",
|
"threeleggedbarrel1.jpg",
|
||||||
"threeleggedbarrel2.jpg",
|
"threeleggedbarrel2.jpg",
|
||||||
|
|
@ -141,7 +140,7 @@
|
||||||
{
|
{
|
||||||
"name": "Hummock",
|
"name": "Hummock",
|
||||||
"image": "hummock.jpg",
|
"image": "hummock.jpg",
|
||||||
"type": "tree",
|
"type": "ladder-stand",
|
||||||
"active": false,
|
"active": false,
|
||||||
"view": [
|
"view": [
|
||||||
"hummock1.jpg",
|
"hummock1.jpg",
|
||||||
|
|
@ -156,7 +155,7 @@
|
||||||
{
|
{
|
||||||
"name": "Sofa",
|
"name": "Sofa",
|
||||||
"image": "sofa.jpg",
|
"image": "sofa.jpg",
|
||||||
"type": "tree",
|
"type": "ladder-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"sofa1.jpg",
|
"sofa1.jpg",
|
||||||
"sofa2.jpg",
|
"sofa2.jpg",
|
||||||
|
|
@ -172,7 +171,7 @@
|
||||||
{
|
{
|
||||||
"name": "Ridge",
|
"name": "Ridge",
|
||||||
"image": "ridge.jpg",
|
"image": "ridge.jpg",
|
||||||
"type": "tree",
|
"type": "ladder-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"ridge1.jpg",
|
"ridge1.jpg",
|
||||||
"ridge2.jpg"
|
"ridge2.jpg"
|
||||||
|
|
@ -186,81 +185,68 @@
|
||||||
{
|
{
|
||||||
"name": "Point",
|
"name": "Point",
|
||||||
"image": "point.jpg",
|
"image": "point.jpg",
|
||||||
"type": "castle",
|
"type": "castle-stand",
|
||||||
"view": [
|
"view": [
|
||||||
"point1.jpg",
|
"point1.jpg",
|
||||||
"point2.jpg",
|
"point2.jpg",
|
||||||
"point3.jpg"
|
"point3.jpg"
|
||||||
],
|
],
|
||||||
|
"location": [47.488840, -93.389712],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"Year Established": "2008",
|
"Year Established": "2008",
|
||||||
"Description": "Originally \"South Castle\". Post stand in 2008, half-wall stand in 2009, castle in 2012. Many deer were seen from the post, so decided to put up a permanent stand. The first morning of half-wall stand, 8 deer seen before 8:30 (including 8pt buck). Next day, another buck 7:30am. New ladder (with Sofa) 2020(?)"
|
"Description": "Originally \"South Castle\". Post stand in 2008, half-wall stand in 2009, castle in 2012. Many deer were seen from the post, so decided to put up a permanent stand. The first morning of half-wall stand, 8 deer seen before 8:30 (including 8pt buck). Next day, another buck 7:30am. New ladder (with Sofa) 2020(?)"
|
||||||
},
|
|
||||||
"location": [47.488840, -93.389712]
|
|
||||||
}
|
}
|
||||||
],
|
},
|
||||||
"fruit-trees_comment": "Dave attempted planting two fruit trees 2008 between Alan's stand and castle. Neither made it a year.",
|
|
||||||
"fruit-trees": [
|
|
||||||
{
|
{
|
||||||
"type": "Honeycrisp",
|
"name": "Apple tree",
|
||||||
"location": [],
|
"type": "fruit-tree",
|
||||||
|
"location": [47.492464, -93.391048],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"Year Planted": 2019,
|
"Year Planted": 2019
|
||||||
"_TODO": "#TODO",
|
|
||||||
"Description": ""
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Honeycrisp",
|
"name": "Apple tree",
|
||||||
"location": [],
|
"type": "fruit-tree",
|
||||||
|
"location": [47.492561, -93.391028],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"Year Planted": 2019,
|
"Year Planted": 2019
|
||||||
"_TODO": "#TODO",
|
|
||||||
"Description": ""
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Honeycrisp",
|
"name": "Apple tree",
|
||||||
"location": [],
|
"type": "fruit-tree",
|
||||||
|
"location": [47.492421, -93.389521],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"Year Planted": 2019,
|
"Year Planted": 2019
|
||||||
"_TODO": "#TODO",
|
|
||||||
"Description": ""
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Honeycrisp",
|
"name": "Apple tree",
|
||||||
"location": [],
|
"type": "fruit-tree",
|
||||||
|
"location": [47.492584, -93.389489],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"Year Planted": 2019,
|
"Year Planted": 2019
|
||||||
"_TODO": "#TODO",
|
|
||||||
"Description": ""
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
],
|
|
||||||
"buildings": [
|
|
||||||
"shack built around 1980, put up over a weekend. Old one pushed over and burned. New cabin was reshingled once, floors rebuilt in 2006, moved to new foundation in 2019, eaves 2020, steel siding, new windows, and porch 2021-2022, steel roof added 2024 for $16500.",
|
|
||||||
"outhouse built by Irving pre-1992 (when Dad started coming up; relatively new then), replaced older outhouse, which was 6 ft further north",
|
|
||||||
""
|
|
||||||
],
|
|
||||||
"shack_location": [47.492264, -93.390625],
|
|
||||||
"deer": [
|
|
||||||
"TODO",
|
|
||||||
{
|
|
||||||
"date": "2023-11-11 17:00:00",
|
|
||||||
"hunter": "Chris Lemke",
|
|
||||||
"animal": "9pt buck",
|
|
||||||
"stand": "Sofa",
|
|
||||||
"notes": "Tracked after dark during a snowstorm",
|
|
||||||
"_photo": null
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"date": "2023-11-11 17:00:00",
|
"name": "Shack",
|
||||||
"hunter": "Chris Lemke",
|
"image": "shack.jpg",
|
||||||
"animal": "9pt buck",
|
"type": "shack",
|
||||||
"stand": "Sofa",
|
"location": [47.492260, -93.390626],
|
||||||
"notes": "Tracked after dark during a snowstorm",
|
"attributes": {
|
||||||
"_photo": null
|
"Year Established": "1980ish?",
|
||||||
|
"Description": "The shack was initially put up in a weekend. The old shack was pushed over and burned. The building was reshingled once, had its floors rebuilt in 2006, was moved to a new poured concrete foundation in 2019, eaves built in 2020, steel siding, new windows and porch added 2021-2022, steel roof added in 2024 for $16500."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Outhouse",
|
||||||
|
"image": "outhouse.jpg",
|
||||||
|
"type": "outhouse",
|
||||||
|
"location": [47.492454, -93.390241],
|
||||||
|
"attributes": {
|
||||||
|
"Year Established": "1980ish?",
|
||||||
|
"Description": "The outhouse was built by Irving Jandt sometime before 1992 when Dave started attending, but was relatively new at that time. It replaced an older building six feet further to the north."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
|
||||||
|
|
|
||||||
25
images/icons/barrel-stand.svg
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="-14 -17 128 128">
|
||||||
|
<!-- shadow -->
|
||||||
|
<!-- barrel -->
|
||||||
|
<path style="stroke-width:32px;stroke:white;fill:white" d="M 20 10 A 30 10 0 0 1 80 10 L 80 60 A 30 10 0 0 1 20 60 L 20 10" />
|
||||||
|
<!-- legs -->
|
||||||
|
<line x1="35" y1="67" x2="30" y2="96" style="stroke:white;stroke-width:32px;stroke-linecap:round;"/>
|
||||||
|
<line x1="65" y1="67" x2="70" y2="96" style="stroke:white;stroke-width:32px;stroke-linecap:round;"/>
|
||||||
|
<line x1="30" y1="95" x2="70" y2="95" style="stroke:white;stroke-width:16px;"/>
|
||||||
|
|
||||||
|
<!-- barrel top -->
|
||||||
|
<ellipse cx="50" cy="10" rx="30" ry="10" style="fill:none;stroke:black;stroke-width:12px"/>
|
||||||
|
<!-- barrel walls -->
|
||||||
|
<line x1="20" y1="10" x2="20" y2="60" style="stroke:black;stroke-width:12px;"/>
|
||||||
|
<line x1="80" y1="10" x2="80" y2="60" style="stroke:black;stroke-width:12px;"/>
|
||||||
|
<!-- barrel mid -->
|
||||||
|
<path d="M 20 35 A 30 10 180 0 0 80 35 50" style="stroke:black;stroke-width:8px;fill:none;" />
|
||||||
|
<!-- barrel bottom -->
|
||||||
|
<path d="M 20 60 A 30 10 180 0 0 80 60 50" style="stroke:black;stroke-width:12px;fill:none;" />
|
||||||
|
<!-- legs -->
|
||||||
|
<line x1="35" y1="70" x2="30" y2="96" style="stroke:black;stroke-width:12px;stroke-linecap:round;"/>
|
||||||
|
<line x1="65" y1="70" x2="70" y2="96" style="stroke:black;stroke-width:12px;stroke-linecap:round;"/>
|
||||||
|
<line x1="35" y1="70" x2="70" y2="96" style="stroke:black;stroke-width:6px;"/>
|
||||||
|
<line x1="65" y1="70" x2="30" y2="96" style="stroke:black;stroke-width:6px;"/>
|
||||||
|
<line x1="30" y1="95" x2="70" y2="95" style="stroke:black;stroke-width:6px;"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
4
images/icons/castle-stand.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 105 105">
|
||||||
|
<path d="M 43 85 25 85 25 45 20 40 20 20 35 20 35 30 45 30 45 20 60 20 60 30 70 30 70 20 85 20 85 40 80 45 80 85 62 85 62 65 A 9.5 9.5 0 0 0 43 65 z" style="stroke:white;stroke-width:12px;stroke-linecap:round;fill:none" />
|
||||||
|
<path d="M 43 85 25 85 25 45 20 40 20 20 35 20 35 30 45 30 45 20 60 20 60 30 70 30 70 20 85 20 85 40 80 45 80 85 62 85 62 65 A 9.5 9.5 0 0 0 43 65 z" style="fill:black;" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 495 B |
51
images/icons/decommissioned-stand.svg
Normal file
|
After Width: | Height: | Size: 12 KiB |
51
images/icons/fruit-tree.svg
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
51
images/icons/hook.svg
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="181.5726mm"
|
||||||
|
height="354.91153mm"
|
||||||
|
viewBox="0 0 181.5726 354.91153"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2571"
|
||||||
|
inkscape:version="1.1 (c4e8f9e, 2021-05-24)"
|
||||||
|
sodipodi:docname="hook.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview2573"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="5"
|
||||||
|
fit-margin-left="5"
|
||||||
|
fit-margin-right="5"
|
||||||
|
fit-margin-bottom="5"
|
||||||
|
inkscape:zoom="0.53540264"
|
||||||
|
inkscape:cx="-80.313388"
|
||||||
|
inkscape:cy="842.3567"
|
||||||
|
inkscape:window-width="1299"
|
||||||
|
inkscape:window-height="822"
|
||||||
|
inkscape:window-x="213"
|
||||||
|
inkscape:window-y="38"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="layer1" />
|
||||||
|
<defs
|
||||||
|
id="defs2568" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-104.1125,74.459786)">
|
||||||
|
<path
|
||||||
|
style="fill:#000000;stroke-width:0.192424"
|
||||||
|
d="m 160.37959,275.08155 c -2.62863,-0.32085 -5.58266,-0.90782 -8.37045,-1.66322 -1.23846,-0.33559 -6.03369,-2.21069 -7.36829,-2.88125 -2.052,-1.03101 -6.56439,-4.02057 -8.15787,-5.40475 -4.63316,-4.02463 -9.69224,-9.90013 -12.37267,-14.36934 -1.71798,-2.86446 -2.6094,-4.75603 -5.03904,-10.69273 -3.16007,-7.72148 -4.07605,-10.34476 -5.54309,-15.875 -0.3369,-1.27 -0.77254,-2.87193 -0.96809,-3.55984 -0.69731,-2.45305 -1.70818,-6.86857 -2.10368,-9.18892 -0.22104,-1.29682 -0.57634,-3.07193 -0.78955,-3.94469 -1.08313,-4.43373 -0.5527,-9.8755 1.36057,-13.9583 4.48056,-9.56127 14.85924,-14.4294 25.10671,-11.77629 2.25055,0.58266 5.85195,2.41685 7.75359,3.94887 3.17757,2.55996 5.61078,6.01168 6.89289,9.7782 0.46314,1.36059 1.38383,5.46307 1.9068,8.49643 0.3608,2.09277 2.73721,11.09468 3.53046,13.37348 0.69443,1.99491 3.87616,9.84528 4.41289,10.888 0.49281,0.95743 2.32751,3.07373 3.20763,3.69994 0.57906,0.412 0.94273,0.49245 2.58321,0.57144 3.10298,0.14942 6.26816,-0.25802 15.44042,-1.98757 12.07769,-2.2774 18.53234,-3.73753 23.12639,-5.23152 3.92307,-1.27579 10.50586,-4.83733 13.80259,-7.46773 3.24827,-2.59176 9.19653,-9.11858 11.86867,-13.02314 2.20433,-3.22099 3.374,-5.78492 4.74035,-10.39087 1.21739,-4.10383 1.61496,-6.45498 2.14024,-12.65703 0.82294,-9.71673 -0.2561,-22.4389 -2.4273,-28.61828 -0.55967,-1.5929 -2.39422,-5.38431 -2.91355,-6.02141 -0.13091,-0.1606 -1.40699,-1.19825 -2.83574,-2.3059 -1.42875,-1.10765 -3.37704,-2.65884 -4.32954,-3.44709 -3.07063,-2.54109 -4.94406,-3.62577 -10.1978,-5.90426 -5.9069,-2.56181 -11.98376,-6.12148 -17.22266,-10.08867 -0.79375,-0.60108 -2.91523,-2.06756 -4.71439,-3.25888 -4.19455,-2.77739 -5.7393,-4.02236 -9.9099,-7.98676 -1.00545,-0.95573 -2.50351,-2.33221 -3.32902,-3.05884 -2.00698,-1.76655 -3.2453,-3.34366 -5.15727,-6.56825 -2.74576,-4.630781 -3.29887,-6.211642 -4.10677,-11.737874 l -0.47823,-3.271212 -0.0258,-22.224999 c -0.0233,-20.104687 0.006,-22.484638 0.31108,-24.946504 l 0.33688,-2.721504 -2.57882,-3.028373 c -1.41835,-1.665605 -2.88188,-3.394386 -3.2523,-3.841736 -0.37042,-0.44735 -1.54677,-1.847227 -2.61412,-3.110838 -5.646,-6.684199 -9.92476,-13.685534 -15.32808,-25.0813473 -2.73671,-5.771809 -4.21787,-9.37915 -5.09606,-12.411363 -0.36782,-1.27 -0.74417,-2.5688637 -0.83633,-2.8863637 -0.55262,-1.903801 -1.17598,-6.158374 -1.35328,-9.236363 -0.20841,-3.618265 -0.14589,-5.193125 0.32086,-8.081818 0.64304,-3.979736 0.81433,-4.668817 2.33669,-9.400163 0.54466,-1.692741 2.97145,-6.53759 4.15891,-8.302867 3.11426,-4.629649 9.45685,-11.015976 14.47758,-14.57742 3.0979,-2.19749 3.75708,-2.582987 7.10883,-4.15737 7.62352,-3.580913 18.45776,-5.423011 28.48981,-4.844001 2.79544,0.161342 4.67239,0.392039 8.07079,0.991995 0.635,0.112103 2.41012,0.550976 3.9447,0.975273 3.25256,0.899303 9.0379,3.43267 11.04813,4.837921 1.99061,1.391539 5.72166,4.430405 6.57119,5.352115 0.84315,0.914775 3.22806,4.05043 4.45632,5.859122 0.96612,1.422692 3.72991,6.933197 4.18919,8.352516 0.18836,0.582083 0.59642,1.703582 0.9068,2.492219 0.96762,2.458647 2.04152,7.447419 2.38377,11.07369 0.44202,4.683623 0.10385,11.827615 -0.77882,16.452272 -0.15149,0.79375 -0.33341,1.832841 -0.40428,2.309091 -0.36788,2.4725067 -2.50792,9.96408069 -3.76051,13.1643807 -2.46022,6.285713 -7.95663,15.6435383 -12.11014,20.6179323 -2.39411,2.867283 -5.80625,7.110682 -5.98245,7.439908 -0.0977,0.18264 -0.20642,1.784571 -0.24148,3.559849 -0.0541,2.742153 -0.13993,3.514998 -0.57026,5.13683 -0.2786,1.04998 -0.76081,2.452433 -1.0716,3.116563 l -0.56507,1.20751 0.17089,3.522073 c 0.094,1.937141 0.17388,10.893375 0.1775,19.902741 l 0.007,16.380668 1.20265,1.045389 c 0.66146,0.574964 2.37163,1.81736 3.80038,2.76088 1.42875,0.943521 3.59352,2.463274 4.8106,3.37723 3.88738,2.919183 6.02086,4.137639 11.38172,6.500237 7.5626,3.332921 12.3374,6.313981 19.52643,12.191001 1.07155,0.87599 3.11931,2.48194 4.55056,3.56878 5.9618,4.52713 10.11032,9.91649 14.4018,18.70954 1.97651,4.04975 3.20486,7.2868 4.38117,11.54546 1.26385,4.57552 2.27981,9.81304 2.79945,14.43182 0.59088,5.25175 0.6772,6.36006 0.90938,11.67588 0.2402,5.49958 0.0567,13.16766 -0.41887,17.50177 -0.10297,0.93855 -0.28292,2.61564 -0.3999,3.72689 -1.29321,12.28687 -5.14783,24.43101 -10.81058,34.05909 -4.82102,8.19693 -12.98508,17.76482 -21.69085,25.42065 -7.04221,6.1929 -19.38725,13.08662 -28.95985,16.17175 -7.53574,2.42869 -18.48356,4.85416 -35.40989,7.84501 -8.56027,1.51258 -16.33832,1.91348 -22.5098,1.16024 z M 190.95162,-8.9752233 c 0.79167,-1.4025187 1.6215,-2.9748717 1.84408,-3.4941147 0.55358,-1.291463 1.65385,-5.226575 2.0493,-7.329335 0.34212,-1.819214 0.47981,-6.29397 0.20224,-6.572912 -0.30241,-0.303911 -5.32259,-0.15444 -7.05477,0.210048 -2.08189,0.438075 -2.3242,0.569888 -4.1053,2.233236 -1.34337,1.254563 -1.475,1.44346 -1.475,2.116712 0,0.406574 0.22636,1.366763 0.50303,2.133758 0.99311,2.753108 6.09306,13.2526417 6.43723,13.2526417 0.0879,0 0.80753,-1.147516 1.59919,-2.550034 z"
|
||||||
|
id="path4255" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.2 KiB |
4
images/icons/ladder-stand.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 100 100">
|
||||||
|
<path d="M 42 10 L 42 90 M 58 10 L 58 90 M 42 20 L 58 20 M 42 35 L 58 35 M 42 50 L 58 50 M 42 65 L 58 65 M 42 80 L 58 80" style="stroke:white;stroke-width:20px;stroke-linecap:round;" />
|
||||||
|
<path d="M 42 10 L 42 90 M 58 10 L 58 90 M 42 20 L 58 20 M 42 35 L 58 35 M 42 50 L 58 50 M 42 65 L 58 65 M 42 80 L 58 80" style="stroke:black;stroke-width:8px;stroke-linecap:round;" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 470 B |
7
images/icons/outhouse.svg
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="-14 -14 114 114">
|
||||||
|
<path style="stroke-width:12px;stroke:black;fill:none;stroke-linecap:round;" d="M 67 20 C 70 20, 75 35, 90 40 L 90 90 C 90 90 75 85 67 75 z"/>
|
||||||
|
<path style="stroke-width:10px;stroke:black;fill:white;" d="M 10 25 A 20 10 0 0 1 70 25 L 70 70 A 20 10 0 0 1 10 70 L 10 25" />
|
||||||
|
<path style="stroke-width:6px;stroke:black;fill:none" d="M 10 21 A 20 10 0 0 0 70 21 L 70 70 "/>
|
||||||
|
<path style="stroke-width:6px;stroke:black;fill:white;stroke-linecap:round;" d="M 67 20 C 70 20, 75 35, 90 40 L 90 90 C 90 90 75 85 67 75 z"/>
|
||||||
|
<ellipse cx="40" cy="25" rx="12" ry="4"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 662 B |
6
images/icons/shack.svg
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 100 100">
|
||||||
|
<g transform="scale(0.8) translate(15,15)">
|
||||||
|
<path d="M 10 60 L 50 20 90 60 M 80 50 L 80 90 20 90 20 50 M 30 40 L 30 25" style="stroke-width:32px;stroke:white;fill:none;stroke-linecap:round;"/>
|
||||||
|
<path d="M 10 60 L 50 20 90 60 M 80 50 L 80 90 20 90 20 50 M 30 40 L 30 25" style="stroke-width:16px;stroke:black;fill:none;stroke-linecap:round;"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 454 B |
BIN
images/outhouse.jpg
Normal file
|
After Width: | Height: | Size: 5.1 MiB |
|
Before Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 74 KiB |
84
map.html
|
|
@ -124,6 +124,48 @@
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
/* END lightbox */
|
/* END lightbox */
|
||||||
|
|
||||||
|
/* BEGIN legend */
|
||||||
|
.legend {
|
||||||
|
padding: 6px 8px;
|
||||||
|
font: 14px/16px Arial, Helvetica, sans-serif;
|
||||||
|
background: white;
|
||||||
|
background: rgba(255,255,255,0.8);
|
||||||
|
box-shadow: 0 0 15px rgba(0,0,0,0.2);
|
||||||
|
border-radius: 5px;
|
||||||
|
line-height: 18px;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
.legend-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
.legend-item:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
.legend-line {
|
||||||
|
display: inline-block;
|
||||||
|
width: 28px;
|
||||||
|
height: 0;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.legend-line.road {
|
||||||
|
border-top: 6px solid #8b5a2b;
|
||||||
|
}
|
||||||
|
.legend-line.trail {
|
||||||
|
border-top: 3px solid #800000;
|
||||||
|
}
|
||||||
|
.legend-line.shooting_lane {
|
||||||
|
border-top: 3px dashed #000000;
|
||||||
|
}
|
||||||
|
.legend-icon {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
/* END legend */
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
@ -341,19 +383,31 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
for (let stand of data.stands) {
|
for (let poi of data) {
|
||||||
if (stand.location) {
|
if (poi.location) {
|
||||||
const marker = L.marker(stand.location).addTo(map);
|
const icon = L.icon({
|
||||||
|
iconUrl: `images/icons/${poi.type}.svg`,
|
||||||
|
iconSize: [16, 16],
|
||||||
|
iconAnchor: [8, 16],
|
||||||
|
popupAnchor: [0, -12],
|
||||||
|
});
|
||||||
|
const marker = L.marker(poi.location, {icon}).addTo(map);
|
||||||
|
map.on('zoom', () => {
|
||||||
|
icon.options.iconSize = [map.getZoom() * 8 - 104, map.getZoom() * 8 - 104];
|
||||||
|
icon.options.iconAnchor = [icon.options.iconSize[0] / 2, icon.options.iconSize[1]];
|
||||||
|
icon.options.popupAnchor = [0, -icon.options.iconSize[1] * 3 / 4];
|
||||||
|
marker.setIcon(icon);
|
||||||
|
});
|
||||||
const popupContentWrapper = document.createElement('div');
|
const popupContentWrapper = document.createElement('div');
|
||||||
popupContentWrapper.classList.add('popup');
|
popupContentWrapper.classList.add('popup');
|
||||||
let attributesString = '<dl>';
|
let attributesString = '<dl>';
|
||||||
for (let [attribute, value] of Object.entries(stand.attributes)) {
|
for (let [attribute, value] of Object.entries(poi.attributes)) {
|
||||||
attributesString += `<dt>${attribute}</dt><dd>${value}</dd>`;
|
attributesString += `<dt>${attribute}</dt><dd>${value}</dd>`;
|
||||||
}
|
}
|
||||||
attributesString += '</dl>';
|
attributesString += '</dl>';
|
||||||
popupContentWrapper.innerHTML = `
|
popupContentWrapper.innerHTML = `
|
||||||
<h2>${stand.name}</h2>
|
<h2>${poi.name}</h2>
|
||||||
<a href="images/${stand.image}" onclick="displayLightboxOnClick(this, event)"><img style="width: min(80vw, 300px);" src="images/thumbs/${stand.image}"></a>
|
<a href="images/${poi.image}" onclick="displayLightboxOnClick(this, event)"><img style="width: min(80vw, 300px);" src="images/thumbs/${poi.image}"></a>
|
||||||
${attributesString}
|
${attributesString}
|
||||||
`;
|
`;
|
||||||
let popupOptions = {};
|
let popupOptions = {};
|
||||||
|
|
@ -367,6 +421,24 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const legend = L.control({position: 'bottomright'});
|
||||||
|
legend.onAdd = function (map) {
|
||||||
|
const div = L.DomUtil.create('div', 'legend');
|
||||||
|
div.innerHTML = `
|
||||||
|
<div class="legend-item"><span class="legend-line road"></span>Road</div>
|
||||||
|
<div class="legend-item"><span class="legend-line trail"></span>Trail</div>
|
||||||
|
<div class="legend-item"><span class="legend-line shooting_lane"></span>Shooting lane</div>
|
||||||
|
<div class="legend-item"><img class="legend-icon" src="images/icons/castle-stand.svg" alt="Castle icon">Castle stand</div>
|
||||||
|
<div class="legend-item"><img class="legend-icon" src="images/icons/ladder-stand.svg" alt="Ladder icon">Ladder stand</div>
|
||||||
|
<div class="legend-item"><img class="legend-icon" src="images/icons/barrel-stand.svg" alt="Barrel icon">Barrel stand</div>
|
||||||
|
<div class="legend-item"><img class="legend-icon" src="images/icons/shack.svg" alt="Shack icon">Shack</div>
|
||||||
|
<div class="legend-item"><img class="legend-icon" src="images/icons/outhouse.svg" alt="Outhouse icon">Outhouse</div>
|
||||||
|
<div class="legend-item"><img class="legend-icon" src="images/icons/fruit-tree.svg" alt="Fruit tree icon">Fruit tree</div>
|
||||||
|
`;
|
||||||
|
return div;
|
||||||
|
};
|
||||||
|
legend.addTo(map);
|
||||||
|
|
||||||
map.fitBounds([
|
map.fitBounds([
|
||||||
[47.4865,-93.4068],
|
[47.4865,-93.4068],
|
||||||
[47.4992,-93.3746],
|
[47.4992,-93.3746],
|
||||||
|
|
|
||||||
|
|
@ -259,6 +259,8 @@
|
||||||
<node id='-29155' action='modify' visible='true' lat='47.49449114351' lon='-93.3913093067' />
|
<node id='-29155' action='modify' visible='true' lat='47.49449114351' lon='-93.3913093067' />
|
||||||
<node id='-29162' action='modify' visible='true' lat='47.49262674355' lon='-93.38995210893' />
|
<node id='-29162' action='modify' visible='true' lat='47.49262674355' lon='-93.38995210893' />
|
||||||
<node id='-29163' action='modify' visible='true' lat='47.49264441375' lon='-93.39026726849' />
|
<node id='-29163' action='modify' visible='true' lat='47.49264441375' lon='-93.39026726849' />
|
||||||
|
<node id='-32571' action='modify' visible='true' lat='47.49649683005' lon='-93.38725179702' />
|
||||||
|
<node id='-32572' action='modify' visible='true' lat='47.4961144555' lon='-93.38709086448' />
|
||||||
<way id='-598' action='modify' visible='true'>
|
<way id='-598' action='modify' visible='true'>
|
||||||
<nd ref='-28768' />
|
<nd ref='-28768' />
|
||||||
<nd ref='-28769' />
|
<nd ref='-28769' />
|
||||||
|
|
@ -335,20 +337,6 @@
|
||||||
<nd ref='-28789' />
|
<nd ref='-28789' />
|
||||||
<tag k='type' v='trail' />
|
<tag k='type' v='trail' />
|
||||||
</way>
|
</way>
|
||||||
<way id='-624' action='modify' visible='true'>
|
|
||||||
<nd ref='-28792' />
|
|
||||||
<nd ref='-28806' />
|
|
||||||
<nd ref='-28794' />
|
|
||||||
<nd ref='-28795' />
|
|
||||||
<nd ref='-28796' />
|
|
||||||
<nd ref='-28797' />
|
|
||||||
<nd ref='-28798' />
|
|
||||||
<nd ref='-28799' />
|
|
||||||
<nd ref='-28800' />
|
|
||||||
<nd ref='-28801' />
|
|
||||||
<nd ref='-28802' />
|
|
||||||
<tag k='type' v='trail' />
|
|
||||||
</way>
|
|
||||||
<way id='-633' action='modify' visible='true'>
|
<way id='-633' action='modify' visible='true'>
|
||||||
<nd ref='-28793' />
|
<nd ref='-28793' />
|
||||||
<nd ref='-28803' />
|
<nd ref='-28803' />
|
||||||
|
|
@ -362,31 +350,35 @@
|
||||||
<nd ref='-28806' />
|
<nd ref='-28806' />
|
||||||
<tag k='type' v='trail' />
|
<tag k='type' v='trail' />
|
||||||
</way>
|
</way>
|
||||||
<way id='-639' action='modify' visible='true'>
|
|
||||||
<nd ref='-28804' />
|
|
||||||
<nd ref='-28807' />
|
|
||||||
<nd ref='-28808' />
|
|
||||||
<nd ref='-28809' />
|
|
||||||
<nd ref='-28810' />
|
|
||||||
<nd ref='-28811' />
|
|
||||||
<nd ref='-28812' />
|
|
||||||
<nd ref='-28813' />
|
|
||||||
<nd ref='-28814' />
|
|
||||||
<nd ref='-28815' />
|
|
||||||
<nd ref='-28816' />
|
|
||||||
<tag k='type' v='trail' />
|
|
||||||
</way>
|
|
||||||
<way id='-650' action='modify' visible='true'>
|
<way id='-650' action='modify' visible='true'>
|
||||||
|
<nd ref='-28792' />
|
||||||
|
<nd ref='-28806' />
|
||||||
|
<nd ref='-28794' />
|
||||||
|
<nd ref='-28795' />
|
||||||
|
<nd ref='-28796' />
|
||||||
|
<nd ref='-28797' />
|
||||||
|
<nd ref='-28798' />
|
||||||
|
<nd ref='-28799' />
|
||||||
|
<nd ref='-28800' />
|
||||||
|
<nd ref='-28801' />
|
||||||
|
<nd ref='-28802' />
|
||||||
|
<nd ref='-28915' />
|
||||||
|
<nd ref='-32572' />
|
||||||
|
<nd ref='-32571' />
|
||||||
<nd ref='-28821' />
|
<nd ref='-28821' />
|
||||||
<nd ref='-28819' />
|
<nd ref='-28819' />
|
||||||
<nd ref='-28816' />
|
<nd ref='-28816' />
|
||||||
<nd ref='-28818' />
|
<nd ref='-28815' />
|
||||||
<tag k='type' v='shooting_lane' />
|
<nd ref='-28814' />
|
||||||
</way>
|
<nd ref='-28813' />
|
||||||
<way id='-656' action='modify' visible='true'>
|
<nd ref='-28812' />
|
||||||
<nd ref='-28816' />
|
<nd ref='-28811' />
|
||||||
<nd ref='-28817' />
|
<nd ref='-28810' />
|
||||||
<tag k='type' v='shooting_lane' />
|
<nd ref='-28809' />
|
||||||
|
<nd ref='-28808' />
|
||||||
|
<nd ref='-28807' />
|
||||||
|
<nd ref='-28804' />
|
||||||
|
<tag k='type' v='trail' />
|
||||||
</way>
|
</way>
|
||||||
<way id='-780' action='modify' visible='true'>
|
<way id='-780' action='modify' visible='true'>
|
||||||
<nd ref='-28886' />
|
<nd ref='-28886' />
|
||||||
|
|
@ -425,12 +417,6 @@
|
||||||
<nd ref='-28904' />
|
<nd ref='-28904' />
|
||||||
<tag k='type' v='trail' />
|
<tag k='type' v='trail' />
|
||||||
</way>
|
</way>
|
||||||
<way id='-838' action='modify' visible='true'>
|
|
||||||
<nd ref='-28915' />
|
|
||||||
<nd ref='-28802' />
|
|
||||||
<nd ref='-28916' />
|
|
||||||
<tag k='type' v='shooting_lane' />
|
|
||||||
</way>
|
|
||||||
<way id='-840' action='modify' visible='true'>
|
<way id='-840' action='modify' visible='true'>
|
||||||
<nd ref='-28917' />
|
<nd ref='-28917' />
|
||||||
<nd ref='-28918' />
|
<nd ref='-28918' />
|
||||||
|
|
@ -657,4 +643,15 @@
|
||||||
<nd ref='-28776' />
|
<nd ref='-28776' />
|
||||||
<tag k='type' v='trail' />
|
<tag k='type' v='trail' />
|
||||||
</way>
|
</way>
|
||||||
|
<way id='-1246' action='modify' visible='true'>
|
||||||
|
<nd ref='-28818' />
|
||||||
|
<nd ref='-28816' />
|
||||||
|
<nd ref='-28817' />
|
||||||
|
<tag k='type' v='shooting_lane' />
|
||||||
|
</way>
|
||||||
|
<way id='-1265' action='modify' visible='true'>
|
||||||
|
<nd ref='-28802' />
|
||||||
|
<nd ref='-28916' />
|
||||||
|
<tag k='type' v='shooting_lane' />
|
||||||
|
</way>
|
||||||
</osm>
|
</osm>
|
||||||
|
|
|
||||||
8
resources/gps_trace.geojson
Normal file
4018
resources/lawrence-2025a.gpx
Normal file
BIN
resources/session.joz
Normal file
24
resources/style.mapcss
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
meta {
|
||||||
|
title: "Hunting Trails Preview";
|
||||||
|
version: "1.0";
|
||||||
|
description: "Styles for road/trail/shooting lane cleanup work.";
|
||||||
|
}
|
||||||
|
|
||||||
|
way[type=road] {
|
||||||
|
width: 8;
|
||||||
|
color: #654321;
|
||||||
|
opacity: 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
way[type=trail] {
|
||||||
|
width: 3;
|
||||||
|
color: #800000;
|
||||||
|
opacity: 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
way[type=shooting_lane] {
|
||||||
|
width: 2;
|
||||||
|
color: #000000;
|
||||||
|
dashes: 3,3;
|
||||||
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#!/usr/bin/env nix-shell
|
#!/usr/bin/env nix-shell
|
||||||
#!nix-shell --quiet -p python312 -p python312Packages.pillow -i python
|
#!nix-shell --quiet -p python3 -p python3Packages.pillow -i python
|
||||||
|
|
||||||
# https://svc.pictometry.com/Image/D2B06344-7A2D-5BD0-FC89-DFDDC9888C41/wmts?SERVICE=WMTS&REQUEST=GetCapabilities
|
# https://svc.pictometry.com/Image/D2B06344-7A2D-5BD0-FC89-DFDDC9888C41/wmts?SERVICE=WMTS&REQUEST=GetCapabilities
|
||||||
|
|
||||||
|
|
|
||||||