Merge branch 'pr/hailhydrant' into develop

This commit is contained in:
pietervdvn 2021-04-12 16:55:01 +02:00
commit 0abaf5c139
15 changed files with 930 additions and 10 deletions

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M35 8H13c-.552 0-1 .448-1 1s.448 1 1 1h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2c.553 0 1-.448 1-1s-.447-1-1-1zm1 5c0 .552-.447 1-1 1H13c-.552 0-1-.448-1-1s.448-1 1-1h22c.553 0 1 .448 1 1z"/><path fill="#DD2E44" d="M32 14H14s.041-2-2.979-2H5.146C0 12 0 19.959 0 19.959V27c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-9c0-2.209-1.791-4-4-4z"/><path fill="#F5F8FA" d="M2 22h32v3H2z"/><circle fill="#292F33" cx="7" cy="31" r="4"/><circle fill="#8899A6" cx="7" cy="31" r="2"/><circle fill="#292F33" cx="28" cy="31" r="4"/><circle fill="#8899A6" cx="28" cy="31" r="2"/><path fill="#55ACEE" d="M7 20H2s0-6 3-6h2v6zm5 0H9v-6h1c1 0 2 1 2 2v4z"/><path fill="#FFAC33" d="M8 11c0 .552-.448 1-1 1H5c-.552 0-1-.448-1-1s.448-1 1-1h2c.552 0 1 .448 1 1z"/><path fill="#3B88C3" d="M10 11c0 .552-.448 1-1 1H7c-.552 0-1-.448-1-1s.448-1 1-1h2c.552 0 1 .448 1 1z"/></svg>

After

Width:  |  Height:  |  Size: 938 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M18 10c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2s2 .9 2 2v3c0 1.1-.9 2-2 2z"/><circle fill="#DD2E44" cx="18" cy="15" r="6"/><path fill="#DD2E44" d="M16 8h4v4h-4zm6 28h-8c-1.1 0-2-.9-2-2V15h12v19c0 1.1-.9 2-2 2z"/><path fill="#292F33" d="M9.406 35.849l-4.492-1.263c-.529-.149-.838-.533-.685-.853l4.439-9.311c.458-.96 1.278-1.621 1.823-1.467l.22.062c.545.153.9 1.144.791 2.202l-1.065 10.26c-.038.353-.501.519-1.031.37z"/><path fill="#66757F" d="M26.022 2.248l-9.848 1.736c-.542.095-1.063-.27-1.158-.811-.095-.542.27-1.063.811-1.158L25.675.279c.542-.096 1.063.27 1.158.811.095.542-.27 1.063-.811 1.158z"/><path fill="#66757F" d="M25.055 7.36l-9.397-3.42c-.517-.188-.786-.765-.598-1.282.188-.517.765-.786 1.282-.598l9.397 3.42c.517.188.786.765.598 1.282-.188.517-.765.786-1.282.598z"/><path fill="#292F33" d="M10.524 24.407c-.042 0-.085-.004-.128-.011-.408-.07-.682-.459-.612-.867.726-4.203.161-6.198-.336-7.958-.386-1.364-.75-2.653-.33-4.556C10.052 6.786 13.745 5.25 16 5.25c.414 0 .75.336.75.75s-.336.75-.75.75c-1.225 0-4.586.824-5.417 4.589-.339 1.535-.067 2.495.309 3.824.515 1.819 1.155 4.083.372 8.622-.064.364-.382.622-.74.622z"/><circle fill="#CCD6DD" cx="16" cy="7" r="3"/><circle fill="#DD2E44" cx="16" cy="7" r="2"/><path fill="#EA596E" d="M16.5 10c-.828 0-1.5 1.567-1.5 3.5v22c0 .275.225.5.5.5h2c.275 0 .5-.225.5-.5v-22c0-1.933-.672-3.5-1.5-3.5z"/><path fill="#F5F8FA" d="M20.5 18h-5c-.825 0-1.5-.675-1.5-1.5v-2c0-.825.675-1.5 1.5-1.5h5c.825 0 1.5.675 1.5 1.5v2c0 .825-.675 1.5-1.5 1.5z"/><path fill="#77B255" d="M16 5c-.552 0-1.052.224-1.414.586L16 7l1.414-1.414C17.052 5.224 16.552 5 16 5z"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M29 17v5c0 4.142-4.896 9-11 9S7 26.142 7 22v-5H5v5c0 5.246 5.268 11 13 11s13-5.754 13-11v-5h-2z"/><path fill="#C1694F" d="M22 32.083C22 33.142 21.142 34 20.083 34h-4.166C14.858 34 14 33.142 14 32.083v-.166c0-1.059.858-1.917 1.917-1.917h4.166c1.059 0 1.917.858 1.917 1.917v.166z"/><path fill="#EA596E" d="M2 17c0-2.762 6.611-5 16-5s16 2.238 16 5c0 2.761-6.611 6-16 6S2 19.761 2 17z"/><path fill="#DD2E44" d="M3 16C3 9 9.198 2 18 2s15 7 15 14c0 1-6.198 4-15 4S3 17 3 16z"/><path fill="#A0041E" d="M25 19c-.553 0-1-.448-1-1 0-7.728-1.93-13.625-1.949-13.684-.174-.524.109-1.09.634-1.265.522-.173 1.089.109 1.264.632.08.24 1.876 5.71 2.04 13.223 1.139-.161 3.165-.602 5.564-1.801.494-.247 1.094-.047 1.342.447.247.494.047 1.095-.447 1.342C28.284 18.976 25.132 19 25 19zm-14 0c-.132 0-3.284-.024-7.447-2.106-.494-.247-.694-.848-.447-1.342.247-.493.847-.695 1.342-.447 2.399 1.2 4.425 1.64 5.565 1.801.164-7.513 1.959-12.983 2.039-13.223.175-.524.744-.805 1.264-.632.524.174.808.741.633 1.265C13.929 4.374 12 10.271 12 18c0 .552-.448 1-1 1z"/><path fill="#FFF" d="M21 12h-2v-2c0-.552-.448-1-1-1s-1 .448-1 1v2h-2c-.552 0-1 .448-1 1s.448 1 1 1h2v2c0 .552.448 1 1 1s1-.448 1-1v-2h2c.553 0 1-.448 1-1s-.447-1-1-1z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,520 @@
{
"id": "hailhydrant",
"title": {
"en": "Hydrants, Extinguishers, Fire stations, and Rescue stations."
},
"shortDescription": {
"en": "Map to show hydrants, extinguishers, fire stations, and rescue stations."
},
"description": {
"en": "On this map you can find and update hydrants, fire stations, rescue stations, and extinguishers in your favorite neighborhoods. \n\nYou can track your precise location (mobile only) and select layers that are relevant for you in the bottom left corner. You can also use this tool to add or edit pins (points of interest) to the map and provide additional details by answering available questions. \n\nAll changes you make will automatically be saved in the global database of OpenStreetMap and can be freely re-used by others."
},
"language": [
"en"
],
"maintainer": "",
"icon": "./assets/themes/hailhydrant/logo.svg",
"version": "0",
"startLat": 13.67801,
"startLon": 121.6625,
"startZoom": 6,
"widenFactor": 0.05,
"socialImage": "",
"layers": [
{
"id": "hydrants",
"name": {
"en": "Map of hydrants"
},
"minzoom": 14,
"source": {
"osmTags": {
"and": [
"emergency=fire_hydrant"
]
}
},
"title": {
"render": {
"en": "Hydrant"
}
},
"description": {
"en": "Map layer to show fire hydrants."
},
"tagRenderings": [
"images",
{
"question": {
"en": "What color is the hydrant?"
},
"render": {
"en": "The hydrant color is {colour}"
},
"freeform": {
"key": "colour"
},
"mappings": [
{
"if": {
"and": [
"colour=yellow"
]
},
"then": {
"en": "The hydrant color is yellow."
}
},
{
"if": {
"and": [
"colour=red"
]
},
"then": {
"en": "The hydrant color is red."
}
}
]
},
{
"question": {
"en": "What type of hydrant is it?"
},
"freeform": {
"key": "fire_hydrant:type"
},
"render": {
"en": " Hydrant type: {fire_hydrant:type}"
},
"mappings": [
{
"if": {
"and": [
"fire_hydrant:type=pillar"
]
},
"then": {
"en": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Pillar type."
}
},
{
"if": {
"and": [
"fire_hydrant:type=pipe"
]
},
"then": {
"en": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Pipe type."
}
},
{
"if": {
"and": [
"fire_hydrant:type=wall"
]
},
"then": {
"en": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Wall type."
}
},
{
"if": {
"and": [
"fire_hydrant:type=underground"
]
},
"then": {
"en": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Underground type."
}
}
]
},
{
"question": {
"en": "Update the lifecycle status of the hydrant."
},
"render": {
"en": "Lifecycle status"
},
"freeform": {
"key": "disused:emergency"
},
"mappings": [
{
"if": {
"and": [
"emergency=fire_hydrant"
]
},
"then": {
"en": "The hydrant is (fully or partially) working."
}
},
{
"if": {
"and": [
"disused:emergency=fire_hydrant",
"emergency="
]
},
"then": {
"en": "The hydrant is unavailable."
}
},
{
"if": {
"and": [
"removed:emergency=fire_hydrant",
"emergency="
]
},
"then": {
"en": "The hydrant has been removed."
}
}
]
}
],
"hideUnderlayingFeaturesMinPercentage": 0,
"icon": {
"render": "./assets/themes/hailhydrant/hydrant.svg"
},
"width": {
"render": "8"
},
"iconSize": {
"render": "20,20,center"
},
"color": {
"render": "#00f"
},
"presets": [
{
"tags": [
"emergency=fire_hydrant"
],
"title": {
"en": "Fire hydrant"
},
"description": {
"en": "A hydrant is a connection point where firefighters can tap water. It might be located underground."
}
}
],
"wayHandling": 2
},
{
"id": "extinguisher",
"name": {
"en": "Map of fire extinguishers."
},
"minzoom": 14,
"source": {
"osmTags": {
"and": [
"emergency=fire_extinguisher"
]
}
},
"title": {
"render": {
"en": "Extinguishers"
}
},
"description": {
"en": "Map layer to show fire hydrants."
},
"tagRenderings": [
"images",
{
"render": {
"en": "Location: {location}"
},
"question": {
"en": "Where is it positioned?"
},
"mappings": [
{
"if": {
"and": [
"location=indoor"
]
},
"then": {
"en": "Found indoors."
}
},
{
"if": {
"and": [
"location=outdoor"
]
},
"then": {
"en": "Found outdoors."
}
}
],
"freeform": {
"key": "location"
}
}
],
"hideUnderlayingFeaturesMinPercentage": 0,
"icon": {
"render": "./assets/themes/hailhydrant/Twemoji12_1f9ef.svg"
},
"width": {
"render": "8"
},
"iconSize": {
"render": "20,20,center"
},
"color": {
"render": "#00f"
},
"presets": [
{
"tags": [
"emergency=fire_extinguisher"
],
"title": {
"en": "Fire extinguisher"
},
"description": {
"en": "A fire extinguisher is a small, portable device used to stop a fire"
}
}
],
"wayHandling": 1
},
{
"id": "fire_stations",
"name": {
"en": "Map of fire stations"
},
"minzoom": 12,
"source": {
"osmTags": {
"and": [
"amenity=fire_station"
]
}
},
"wayHandling": 2,
"title": {
"render": {
"en": "Fire Station"
}
},
"description": {
"en": "Map layer to show fire stations."
},
"tagRenderings": [
"images",
{
"freeform": {
"key": "name"
},
"question": {
"en": "What is the name of this station?"
},
"render": {
"en": "This station is called {name}."
}
},
{
"freeform": {
"key": "addr:street"
},
"question": {
"en": " What is the street name where the station located?"
},
"render": {
"en": "This station is along a highway called {addr:street}."
}
},
{
"question": {
"en": "Where is the station located? (e.g. name of neighborhood, villlage, or town)"
},
"freeform": {
"key": "addr:place"
},
"render": {
"en": "Th isstation is to be found within {addr:place}."
}
},
{
"question": {
"en": "What agency operates this station?"
},
"render": {
"en": "This station is operated by {operator}."
},
"freeform": {
"key": "operator"
},
"mappings": [
{
"if": {
"and": [
"operator=Bureau of Fire Protection",
"operator:type=government"
]
},
"then": {
"en": "Bureau of Fire Protection"
}
}
]
},
{
"question": {
"en": "How is the station operator classified??"
},
"render": {
"en": "The operator is a(n) {operator:type} entity."
},
"freeform": {
"key": "operator:type"
},
"mappings": [
{
"if": {
"and": [
"operator:type=government"
]
},
"then": {
"en": "The station is operated by the government."
}
},
{
"if": {
"and": [
"operator:type=community"
]
},
"then": {
"en": "The station is operated by a community-based, or informal organization."
}
},
{
"if": {
"and": [
"operator:type=ngo"
]
},
"then": {
"en": "The station is operated by a formal group of volunteers."
}
},
{
"if": {
"and": [
"operator:type=private"
]
},
"then": {
"en": "The station is privately operated."
}
}
]
}
],
"hideUnderlayingFeaturesMinPercentage": 0,
"icon": {
"render": "./assets/themes/hailhydrant/Twemoji12_1f692.svg"
},
"width": {
"render": "1"
},
"iconSize": {
"render": "35,35,center"
},
"color": {
"render": "#c22"
},
"presets": [
{
"tags": [
"amenity=fire_station"
],
"title": {
"en": "Fire station"
},
"description": {
"en": "A fire station is a place where the fire trucks and firefighters are located when not in operation."
}
}
]
},
{
"id": "rescuestation",
"name": {
"en": "Map of rescue stations"
},
"minzoom": 12,
"source": {
"osmTags": {
"and": [
"amenity=rescue_station"
]
}
},
"title": {
"render": {
"en": "Rescue Station"
}
},
"description": {
"en": "Map layer to show rescue stations."
},
"tagRenderings": [
"images",
{
"question": {
"en": "What is this entity called?"
},
"freeform": {
"key": "name"
},
"render": {
"en": "This entity is called {name}."
}
}
],
"hideUnderlayingFeaturesMinPercentage": 0,
"icon": {
"render": "./assets/themes/hailhydrant/Twemoji12_26d1.svg"
},
"width": {
"render": "1"
},
"iconSize": {
"render": "35,35,center"
},
"color": {
"render": "#00f"
},
"presets-disabled": [
{
"tags": [
"amenity=rescue_station"
],
"title": {
"en": "Rescue station"
},
"description": {
"en": "Add a rescue or emergency service station to the map"
}
}
],
"wayHandling": 2
}
],
"defaultBackgroundId": "HDM_HOT"
}

View file

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="48" height="48" id="svg2">
<defs id="defs4">
<linearGradient id="lg1">
<stop id="stop5" style="stop-color:#ffffff;stop-opacity:1" offset="0"/>
<stop id="stop7" style="stop-color:#ffffff;stop-opacity:0" offset="1"/>
</linearGradient>
<linearGradient id="lg2">
<stop style="stop-color:#eeeeec;stop-opacity:1" offset="0"/>
<stop style="stop-color:#eeeeec;stop-opacity:0" offset="1"/>
</linearGradient>
<linearGradient id="lg3">
<stop style="stop-color:#000000;stop-opacity:1" offset="0"/>
<stop style="stop-color:#000000;stop-opacity:0" offset="1"/>
</linearGradient>
<linearGradient id="lg4">
<stop style="stop-color:#cc0000;stop-opacity:1" offset="0"/>
<stop style="stop-color:#ff9494;stop-opacity:1" offset="1"/>
</linearGradient>
<linearGradient id="lg5">
<stop style="stop-color:#a40000;stop-opacity:1" offset="0"/>
<stop style="stop-color:#ff6767;stop-opacity:1" offset="0.62"/>
<stop style="stop-color:#cc0000;stop-opacity:1" offset="1"/>
</linearGradient>
<linearGradient id="lg6">
<stop style="stop-color:#ff7171;stop-opacity:1" offset="0"/>
<stop style="stop-color:#cc0000;stop-opacity:1" offset="1"/>
</linearGradient>
<linearGradient id="lg7">
<stop style="stop-color:#ffffff;stop-opacity:1" offset="0"/>
<stop style="stop-color:#ffffff;stop-opacity:0" offset="1"/>
</linearGradient>
<linearGradient id="lg8">
<stop style="stop-color:#f24e4e;stop-opacity:1" offset="0"/>
<stop style="stop-color:#c10000;stop-opacity:1" offset="1"/>
</linearGradient>
<linearGradient x1="0.016" y1="24.5" x2="15.5" y2="27.78" id="lg9" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.5,0,0,0.833,26.75,2.75)"/>
<linearGradient x1="30" y1="7.9" x2="30" y2="10.433" id="lg10" xlink:href="#lg8" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.333,0,0,2.088,-6.5,9)"/>
<linearGradient x1="6.5" y1="30.3" x2="15.5" y2="31" id="lg11" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.5,0,0,0.833,6.748,2.75)"/>
<linearGradient x1="30" y1="7.9" x2="30" y2="10.433" id="lg12" xlink:href="#lg8" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.333,0,0,2.088,-26.5,9)"/>
<linearGradient x1="-6.6" y1="-26.95" x2="4.3" y2="-16" id="lg13" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.25,0,0,1.25,22.25,53.5)"/>
<linearGradient x1="-1.277" y1="-24.137" x2="1" y2="-15.62" id="lg14" xlink:href="#lg6" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.2,0,0,1.2,22.3,52.5)"/>
<linearGradient x1="22" y1="25" x2="17" y2="25" id="lg15" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.277,0,0,1,3.22,-2.3)"/>
<linearGradient x1="22" y1="29" x2="18" y2="29" id="lg16" xlink:href="#lg2" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.5,0,0,1.14,-1,-3.7)"/>
<linearGradient x1="22" y1="25" x2="17" y2="25" id="lg17" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.277,0,0,1.135,-0.77,-2.87)"/>
<linearGradient x1="22" y1="29" x2="18" y2="29" id="lg18" xlink:href="#lg2" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.5,0,0,1.14,-5,-4.3)"/>
<linearGradient x1="22" y1="25" x2="17" y2="25" id="lg19" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.277,0,0,1,-4.77,-2.3)"/>
<linearGradient x1="22" y1="29" x2="18" y2="29" id="lg20" xlink:href="#lg2" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.5,0,0,1.14,-9,-3.79)"/>
<linearGradient x1="18.25" y1="16.375" x2="46.33" y2="16.375" id="lg21" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.19,0,0,0.122,18.8,4.4)"/>
<linearGradient x1="43.3" y1="11.686" x2="5.25" y2="11.686" id="lg22" xlink:href="#lg5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.194,0,0,0.213,18.8,3)"/>
<linearGradient x1="19.5" y1="22.64" x2="36.06" y2="22.64" id="lg3927" xlink:href="#lg6" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.534,0,0,0.355,11.5,3)"/>
<linearGradient x1="16" y1="9.5" x2="32" y2="9.5" id="lg3929" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.928,0,0,0.906,1.24,1.4)"/>
<linearGradient x1="19.5" y1="22.64" x2="36.06" y2="22.64" id="lg3932" xlink:href="#lg6" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.54,0,0,0.359,11.4,3)"/>
<radialGradient cx="18" cy="27.858" r="15.45" fx="17.592" fy="24.538" id="radialGradient3935" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.123,-0.149,-0.007,0.24,0.806,13.95)"/>
<linearGradient x1="18.25" y1="16.375" x2="46.33" y2="16.375" id="lg3938" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.62,0,0,0.843,8.6,3.18)"/>
<linearGradient x1="29.731" y1="17" x2="21" y2="1.828" id="lg3941" xlink:href="#lg4" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.613,0,0,0.75,8.8,4.13)"/>
<linearGradient x1="43.3" y1="11.686" x2="5.25" y2="11.686" id="lg3944" xlink:href="#lg5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.65,0,0,0.867,8,2.86)"/>
<radialGradient cx="24" cy="18.4675" r="14" fx="24" fy="18.4675" id="radialGradient3947" xlink:href="#lg3" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.7,0,0,0.214,7.214,16)"/>
<linearGradient x1="5.66" y1="19.392" x2="40.25" y2="38.896" id="lg3950" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.5,0,0,0.75,11.068,5)"/>
<linearGradient x1="45.63" y1="17.86" x2="6.123" y2="17.86" id="lg3953" xlink:href="#lg5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.5,0,0,0.75,10.25,5)"/>
<radialGradient cx="18" cy="27.858" r="15.45" fx="17.592" fy="24.538" id="radialGradient3956" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.123,-0.149,-0.007,0.24,0.806,36.95)"/>
<linearGradient x1="18.25" y1="16.375" x2="46.3278" y2="16.375" id="lg3959" xlink:href="#lg7" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.62,0,0,0.843,8.62,26)"/>
<linearGradient x1="29.731" y1="17" x2="21" y2="1.828" id="lg3962" xlink:href="#lg4" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.613,0,0,0.75,8.8,27.13)"/>
<linearGradient x1="43.3" y1="11.686" x2="5.25" y2="11.686" id="lg3965" xlink:href="#lg5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.65,0,0,0.867,8,26)"/>
<radialGradient cx="24" cy="18.4675" r="14" fx="24" fy="18.4675" id="radialGradient3968" xlink:href="#lg3" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.7,0,0,0.214,7.214,39)"/>
<radialGradient cx="23.97" cy="12.22" r="15" fx="23.97" fy="12.22" id="radialGradient3971" xlink:href="#lg3" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.75,0,0,0.348,5.83,37.25)"/>
<linearGradient x1="22.14" y1="6.3" x2="27.6" y2="6.3" id="lg3261" xlink:href="#lg1" gradientUnits="userSpaceOnUse"/>
</defs>
<path d="M 36,41.5 C 36,44.538 30.627,47 24,47 C 17.3726,47 12,44.537 12,41.5 C 12,38.462 17.3726,36 24,36 C 30.627,36 36,38.462 36,41.5 z" style="opacity:0.9;fill:url(#radialGradient3971)"/>
<path d="M 22.949,40 C 19.09,40.055 15.77,40.67 14,41.559 L 14,44.442 C 15.85,45.37 19.409,46 23.5,46 C 27.6,46 31.149,45.37 33,44.4426 L 33,41.559 C 31.149,40.634 27.6,40 23.5,40 C 23.3127,40 23.134,40 22.949,40 z" style="opacity:0.56;fill:url(#radialGradient3968)"/>
<path d="M 22.481,31.5 C 17.44,31.774 13.5,34 13.5,36.689 L 13.5,39.3 C 13.5,42.163 18,44.5 23.5,44.5 C 29,44.5 33.5,42.163 33.5,39.3 L 33.5,36.68 C 33.5,33.818 29,31.5 23.5,31.5 C 23.145,31.5 22.817,31.49 22.481,31.5 z" style="fill:url(#lg3965);stroke:#a40000"/>
<path d="M 33,36.66 C 33,39.144 28.745,41 23.5,41 C 18.26,41 13.804,38.976 14,36.5 C 14.1,35.357 15.196,34.194 16.93,33.337 C 18.624,32.5 20.92,31.954 23.5,32 C 26.081,32.05 28.405,32.5125 30.109,33.389 C 31.928,34.324 33,35.578 33,36.66 z" style="fill:url(#lg3962)"/>
<path d="M 22.581,32.5 C 18.04,32.73 14.36,34.664 14.5,36.89 L 14.5,39.094 C 14.3426,41.409 18.523,43.5 23.489,43.5 C 28.454,43.5 32.728,41.397 32.5,39.093 L 32.5,36.89 C 32.643,34.568 28.455,32.508 23.489,32.5 C 23.178,32.5 22.883,32.5 22.581,32.5 z" style="opacity:0.56;fill:none;stroke:url(#lg3959)"/>
<path d="M 32.44,36 C 33.072,38.567 28.65,40.555 23.514,40.5 C 18.408,40.4426 13.8,38.350 14.59,36 C 15.375,33.66 18.587,31.5 23.514,31.5 C 28.441,31.5 32.44,33.516 32.44,36 z" style="fill:none;stroke:url(#radialGradient3956)"/>
<path d="M 22.672,10.5 C 18.94,10.68 15.5,12.2 15.5,14.287 C 15.5,16 15.5,32.983 15.5,34.717 C 15.5,36.81 19.05,38.5 23.4828,38.5 C 27.912,38.5 31.5,36.809 31.5,34.717 C 31.5,33.036 31.5,15.967 31.5,14.287 C 31.5,12.2 27.912,10.5 23.4828,10.5 C 23.275,10.5 23.066,10.5 22.862,10.5 C 22.797,10.5 22.737,10.5 22.672,10.5 z" style="fill:url(#lg3953);stroke:#a40000"/>
<path d="M 22.951,11.5 C 19.54,11.62 16.819,12.946 16.517,14.486 C 16.5,14.5326 16.513,34.481 16.5,34.53 C 16.32,36 19.752,37.5 23.485,37.5 C 27.304,37.5 30.65,36 30.5,34.53 C 30.5,34.5 30.5,14.6 30.5,14.567 C 30.3527,12.871 27.262,11.5 23.485,11.5 C 23.304,11.5 23.129,11.497 22.951,11.5 z" style="opacity:0.7;fill:none;stroke:url(#lg3950)"/>
<path d="M 22.949,17 C 19.1,17.055 15.77,17.67 14,18.559 L 14,21.4426 C 15.85,22.37 19.409,23 23.5,23 C 27.6,23 31.149,22.37 33,21.4426 L 33,18.559 C 31.149,17.634 27.6,17 23.5,17 C 23.3127,17 23.134,17 22.949,17 z" style="opacity:0.5;fill:url(#radialGradient3947)"/>
<path d="M 22.481,8.508 C 17.44,8.774 13.5,11 13.5,13.689 L 13.5,16.3 C 13.5,19.163 18,21.5 23.5,21.5 C 29,21.5 33.5,19.163 33.5,16.3 L 33.5,13.68 C 33.5,10.818 29,8.508 23.5,8.508 C 23.145,8.5 22.82,8.5 22.5,8.51 z" style="fill:url(#lg3944);stroke:#a40000"/>
<path d="M 33,13.66 C 33,16.144 28.745,18 23.5,18 C 18.26,18 13.804,15.975 14,13.5 C 14.1,12.357 15.196,11.194 16.93,10.337 C 18.624,9.5 20.92,8.954 23.5,9 C 26.081,9.05 28.405,9.5125 30.109,10.389 C 31.928,11.324 33,12.578 33,13.66 z" style="fill:url(#lg3941)"/>
<path d="M 22.581,9.5 C 18.04,9.73 14.360,11.66 14.5,13.89 L 14.5,16.093 C 14.3426,18.409 18.5,20.5 23.489,20.5 C 28.454,20.5 32.728,18.397 32.5,16.094 L 32.5,13.890 C 32.643,11.568 28.455,9.508 23.489,9.5 C 23.178,9.5 22.88,9.5 22.581,9.5 z" style="opacity:0.56;fill:none;stroke:url(#lg3938)"/>
<path d="M 32.44,13 C 33.072,15.567 28.65,17.556 23.514,17.5 C 18.408,17.4426 13.8,15.350 14.589,13 C 15.375,10.661 18.587,8.5 23.514,8.5 C 28.441,8.5 32.44,10.516 32.44,13 z" style="fill:none;stroke:url(#radialGradient3935)"/>
<path d="M 23.47,4.5 C 22.863,4.5 22.255,4.608 21.66,4.8 C 21.347,4.89 21.061,5 20.758,5.167 C 20.75,5.171 20.73,5.163 20.73,5.167 C 19.262,5.9 17.965,7.2 17.142,9.144 C 17.142,9.144 16.769,10.634 16.587,11.727 C 16.519,12.076 16.5,12.405 16.5,12.627 C 16.5,14.408 19.626,15.5 23.5,15.5 C 24,15.5 24.4,15.5 24.9,15.471 C 28.096,15.235 30.5,14.185 30.5,12.627 C 30.5,12.405 30.48,12.076 30.4,11.727 C 30.23,10.63 29.86,9.14 29.86,9.14 C 29.036,7.2 27.738,5.9 26.27,5.167 C 26.26,5.163 26.25,5.17 26.24,5.167 C 25.94,5 25.65,4.887 25.33,4.8 C 25.053,4.7 24.75,4.635 24.4,4.58 C 24.4,4.58 24.4,4.58 24.4,4.587 C 24.094,4.54 23.784,4.5 23.471,4.5 z" style="fill:url(#lg3932);stroke:#a40000"/>
<path d="M 20,7.279 C 20,7.279 21.198,6.059 21.18,6.066 C 19.94,6.67 18.81,7.792 18.079,9.519 C 18.042,9.671 17.746,10.886 17.58,11.84 C 17.5,12 17.5,12.35 17.5,12.6 C 17.5,12.773 17.57,12.897 17.79,13.114 C 18,13.33 18.37,13.58 18.9,13.8 C 20,14.214 21.67,14.5 23.5,14.5 C 24,14.5 24.4,14.5 24.83,14.472 C 26.33,14.362 27.6,14.05 28.427,13.65 C 29.25,13.25 29.5,12.9 29.5,12.6 C 29.5,12.438 29.465,12.132 29.4,11.868 C 29.3,11 29,10.3 28.92,9.52 C 28.18,7.8 27,6.58 25.68,6 C 25.6,6 27,7.33 27,7.33 C 25.9,8.837 20.892,8.86 20,7.28 z" style="fill:url(#lg3927);stroke:url(#lg3929)"/>
<path d="M 23.2,2.502 C 21.681,2.568 20.5,3.1129 20.5,3.773 L 20.5,6.22 C 20.5,6.927 21.84,7.5 23.5,7.5 C 25.153,7.5 26.5,6.927 26.5,6.22 L 26.5,3.773 C 26.5,3.07 25.153,2.5 23.5,2.5 C 23.4,2.5 23.295,2.5 23.2,2.502 z" style="fill:url(#lg22);stroke:#a40000"/>
<path d="M 23.2,5.547 C 22.651,5.562 22.124,5.64 21.8,5.723 C 21.48,5.8 21.5,5.55 21.5,5.5 L 21.5,6.04 C 21.679,6.285 22.6,6.5 23.5,6.5 C 24.061,6.5 25,6.376 25.5,6.04 L 25.5,5.5 C 25.5,5.56 25.5,5.792 25.127,5.707 C 24.758,5.622 24.17,5.548 23.5,5.547 C 23.38,5.547 23.312,5.546 23.262,5.547 z" style="opacity:0.56;fill:none;stroke:url(#lg21)"/>
<path d="M 23.2,2.502 C 21.681,2.567 20.5,3.1125 20.5,3.7728 L 20.5,4.22 C 20.5,4.93 21.84,5.5 23.5,5.5 C 25.153,5.5 26.5,4.92 26.5,4.222 L 26.5,3.7728 C 26.5,3.07 25.153,2.5 23.5,2.5 C 23.4,2.5 23.295,2.5 23.194,2.5 z" style="fill:none;stroke:#a40000"/>
<path d="M 19.5,22.5 C 20.331,22.5 21,22.946 21,23.5 L 21,34 C 21,34.554 20.331,35 19.5,35 C 18.66,35 18,34.554 18,34 L 18,23.5 C 18,22.946 18.66,22.5 19.5,22.5 z" style="opacity:0.9;fill:#cc0000"/>
<path d="M 19.5,22.5 C 20.331,22.5 21,22.946 21,23.5 L 21,34 C 21,34.554 20.331,35 19.5,35 C 18.66,35 18,34.554 18,34 L 18,23.5 C 18,22.946 18.66,22.5 19.5,22.5 z" style="fill:url(#lg20)"/>
<path d="M 19.5,23 C 20.054,23 20.5,23.223 20.5,23.5 L 20.5,34 C 20.5,34.277 20.054,34.5 19.5,34.5 C 18.946,34.5 18.5,34.277 18.5,34 L 18.5,23.5 C 18.5,23.223 18.946,23 19.5,23 z" style="opacity:0.4;fill:none;stroke:url(#lg19)"/>
<path d="M 23.5,23 C 24.331,23 25,23.446 25,24 L 25,35 C 25,35.554 24.33,36 23.5,36 C 22.66,36 22,35.554 22,35 L 22,24 C 22,23.446 22.66,23 23.5,23 z" style="opacity:0.9;fill:#cc0000"/>
<path d="M 23.5,23 C 24.331,23 25,23.446 25,24 L 25,35 C 25,35.554 24.33,36 23.5,36 C 22.66,36 22,35.554 22,35 L 22,24 C 22,23.446 22.66,23 23.5,23 z" style="fill:url(#lg18)"/>
<path d="M 23.5,23.5 C 24.054,23.5 24.5,23.723 24.5,24 L 24.5,35 C 24.5,35.277 24.054,35.5 23.5,35.5 C 22.946,35.5 22.5,35.277 22.5,35 L 22.5,24 C 22.5,23.723 22.946,23.5 23.5,23.5 z" style="opacity:0.4;fill:none;stroke:url(#lg17)"/>
<path d="M 27.5,22.5 C 28.331,22.5 29,22.946 29,23.5 L 29,34 C 29,34.554 28.33,35 27.5,35 C 26.66,35 26,34.55 26,34 L 26,23.5 C 26,22.946 26.66,22.5 27.5,22.5 z" style="opacity:0.9;fill:#cc0000"/>
<path d="M 27.5,22.5 C 28.331,22.5 29,22.946 29,23.5 L 29,34 C 29,34.554 28.33,35 27.5,35 C 26.66,35 26,34.55 26,34 L 26,23.5 C 26,22.946 26.66,22.5 27.5,22.5 z" style="fill:url(#lg16)"/>
<path d="M 27.5,23 C 28.054,23 28.5,23.223 28.5,23.5 L 28.5,34 C 28.5,34.277 28.054,34.5 27.5,34.5 C 26.946,34.5 26.5,34.277 26.5,34 L 26.5,23.5 C 26.5,23.223 26.946,23 27.5,23 z" style="opacity:0.4;fill:none;stroke:url(#lg15)"/>
<path d="M 29.5,28.5 C 29.5,31.814 26.814,34.5 23.5,34.5 C 20.186,34.5 17.5,31.814 17.5,28.5 C 17.5,25.186 20.186,22.5 23.5,22.5 C 26.814,22.5 29.5,25.186 29.5,28.5 z" style="fill:url(#lg14);stroke:#a40000"/>
<path d="M 23.5,23.5 C 20.724,23.5 18.5,25.724 18.5,28.5 C 18.5,31.276 20.724,33.5 23.5,33.5 C 26.276,33.5 28.5,31.276 28.5,28.5 C 28.5,25.724 26.276,23.5 23.5,23.5 z" style="fill:none;stroke:url(#lg13)"/>
<path d="M 35.77,2.535 L 37.77,2.535 L 37.77,4.535 L 35.77,4.535 L 35.77,2.535 z" transform="matrix(0.707,0.707,-0.707,0.707,0,0)" style="fill:none;stroke:#a40000"/>
<path d="M 36.27,3.036 L 37.27,3.036 L 37.27,4.036 L 36.27,4.036 L 36.27,3.036 z" transform="matrix(0.707,0.707,-0.707,0.707,0,0)" style="fill:#ff7b7b"/>
<path d="M 13.5,20.5 C 14.608,20.5 15.5,21.107 15.5,21.86 L 15.5,31.14 C 15.5,31.893 14.608,32.5 13.5,32.5 C 12.392,32.5 11.5,31.893 11.5,31.14 L 11.5,21.86 C 11.5,21.107 12.392,20.5 13.5,20.5 z" style="fill:url(#lg12);stroke:#a40000"/>
<path d="M 13.25,21.5 L 13.75,21.5 C 14.166,21.5 14.5,21.67 14.5,21.884 L 14.5,31.116 C 14.5,31.329 14.166,31.5 13.75,31.5 L 13.25,31.5 C 12.835,31.5 12.5,31.33 12.5,31.116 L 12.5,21.884 C 12.5,21.67 12.835,21.5 13.25,21.5 z" style="fill:none;stroke:url(#lg11)"/>
<path d="M 33.5,20.5 C 34.608,20.5 35.5,21.107 35.5,21.86 L 35.5,31.14 C 35.5,31.893 34.608,32.5 33.5,32.5 C 32.392,32.5 31.5,31.893 31.5,31.14 L 31.5,21.86 C 31.5,21.107 32.392,20.5 33.5,20.5 z" style="fill:url(#lg10);stroke:#a40000"/>
<path d="M 33.25,21.5 L 33.75,21.5 C 34.166,21.5 34.5,21.67 34.5,21.884 L 34.5,31.116 C 34.5,31.33 34.166,31.5 33.75,31.5 L 33.25,31.5 C 32.835,31.5 32.5,31.33 32.5,31.116 L 32.5,21.884 C 32.5,21.67 32.835,21.5 33.25,21.5 z" style="fill:none;stroke:url(#lg9)"/>
<path d="M 11,24 C 11.554,24 12,24.446 12,25 L 12,28 C 12,28.554 11.554,29 11,29 C 10.446,29 10,28.554 10,28 L 10,25 C 10,24.446 10.446,24 11,24 z" style="fill:#a40000"/>
<path d="M 36,24 C 36.554,24 37,24.446 37,25 L 37,28 C 37,28.554 36.554,29 36,29 C 35.446,29 35,28.554 35,28 L 35,25 C 35,24.446 35.446,24 36,24 z" style="fill:#a40000"/>
<path d="M 21.075,3.655 C 20.94,3.78 20.95,4.225 21.07,4.345 C 22.02,5.264 25.29,5.21 25.94,4.29 C 26.054,4.13 26,3.784 25.9,3.66 C 25,2.77 22,2.77 21,3.65 z" style="opacity:0.46;fill:url(#lg3261)"/>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18" height="18" version="1.1" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
<path d="m9 2c-1.662 0-3 1.338-3 3v1h-1c-0.277 0-0.5 0.223-0.5 0.5v3c0 0.277 0.223 0.5 0.5 0.5h1v6l-1 1h8l-1-1v-6h1c0.277 0 0.5-0.223 0.5-0.5v-3c0-0.277-0.223-0.5-0.5-0.5h-1v-1c0-1.662-1.338-3-3-3z" fill="#f00" stroke="#000" stroke-dashoffset="2.3036" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="paint-order:stroke fill markers"/>
<path d="m7 11v5h1v-2h2v2h1v-5h-1v2h-2v-2z" fill="#fff" style="paint-order:stroke fill markers"/>
</svg>

After

Width:  |  Height:  |  Size: 602 B

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18" height="18" version="1.1" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
<path d="m1.5 3.5v2h4.1484a7.5 4.75 0 0 0-4.1484 4.25 7.5 4.75 0 0 0 7.5 4.75 7.5 4.75 0 0 0 7.5-4.75 7.5 4.75 0 0 0-4.1543-4.25h4.1543v-2h-15z" fill="#f00" stroke="#000" stroke-dashoffset="2.3036" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="paint-order:stroke fill markers"/>
<path d="m7 7v5h1v-2h2v2h1v-5h-1v2h-2v-2z" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 507 B

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18" height="18" version="1.1" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
<circle cx="9" cy="9" r="6" fill="#f00" stroke="#000" stroke-width="2" style="paint-order:stroke fill markers"/>
<path d="m7 6v5h1v-2h2v2h1v-5h-1v2h-2v-2z" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 316 B

View file

@ -0,0 +1,98 @@
[
{
"authors": [
"http://jaanos.deviantart.com/"
],
"path": "hydrant.svg",
"license": "GPL",
"sources": [
"https://commons.wikimedia.org/wiki/File:Hydrant.svg"
]
},
{
"authors": [
"Twemoji Project"
],
"path": "Twemoji12_1f9ef.svg",
"license": "CC-BY 4.0",
"sources": [
"https://upload.wikimedia.org/wikipedia/commons/9/9b/Twemoji12_1f9ef.svg",
"https://twemoji.twitter.com/"
]
},
{
"path": "hydrant_pillar.svg",
"license": "CC-BY-SA 4.0",
"authors": [
"M!dgard"
],
"sources": [
"https://www.openstreetmap.org/user/M!dgard",
"https://mapcomplete.braindeaddev.com/assets/layers/fire/hydrant_underground.svg"
]
},
{
"path": "hydrant_unknown.svg",
"license": "CC-BY-SA 4.0",
"authors": [
"M!dgard"
],
"sources": [
"https://www.openstreetmap.org/user/M!dgard",
"https://mapcomplete.braindeaddev.com/assets/layers/fire/hydrant_underground.svg"
]
},
{
"path": "hydrant_underground.svg",
"license": "CC-BY-SA 4.0",
"authors": [
"M!dgard"
],
"sources": [
"https://www.openstreetmap.org/user/M!dgard",
"https://mapcomplete.braindeaddev.com/assets/layers/fire/hydrant_underground.svg"
]
},
{
"path": "hydrant.svg",
"license": "CC-BY-SA 4.0",
"authors": [
"GOwin"
],
"sources": [
"https://raw.githubusercontent.com/mapamore/MapComplete/master/assets/themes/hailhydrant/hydrant.svg"
]
},
{
"path": "Twemoji12_1f692.svg",
"license": "CC-BY 4.0",
"authors": [
"Twemoji Project"
],
"sources": [
"https://upload.wikimedia.org/wikipedia/commons/1/19/Twemoji12_1f692.svg",
"https://twemoji.twitter.com/"
]
},
{
"path": "Twemoji12_26d1.svg",
"license": "CC-BY 4.0",
"authors": [
"Twemoji Project"
],
"sources": [
"https://upload.wikimedia.org/wikipedia/commons/e/eb/Twemoji12_26d1.svg",
"https://twemoji.twitter.com/"
]
},
{
"authors": [
"Erwin Olario"
],
"path": "logo.svg",
"license": "CC-BY-SA 4.0",
"sources": [
"https://wiki.openstreetmap.org/wiki/File:Hailhydrant-logo.svg"
]
}
]

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="210mm" height="297mm" version="1.1" viewBox="0 0 210 297" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="matrix(.3729 0 0 .3729 -16.981 -12.108)">
<g transform="matrix(1.1824 0 0 1.1824 22.439 -7.8734)">
<g transform="matrix(.7041 0 0 .7041 -400.82 516.5)">
<g transform="matrix(1.4642 0 0 1.4642 654.36 -317.44)">
<path d="m318.33 200v-25h-30v25c0 11.028-8.972 20-20 20h-0.333c-19.623 0-28.008-24.365-12.309-45.808 0.273-0.363 0.544-0.73 0.813-1.098 0.035-0.045 0.065-0.09 0.101-0.136l-2e-3 1e-3c13.343-18.315 21.398-42.038 21.398-67.958 0-57.989-40.294-105-89.999-105h-1e-3c-49.706 1e-3 -90 47.011-90 105 0 25.921 8.055 49.643 21.398 67.958l-2e-3 -1e-3c0.035 0.045 0.065 0.091 0.101 0.136 0.269 0.368 0.539 0.735 0.813 1.098 15.698 21.443 7.313 45.808-12.31 45.808h-0.334c-11.028 0-20-8.972-20-20v-25h-30v25c0 27.491 22.302 49.865 49.763 49.994-2.108 8.783-10.008 15.339-19.429 15.339h-25v30h25c19.768 0 36.89-11.533 45-28.221v17.888c0 11.028-8.972 20-20 20h-25v30h25c19.768 0 36.89-11.532 45-28.221v19.221c0 11.028-8.972 20-20 20v30c27.564 0 49.989-22.419 49.999-49.98 0.01 27.561 22.436 49.98 50 49.98v-30c-11.028 0-20-8.972-20-20v-19.221c8.11 16.689 25.232 28.221 45 28.221h25v-30h-25c-11.028 0-20-8.972-20-20v-17.888c8.11 16.689 25.232 28.221 45 28.221h25v-30h-25c-9.421 0-17.321-6.556-19.429-15.339 27.461-0.129 49.762-22.503 49.762-49.994z" fill="#ff9811"/>
<path d="m278 105c0 25.921-8.055 49.643-21.398 67.958l2e-3 -1e-3c-0.035 0.045-0.065 0.091-0.101 0.136-0.269 0.368-0.539 0.735-0.813 1.098-15.698 21.443-7.312 45.808 12.31 45.808h0.333c11.028 0 20-8.972 20-20v-25h30v25c0 27.491-22.302 49.865-49.763 49.994 2.108 8.783 10.008 15.339 19.429 15.339h25v30h-25c-19.768 0-36.89-11.533-45-28.221v17.888c0 11.028 8.972 20 20 20h25v30h-25c-19.768 0-36.89-11.532-45-28.221v19.221c0 11.028 8.972 20 20 20v30c-27.57 0-50-22.43-50-50 0 0 1e-3 -326 0-326 49.707 0 90.001 47.011 90.001 105z" fill="#ff5023"/>
<path d="m158 160a10 10 0 0 1-10 10 10 10 0 0 1-10-10 10 10 0 0 1 10-10 10 10 0 0 1 10 10z" fill="#802812"/>
<path d="m238 160a10 10 0 0 1-10 10 10 10 0 0 1-10-10 10 10 0 0 1 10-10 10 10 0 0 1 10 10z" fill="#802812"/>
</g>
<g transform="translate(684.34 -580.59)">
<path d="m381.01 195.5h76.931v120h-76.931z" fill="#ff5023"/>
<path d="m37.061 195.5h76.93v120h-76.93z" fill="#ff0c38"/>
<path d="m247.5 315.5c-33.084 0-60-26.916-60-60s26.916-60 60-60v-41.995h-133.51v301.49h133.51z" fill="#ff5023"/>
<path d="m381.01 153.51h-133.51v41.995c33.084 0 60 26.916 60 60s-26.916 60-60 60v139.5h133.51z" fill="#ff0c38"/>
<path d="m187.5 255.5c0 33.084 26.916 60 60 60v-120c-33.084 0-60 26.916-60 60z" fill="#ffa733"/>
<path d="m307.5 255.5c0-33.084-26.916-60-60-60v120c33.084 0 60-26.916 60-60z" fill="#ff9811"/>
<path d="m247.5 0c-66.821 0-122.33 49.346-132.01 113.51h132.01z" fill="#c70024"/>
<path d="M 379.51,113.51 C 369.83,49.346 314.321,0 247.5,0 v 113.51 z" fill="#a5001e"/>
<path d="m93.99 113.51h307.02v40h-307.02z" fill="#ffa733"/>
<path d="m53.99 455h387.02v40h-387.02z" fill="#a5001e"/>
</g>
</g>
</g>
<path d="m167.36 202.9a153.5 153.5 0 0 1 83.974-128.49 153.5 153.5 0 0 1 153.27 8.4773 153.5 153.5 0 0 1 69.291 136.97" color="#000000" color-rendering="auto" fill="none" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
<g transform="matrix(1.2562 .012371 -.012371 1.2562 -76.849 20.069)" fill="#ff5023" stroke-width="1px" aria-label="#HailHydrant!">
<path d="m131.49 170.04 9.7367 4.7278 1.4848-7.0468-9.7311-4.7545 1.243-5.8991 9.7311 4.7545 1.5579-7.3938 5.6855 1.198-1.856 8.8086 6.9257 3.3828 1.5973-7.5807 5.7389 1.2092-1.8897 8.9687 9.6833 4.7166-1.243 5.8991-9.6833-4.7166-1.4848 7.0468 9.6833 4.7166-1.2542 5.9524-9.6833-4.7166-1.5692 7.4472-5.7389-1.2092 1.8448-8.7552-6.9201-3.4095-1.5916 7.554-5.6855-1.198 1.901-9.0221-9.7367-4.7278zm16.598 0.34702-1.4848 7.0468 6.9201 3.4095 1.4848-7.0468z"/>
<path d="m142.41 132.04 5.1503-9.1527 13.527 7.6118 7.5984-13.503-13.527-7.6118 5.1503-9.1527 35.493 19.973-5.1503 9.1527-15.048-8.468-7.5984 13.503 15.048 8.468-5.1503 9.1527z"/>
<path d="m202.3 93.18q-2.1649 2.1558-2.5353 3.9874-0.35105 1.8124 1.0733 3.2428 1.3089 1.3144 2.9294 1.2021 1.6206-0.15087 3.1863-1.71 1.9523-1.944 1.9002-4.6639-0.0713-2.7392-2.1694-4.8461l-0.78916-0.79252zm7.9749-13.138 12.299 12.352-6.9781 6.9485-3.1952-3.2087q0.57155 3.3575-0.26348 5.9983-0.85427 2.6215-3.3478 5.1045-3.3634 3.3491-7.4144 3.4949-4.0509 0.10714-7.1691-3.0243-3.7919-3.808-2.9531-8.1848 0.85804-4.3961 6.4637-9.978l4.0786-4.0613-0.53894-0.54123q-1.6361-1.643-3.6818-1.1073-2.065 0.51642-4.8098 3.2496-2.2229 2.2135-3.6939 4.5637-1.471 2.3501-2.2286 4.8754l-5.2547-5.277q1.684-2.7548 3.6568-5.2581 1.9535-2.5227 4.1958-4.7555 5.8569-5.8321 10.757-6.0918 4.9-0.29823 10.078 4.9015z"/>
<path d="m212.97 62.012 8.0716-5.4972 17.198 25.252-8.0716 5.4972zm-6.6949-9.8302 8.0716-5.4972 4.4838 6.5835-8.0716 5.4972z"/>
<path d="m226.97 39.195 8.6924-4.4512 19.346 37.78-8.6924 4.4512z"/>
<path d="m253.32 28.272 10.153-2.686 3.9697 15.005 14.979-3.9627-3.9697-15.005 10.153-2.686 10.416 39.373-10.153 2.686-4.4162-16.693-14.979 3.9627 4.4162 16.693-10.153 2.686z"/>
<path d="m305.37 27.122 9.765 0.12066 7.9541 20.832 7.239-20.644 9.765 0.12066-13.26 33.282q-1.9997 5.0768-4.6159 7.0632-2.5893 2.0141-6.8172 1.9618l-5.6462-0.06977 0.0792-6.41 3.055 0.03775q2.4822 0.03067 3.6103-0.74653 1.1554-0.77687 1.808-2.8149l0.28321-0.8422z"/>
<path d="m372.3 39.302 4.2255-15.812 9.4874 2.5353-10.958 41.007-9.4874-2.5353 1.1409-4.2693q-2.6474 2.0879-5.3168 2.6734-2.6695 0.5855-5.7529-0.23846-5.4553-1.4578-7.8054-6.7165-2.3431-5.285-0.51908-12.111 1.824-6.8257 6.484-10.211 4.6671-3.4118 10.122-1.954 3.0571 0.81692 5.0716 2.6823 2.0479 1.8461 3.3079 4.9499zm-11.325 17.445q3.0307 0.80988 5.2035-0.9813 2.1992-1.7841 3.3259-6.0008t0.11077-6.8599q-0.98968-2.6363-4.0204-3.4462-3.0044-0.80284-5.2035 0.9813-2.1728 1.7912-3.2996 6.0078t-0.13712 6.8529q1.016 2.6433 4.0204 3.4462z"/>
<path d="m414.04 61.902q-0.85859-1.1255-1.8687-1.9608-0.97333-0.8469-2.1098-1.4405-3.3367-1.7428-6.2742-0.53799-2.9006 1.1932-4.9844 5.1828l-6.5165 12.477-8.6562-4.5211 14.144-27.081 8.6562 4.5211-2.3237 4.449q3.0575-1.7883 5.8409-1.8733 2.8202-0.09655 5.8426 1.4821 0.43523 0.22732 0.91773 0.54088 0.49514 0.28939 1.3992 0.91544z"/>
<path d="m427.22 82.487q-2.3492-1.9533-4.2075-2.1504-1.8373-0.17962-3.1279 1.3725-1.186 1.4263-0.92226 3.0292 0.30212 1.5993 2.0011 3.012 2.1185 1.7615 4.8215 1.4547 2.7204-0.32778 4.6215-2.6141l0.71506-0.85998zm13.828 6.7083-11.144 13.403-7.572-6.296 2.8951-3.4819q-3.2891 0.88374-5.9966 0.29992-2.69-0.60479-5.3958-2.8546-3.6497-3.0346-4.1745-7.0542-0.48638-4.023 2.339-7.421 3.4358-4.1321 7.8719-3.7073 4.4571 0.4422 10.54 5.5l4.4257 3.68 0.48834-0.5873q1.4824-1.7829 0.75729-3.7694-0.70771-2.0075-3.6862-4.4841-2.4121-2.0057-4.8898-3.2498-2.4777-1.2442-5.0628-1.7618l4.7613-5.7262q2.9005 1.4184 5.5778 3.1478 2.6947 1.7085 5.1278 3.7316 6.3554 5.2845 7.0732 10.139 0.75622 4.8505-3.9353 10.493z"/>
<path d="m469.31 123.31-15.091 10.879-5.7428-7.9661 11.551-8.327q3.2086-2.3131 4.314-3.3453 1.1213-1.0101 1.4414-1.7789 0.43949-1.023 0.28564-2.1227-0.13171-1.1156-0.86551-2.1336-1.7866-2.4784-4.7327-2.5067-2.924-0.0443-6.3096 2.3964l-12.193 8.7896-5.7109-7.9219 24.784-17.866 5.7109 7.9219-3.629 2.6162q3.4607 0.22907 5.9302 1.5089 2.4917 1.2639 4.2464 3.698 3.0947 4.2928 2.0567 8.404-1.0221 4.1332-6.0452 7.7544z"/>
<path d="m498.32 136.72-7.9618 3.4437 3.996 9.2387-6.4095 2.7723-3.996-9.2387-11.893 5.1438q-1.9529 0.84467-2.3182 1.924-0.34029 1.0685 0.65599 3.3719l1.9926 4.6068-6.4095 2.7723-3.3245-7.6864q-2.2958-5.3079-1.0563-8.4891 1.2753-3.1671 6.5832-5.4628l11.893-5.1438-1.9276-4.4566 6.4095-2.7723 1.9276 4.4566 7.9618-3.4437z"/>
<path d="m508.22 160.78 2.3178 9.5429-15.189 3.6891-11.409 1.3392-1.661-6.8391 10.752-4.0431zm-30.14 7.3202 2.3178 9.5429-9.4369 2.292-2.3178-9.5429z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.3 KiB

View file

@ -0,0 +1,58 @@
[
{
"path": "hydrant_pillar.svg",
"license": "",
"authors": [],
"sources": [
"https://mapcomplete.braindeaddev.com/assets/layers/fire/hydrant_pillar.svg"
]
},
{
"path": "hydrant_unknown.svg",
"license": "",
"authors": [],
"sources": [
"https://mapcomplete.braindeaddev.com/assets/layers/fire/hydrant_unknown.svg"
]
},
{
"path": "hydrant_underground.svg",
"license": "",
"authors": [],
"sources": [
"https://mapcomplete.braindeaddev.com/assets/layers/fire/hydrant_underground.svg"
]
},
{
"path": "Hydrant_02.svg",
"license": "",
"authors": [],
"sources": [
"https://upload.wikimedia.org/wikipedia/commons/6/66/Hydrant_02.svg"
]
},
{
"path": "MUTCD_RS-090.svg",
"license": "",
"authors": [],
"sources": [
"https://upload.wikimedia.org/wikipedia/commons/e/e8/MUTCD_RS-090.svg"
]
},
{
"path": "British_Columbia_W-318-L.svg",
"license": "",
"authors": [],
"sources": [
"https://upload.wikimedia.org/wikipedia/commons/8/84/British_Columbia_W-318-L.svg"
]
},
{
"path": "Emojione_1F6A8.svg",
"license": "",
"authors": [],
"sources": [
"https://upload.wikimedia.org/wikipedia/commons/1/1e/Emojione_1F6A8.svg"
]
}
]

View file

@ -8,7 +8,7 @@
"main": "index.js",
"scripts": {
"increase-memory": "export NODE_OPTIONS=--max_old_space_size=4096",
"start": "ts-node scripts/generateLayerOverview.ts && npm run increase-memory && parcel *.html UI/** Logic/** assets/** assets/**/** assets/**/**/** vendor/* vendor/*/*",
"start": "ts-node scripts/generateLayerOverview.ts --no-fail && npm run increase-memory && parcel *.html UI/** Logic/** assets/** assets/**/** assets/**/**/** vendor/* vendor/*/*",
"test": "ts-node test/Tag.spec.ts && ts-node test/TagQuestion.spec.ts && ts-node test/ImageSearcher.spec.ts && ts-node test/ImageAttribution.spec.ts",
"generate:editor-layer-index": "cd assets/ && wget https://osmlab.github.io/editor-layer-index/imagery.geojson --output-document=editor-layer-index.json",
"generate:images": "ts-node scripts/generateIncludedImages.ts",

70
scripts/fixTheme.ts Normal file
View file

@ -0,0 +1,70 @@
/*
* This script attempt to automatically fix some basic issues when a theme from the custom generator is loaded
*/
import {Utils} from "../Utils"
Utils.runningFromConsole = true;
import {readFileSync, writeFileSync} from "fs";
import {LayoutConfigJson} from "../Customizations/JSON/LayoutConfigJson";
import {Layer} from "leaflet";
import LayerConfig from "../Customizations/JSON/LayerConfig";
import SmallLicense from "../Models/smallLicense";
if(process.argv.length == 2){
console.log("USAGE: ts-node scripts/fixTheme <path to theme>")
throw "No path specified"
}
const path = process.argv[2]
const dir = path.substring(0, path.lastIndexOf("/"))
console.log("Fixing up ", path)
const themeConfigJson : LayoutConfigJson = JSON.parse(readFileSync(path, "UTF8"))
const linuxHints = []
const licenses : SmallLicense[] = []
const replacements: {source: string, destination: string}[] = []
for (const layerConfigJson of themeConfigJson.layers) {
if(typeof (layerConfigJson) === "string"){
continue;
}
if(layerConfigJson["overpassTags"] !== undefined){
const tags = layerConfigJson["overpassTags"];
layerConfigJson["overpassTags"] = undefined;
layerConfigJson["source"] = { osmTags : tags}
}
// @ts-ignore
const layerConfig = new LayerConfig(layerConfigJson, true)
const images : string[] = Array.from(layerConfig.ExtractImages())
const remoteImages = images.filter(img => img.startsWith("http"))
for (const remoteImage of remoteImages) {
linuxHints.push("wget " + remoteImage)
const imgPath = remoteImage.substring(remoteImage.lastIndexOf("/") + 1)
licenses.push({
path: imgPath,
license: "",
authors: [],
sources: [remoteImage]
})
replacements.push({source: remoteImage, destination: `${dir}/${imgPath}`})
}
}
let fixedThemeJson = JSON.stringify(themeConfigJson, null , " ")
for (const replacement of replacements) {
fixedThemeJson = fixedThemeJson.replace(new RegExp(replacement.source, "g"), replacement.destination)
}
const fixScriptPath = dir + "/fix_script_"+path.replace(/\//g,"_")+".sh"
writeFileSync(dir + "/generated.license_info.json", JSON.stringify(licenses, null, " "))
writeFileSync(fixScriptPath, linuxHints.join("\n"))
writeFileSync(path+".autofixed.json", fixedThemeJson)
console.log(`IMPORTANT:
1) run ${fixScriptPath}
2) Copy generated.license_info.json over into license_info.json and add the missing attributions and authors
3) Verify ${path}.autofixed.json as theme, and rename it to ${path}
4) Delete the fix script and other unneeded files`)

View file

@ -51,8 +51,6 @@ for (const i in licenses) {
}
const knownPaths = new Set<string>(licensePaths)
const linuxHints = []
function validateLayer(layerJson: LayerConfigJson, context?: string): string[] {
let errorCount = [];
if (layerJson["overpassTags"] !== undefined) {
@ -65,9 +63,7 @@ function validateLayer(layerJson: LayerConfigJson, context?: string): string[] {
for (const remoteImage of remoteImages) {
errorCount.push("Found a remote image: " + remoteImage + " in layer " + layer.id + ", please download it.")
const path = remoteImage.substring(remoteImage.lastIndexOf("/") + 1)
linuxHints.push("wget " + remoteImage)
linuxHints.push(`echo '{"path":"${path}", "license": "<insert license here>", "authors": [ "<insert author(s) here"], "sources": [${remoteImage}] > ${path}.license_info.json`)
}
}
for (const image of images) {
if (!knownPaths.has(image)) {
const ctx = context === undefined ? "" : ` in a layer defined in the theme ${context}`
@ -129,7 +125,6 @@ if (layerErrorCount.length + themeErrorCount.length == 0) {
console.log(errors)
const msg = (`Found ${layerErrorCount.length} errors in the layers; ${themeErrorCount.length} errors in the themes`)
console.log(msg)
console.log(linuxHints.join("\n"))
if (process.argv.indexOf("--report") >= 0) {
console.log("Writing report!")
writeFileSync("layer_report.txt", errors)

View file

@ -193,17 +193,18 @@ writeFileSync("./assets/generated/license_info.json", JSON.stringify(licenseInfo
const artwork = contents.filter(pth => pth.match(/(.svg|.png|.jpg)$/i) != null)
const missingLicenses = missingLicenseInfos(licenseInfos, artwork)
const invalidLicenses = licenseInfos.filter(l => (l.license ?? "") === "").map(l => `License for artwork ${l.path} is empty string or undefined`)
if (process.argv.indexOf("--prompt") >= 0 || process.argv.indexOf("--query") >= 0) {
queryMissingLicenses(missingLicenses)
}
if (missingLicenses.length > 0) {
const msg = `There are ${missingLicenses.length} licenses missing.`
const msg = `There are ${missingLicenses.length} licenses missing and ${invalidLicenses.length} invalid licenses.`
console.log( missingLicenses.concat(invalidLicenses).join("\n"))
console.error(msg)
if (process.argv.indexOf("--report") >= 0) {
console.log("Writing report!")
writeFileSync("missing_licenses.txt", missingLicenses.join("\n"))
writeFileSync("missing_licenses.txt", missingLicenses.concat(invalidLicenses).join("\n"))
}
if (process.argv.indexOf("--no-fail") < 0) {
throw msg