Compare commits

..

10 commits

33 changed files with 4642 additions and 315 deletions

3
.gitignore vendored
View file

@ -1,2 +1,5 @@
data/plats.geojson
data/track.geojson
satellite/
images/thumbs/*
unused/

View file

@ -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
./scripts/get_plats.py data/plats.geojson
@ -5,6 +19,13 @@ data/plats.json: scripts/get_plats.py
satellite:
./scripts/download_satellite.py
.PHONY: deploy
deploy: data/plats.json satellite
rsync -avz --exclude=unused/ --delete ./ bert:/srv/www/lawrencedeerclub.chandlerswift.com/
data/track.geojson: resources/deercamp.osm
OSM_USE_CUSTOM_INDEXING=NO ogr2ogr \
-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" \
$@ $<

View file

@ -1,266 +1,252 @@
{
"stands": [
{
"name": "Fridge",
"image": "fridge.jpg",
"type": "barrel",
"view": [
"fridge1.jpg",
"fridge2.jpg",
"fridge3.jpg"
],
"location": [47.492991, -93.391120],
"attributes": {
"Year Established": "2010",
"Description": "Formerly \"Alan's Barrel\" (located where Alan's castle is now). Originally built (probably 1970s or 1980s) by some combination of Alan, Vernon, and Irving from old windmills. Moved to the driveway in 2010 when Alan's castle was built. Shortly thereafter, the southeast leg was hit with the brushmower, rendering it unusable, and replaced with a refrigerator. The large hole in the barrel was the result of an accidental discharge of Alan's .44 Magnum pistol."
}
},
{
"name": "Tupperware",
"image": "tupperware.jpg",
"type": "castle",
"view": [
"tupperware1.jpg",
"tupperware2.jpg",
"tupperware3.jpg"
],
"location": [47.495626, -93.394064],
"attributes": {
"Year Established": "2017",
"Description": "Stand and platform purchased new at a steep discount from RMI in Little Falls (https://rotomoldinginc.com/). Dave and Celine installed and assembled in a separate late-September trip. This stand replaced a post stand that had stood in this location for several years; \"For a few years, every single time I went out there, I saw a deer!\" \u2014Dave Swift. The shooting lane to the north of the stand was naturally free of trees, which made construction of a new shooting lane very straightforward. This location was especially desirable because it was our only stand placed in the NW 40."
}
},
{
"name": "Castle",
"image": "castle.jpg",
"type": "castle",
"view": [
"castle1.jpg",
"castle2.jpg",
"castle3.jpg",
"castle4.jpg"
],
"location": [47.495831, -93.391287],
"attributes": {
"Year Established": "Late 70s/early 80s",
"Description": "This stand was built and originally occupied largely by Irving, and was the first enclosed stand on the property. The stand was assessed as healthy in September 2006, and was discovered on the ground that November. A new castle was built on the original base in 2007. The original wooden base was replaced with a metal base of Tim's design in 2023."
}
},
{
"name": "Ladder",
"image": "ladder.jpg",
"type": "tree",
"view": [
"ladder1.jpg",
"ladder2.jpg",
"ladder3.jpg"
],
"location": [47.496707, -93.388462],
"attributes": {
"Year Established": "\"Predates me, I think\" —Dave",
"Description": ""
}
},
{
"name": "Alan's",
"image": "alans.jpg",
"type": "castle",
"view": [
"alans1.jpg",
"alans2.jpg",
"alans3.jpg"
],
"location": [47.494571, -93.390979],
"attributes": {
"Year Established": "1970s (TODO)",
"Description": "Half-wall platform in 2010; enclosed stands built 2012 Zack Larson"
}
},
{
"name": "East Barrel",
"image": "eastbarrel.jpg",
"type": "barrel",
"view": [
"eastbarrel1.jpg",
"eastbarrel2.jpg",
"eastbarrel3.jpg",
"eastbarrel4.jpg"
],
"location": [47.495200, -93.387020],
"attributes": {
"Year Established": "",
"Description": "70s or 80s, repurposed windmill stand?"
}
},
{
"name": "Iron Castle",
"image": "ironcastle.jpg",
"type": "castle",
"view": [
"ironcastle1.jpg",
"ironcastle2.jpg"
],
"location": [47.494041, -93.386468],
"attributes": {
"Year Established": "1990s?",
"Description": "Also \"Iron tree\". Lawrence Deer Club's second castle, after The Castle. A successor to the Mile-high stand, purchased from Fleet Farm for $400. Installed further west than the original stand to stay on our property. Camo paint job by Paul Adams."
}
},
{
"name": "Mile-high stand (TODO: rename)",
"image": "irontree.jpg",
"type": "tree",
"view": [
"irontree1.jpg",
"irontree2.jpg"
],
"location": [47.494242, -93.385992],
"attributes": {
"Year Established": "",
"Description": "Occasionally also \"Iron tree\" (as opposed to \"Iron Castle\"). Current location is maybe 8 feet lower than historic height. Likely the location for Scott's famous thirteen-shot kill. Almost always Richard's hunting spot of choice. As he aged (perhaps around when he turned 70 years old in 1994), an easier-to-climb stand was needed, so the Iron Castle was installed as a successor. TODO: whose stand is this? Dad thinks maybe Kim?"
}
},
{
"name": "Three-Legged Barrel",
"image": "threeleggedbarrel.jpg",
"type": "barrel",
"view": [
"threeleggedbarrel1.jpg",
"threeleggedbarrel2.jpg",
"threeleggedbarrel3.jpg"
],
"stories": [
"Dave: That stand has never been particularly productive. I only ever saw one deer out of that stand -- a decent buck. The deer was to the east, so I needed to take a left-handed shot…and the rifle went \"click\" because I hadn't fully closed the breech. The deer ran off. A few moments later, a shot from the north: Paul Adams had gotten the deer."
],
"location": [47.492138, -93.387125],
"attributes": {
"Year Established": "",
"Description": "70s or 80s, not windmill parts. Maybe built by Alan? Originally not well-liked because of instability. 2023 barrel replaced and ladder flipped upside down/steps on barrel for easier climbing."
}
},
{
"name": "Hummock",
"image": "hummock.jpg",
"type": "tree",
"active": false,
"view": [
"hummock1.jpg",
"hummock2.jpg"
],
"location": [47.491351, -93.384600],
"attributes": {
"Year Established": "",
"Description": "\"Prolific\" --Dave -- a good view of a lake to the south, and a bog to the east. "
}
},
{
"name": "Sofa",
"image": "sofa.jpg",
"type": "tree",
"view": [
"sofa1.jpg",
"sofa2.jpg",
"sofa3.jpg",
"sofa4.jpg"
],
"location": [47.490232, -93.386493],
"attributes": {
"Year Established": "1990ish, shortly before Dave's first year",
"Description": "Alternately \"couch\" or \"davenport\". Shooting lanes went in either 2005 or 2006 (per Google Earth historic imagery), shortly after JBS' predecessors logged the area. Major rebuild in 2023, after half of tree above fork fell over. New ladder made out of square steel tubing from GSL batting cage, installed in 2020."
}
},
{
"name": "Ridge",
"image": "ridge.jpg",
"type": "tree",
"view": [
"ridge1.jpg",
"ridge2.jpg"
],
"location": [47.489358, -93.387909],
"attributes": {
"Year Established": "TODO",
"Description": "John Graupmann's metal two-person stand. Installed 2015-2017 (before 2018 logging completed). Path rerouted after logging."
}
},
{
"name": "Point",
"image": "point.jpg",
"type": "castle",
"view": [
"point1.jpg",
"point2.jpg",
"point3.jpg"
],
"attributes": {
"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(?)"
},
"location": [47.488840, -93.389712]
[
{
"name": "Fridge",
"image": "fridge.jpg",
"type": "barrel-stand",
"view": [
"fridge1.jpg",
"fridge2.jpg",
"fridge3.jpg"
],
"location": [47.492991, -93.391120],
"attributes": {
"Year Established": "2010",
"Description": "Formerly \"Alan's Barrel\" (located where Alan's castle is now). Originally built (probably 1970s or 1980s) by some combination of Alan, Vernon, and Irving from old windmills. Moved to the driveway in 2010 when Alan's castle was built. Shortly thereafter, the southeast leg was hit with the brushmower, rendering it unusable, and replaced with a refrigerator. The large hole in the barrel was the result of an accidental discharge of Alan's .44 Magnum pistol."
}
],
"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",
"location": [],
"attributes": {
"Year Planted": 2019,
"_TODO": "#TODO",
"Description": ""
}
},
{
"type": "Honeycrisp",
"location": [],
"attributes": {
"Year Planted": 2019,
"_TODO": "#TODO",
"Description": ""
}
},
{
"type": "Honeycrisp",
"location": [],
"attributes": {
"Year Planted": 2019,
"_TODO": "#TODO",
"Description": ""
}
},
{
"type": "Honeycrisp",
"location": [],
"attributes": {
"Year Planted": 2019,
"_TODO": "#TODO",
"Description": ""
}
},
{
"name": "Tupperware",
"image": "tupperware.jpg",
"type": "castle-stand",
"view": [
"tupperware1.jpg",
"tupperware2.jpg",
"tupperware3.jpg"
],
"location": [47.495626, -93.394064],
"attributes": {
"Year Established": "2017",
"Description": "Stand and platform purchased new at a steep discount from RMI in Little Falls (https://rotomoldinginc.com/). Dave and Celine installed and assembled in a separate late-September trip. This stand replaced a post stand that had stood in this location for several years; \"For a few years, every single time I went out there, I saw a deer!\" \u2014Dave Swift. The shooting lane to the north of the stand was naturally free of trees, which made construction of a new shooting lane very straightforward. This location was especially desirable because it was our only stand placed in the NW 40."
}
],
"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",
"hunter": "Chris Lemke",
"animal": "9pt buck",
"stand": "Sofa",
"notes": "Tracked after dark during a snowstorm",
"_photo": null
},
{
"name": "Castle",
"image": "castle.jpg",
"type": "castle-stand",
"view": [
"castle1.jpg",
"castle2.jpg",
"castle3.jpg",
"castle4.jpg"
],
"location": [47.495831, -93.391287],
"attributes": {
"Year Established": "Late 70s/early 80s",
"Description": "This stand was built and originally occupied largely by Irving, and was the first enclosed stand on the property. The stand was assessed as healthy in September 2006, and was discovered on the ground that November. A new castle was built on the original base in 2007. The original wooden base was replaced with a metal base of Tim's design in 2023."
}
]
}
},
{
"name": "Ladder",
"image": "ladder.jpg",
"type": "ladder-stand",
"view": [
"ladder1.jpg",
"ladder2.jpg",
"ladder3.jpg"
],
"location": [47.496707, -93.388462],
"attributes": {
"Year Established": "\"Predates me, I think\" —Dave",
"Description": ""
}
},
{
"name": "Alan's",
"image": "alans.jpg",
"type": "castle-stand",
"view": [
"alans1.jpg",
"alans2.jpg",
"alans3.jpg"
],
"location": [47.494571, -93.390979],
"attributes": {
"Year Established": "1970s (TODO)",
"Description": "Half-wall platform in 2010; enclosed stands built 2012 Zack Larson"
}
},
{
"name": "East Barrel",
"image": "eastbarrel.jpg",
"type": "barrel-stand",
"view": [
"eastbarrel1.jpg",
"eastbarrel2.jpg",
"eastbarrel3.jpg",
"eastbarrel4.jpg"
],
"location": [47.495200, -93.387020],
"attributes": {
"Year Established": "",
"Description": "70s or 80s, repurposed windmill stand?"
}
},
{
"name": "Iron Castle",
"image": "ironcastle.jpg",
"type": "castle-stand",
"view": [
"ironcastle1.jpg",
"ironcastle2.jpg"
],
"location": [47.494041, -93.386468],
"attributes": {
"Year Established": "1990s?",
"Description": "Also \"Iron tree\". Lawrence Deer Club's second castle, after The Castle. A successor to the Mile-high stand, purchased from Fleet Farm for $400. Installed further west than the original stand to stay on our property. Camo paint job by Paul Adams."
}
},
{
"name": "Mile-high stand (TODO: rename)",
"image": "irontree.jpg",
"type": "ladder-stand",
"view": [
"irontree1.jpg",
"irontree2.jpg"
],
"location": [47.494242, -93.385992],
"attributes": {
"Year Established": "",
"Description": "Occasionally also \"Iron tree\" (as opposed to \"Iron Castle\"). Current location is maybe 8 feet lower than historic height. Likely the location for Scott's famous thirteen-shot kill. Almost always Richard's hunting spot of choice. As he aged (perhaps around when he turned 70 years old in 1994), an easier-to-climb stand was needed, so the Iron Castle was installed as a successor. TODO: whose stand is this? Dad thinks maybe Kim?"
}
},
{
"name": "Three-Legged Barrel",
"image": "threeleggedbarrel.jpg",
"type": "barrel-stand",
"view": [
"threeleggedbarrel1.jpg",
"threeleggedbarrel2.jpg",
"threeleggedbarrel3.jpg"
],
"stories": [
"Dave: That stand has never been particularly productive. I only ever saw one deer out of that stand -- a decent buck. The deer was to the east, so I needed to take a left-handed shot…and the rifle went \"click\" because I hadn't fully closed the breech. The deer ran off. A few moments later, a shot from the north: Paul Adams had gotten the deer."
],
"location": [47.492138, -93.387125],
"attributes": {
"Year Established": "",
"Description": "70s or 80s, not windmill parts. Maybe built by Alan? Originally not well-liked because of instability. 2023 barrel replaced and ladder flipped upside down/steps on barrel for easier climbing."
}
},
{
"name": "Hummock",
"image": "hummock.jpg",
"type": "ladder-stand",
"active": false,
"view": [
"hummock1.jpg",
"hummock2.jpg"
],
"location": [47.491351, -93.384600],
"attributes": {
"Year Established": "",
"Description": "\"Prolific\" --Dave -- a good view of a lake to the south, and a bog to the east. "
}
},
{
"name": "Sofa",
"image": "sofa.jpg",
"type": "ladder-stand",
"view": [
"sofa1.jpg",
"sofa2.jpg",
"sofa3.jpg",
"sofa4.jpg"
],
"location": [47.490232, -93.386493],
"attributes": {
"Year Established": "1990ish, shortly before Dave's first year",
"Description": "Alternately \"couch\" or \"davenport\". Shooting lanes went in either 2005 or 2006 (per Google Earth historic imagery), shortly after JBS' predecessors logged the area. Major rebuild in 2023, after half of tree above fork fell over. New ladder made out of square steel tubing from GSL batting cage, installed in 2020."
}
},
{
"name": "Ridge",
"image": "ridge.jpg",
"type": "ladder-stand",
"view": [
"ridge1.jpg",
"ridge2.jpg"
],
"location": [47.489358, -93.387909],
"attributes": {
"Year Established": "TODO",
"Description": "John Graupmann's metal two-person stand. Installed 2015-2017 (before 2018 logging completed). Path rerouted after logging."
}
},
{
"name": "Point",
"image": "point.jpg",
"type": "castle-stand",
"view": [
"point1.jpg",
"point2.jpg",
"point3.jpg"
],
"location": [47.488840, -93.389712],
"attributes": {
"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(?)"
}
},
{
"name": "Apple tree",
"type": "fruit-tree",
"location": [47.492464, -93.391048],
"attributes": {
"Year Planted": 2019
}
},
{
"name": "Apple tree",
"type": "fruit-tree",
"location": [47.492561, -93.391028],
"attributes": {
"Year Planted": 2019
}
},
{
"name": "Apple tree",
"type": "fruit-tree",
"location": [47.492421, -93.389521],
"attributes": {
"Year Planted": 2019
}
},
{
"name": "Apple tree",
"type": "fruit-tree",
"location": [47.492584, -93.389489],
"attributes": {
"Year Planted": 2019
}
},
{
"name": "Shack",
"image": "shack.jpg",
"type": "shack",
"location": [47.492260, -93.390626],
"attributes": {
"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."
}
}
]

File diff suppressed because one or more lines are too long

View 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

View 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

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.6 KiB

51
images/icons/hook.svg Normal file
View 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

View 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

View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

View file

@ -124,6 +124,48 @@
user-select: none;
}
/* 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>
</head>
<body>
@ -341,19 +383,31 @@
});
});
for (let stand of data.stands) {
if (stand.location) {
const marker = L.marker(stand.location).addTo(map);
for (let poi of data) {
if (poi.location) {
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');
popupContentWrapper.classList.add('popup');
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 += '</dl>';
popupContentWrapper.innerHTML = `
<h2>${stand.name}</h2>
<a href="images/${stand.image}" onclick="displayLightboxOnClick(this, event)"><img style="width: min(80vw, 300px);" src="images/thumbs/${stand.image}"></a>
<h2>${poi.name}</h2>
<a href="images/${poi.image}" onclick="displayLightboxOnClick(this, event)"><img style="width: min(80vw, 300px);" src="images/thumbs/${poi.image}"></a>
${attributesString}
`;
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([
[47.4865,-93.4068],
[47.4992,-93.3746],

View file

@ -259,6 +259,8 @@
<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='-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'>
<nd ref='-28768' />
<nd ref='-28769' />
@ -335,20 +337,6 @@
<nd ref='-28789' />
<tag k='type' v='trail' />
</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'>
<nd ref='-28793' />
<nd ref='-28803' />
@ -362,31 +350,35 @@
<nd ref='-28806' />
<tag k='type' v='trail' />
</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'>
<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='-28819' />
<nd ref='-28816' />
<nd ref='-28818' />
<tag k='type' v='shooting_lane' />
</way>
<way id='-656' action='modify' visible='true'>
<nd ref='-28816' />
<nd ref='-28817' />
<tag k='type' v='shooting_lane' />
<nd ref='-28815' />
<nd ref='-28814' />
<nd ref='-28813' />
<nd ref='-28812' />
<nd ref='-28811' />
<nd ref='-28810' />
<nd ref='-28809' />
<nd ref='-28808' />
<nd ref='-28807' />
<nd ref='-28804' />
<tag k='type' v='trail' />
</way>
<way id='-780' action='modify' visible='true'>
<nd ref='-28886' />
@ -425,12 +417,6 @@
<nd ref='-28904' />
<tag k='type' v='trail' />
</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'>
<nd ref='-28917' />
<nd ref='-28918' />
@ -657,4 +643,15 @@
<nd ref='-28776' />
<tag k='type' v='trail' />
</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>

File diff suppressed because one or more lines are too long

4018
resources/lawrence-2025a.gpx Normal file

File diff suppressed because it is too large Load diff

BIN
resources/session.joz Normal file

Binary file not shown.

24
resources/style.mapcss Normal file
View 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;
}

View file

@ -1,5 +1,5 @@
#!/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