2020-11-17 16:29:51 +01:00
{
2021-04-20 10:49:45 +02:00
"id" : "surveillance_camera" ,
2020-11-17 16:29:51 +01:00
"name" : {
"en" : "Surveillance camera's" ,
2021-05-30 20:56:09 +02:00
"nl" : "Bewakingscamera's" ,
2021-06-04 17:23:17 +02:00
"ru" : "Камеры наблюдения" ,
2021-07-04 00:22:46 +02:00
"fr" : "Caméras de surveillance" ,
"it" : "Videocamere di sorveglianza"
2020-11-17 16:29:51 +01:00
} ,
"minzoom" : 12 ,
2021-03-20 23:45:52 +01:00
"source" : {
"osmTags" : {
"and" : [
"man_made=surveillance" ,
{
"or" : [
"surveillance:type=camera" ,
"surveillance:type=ALPR" ,
"surveillance:type=ANPR"
]
}
]
}
2020-11-17 16:29:51 +01:00
} ,
"title" : {
"render" : {
"en" : "Surveillance Camera" ,
2021-05-30 20:56:09 +02:00
"nl" : "Bewakingscamera" ,
2021-06-04 17:23:17 +02:00
"ru" : "Камера наблюдения" ,
2021-07-04 00:22:46 +02:00
"fr" : "Caméra de surveillance" ,
"it" : "Videocamera di sorveglianza"
2020-11-17 16:29:51 +01:00
}
} ,
"tagRenderings" : [
"images" ,
{
"#" : "Camera type: fixed; panning; dome" ,
"question" : {
"en" : "What kind of camera is this?" ,
2021-06-04 17:23:17 +02:00
"nl" : "Wat voor soort camera is dit?" ,
2021-07-04 00:22:46 +02:00
"fr" : "Quel genre de caméra est-ce ?" ,
2021-07-18 18:02:17 +02:00
"it" : "Di che tipo di videocamera si tratta?" ,
"ru" : "Какая это камера?"
2020-11-17 16:29:51 +01:00
} ,
"mappings" : [
{
"if" : {
"and" : [
"camera:type=fixed"
]
} ,
"then" : {
"en" : "A fixed (non-moving) camera" ,
2021-06-04 17:23:17 +02:00
"nl" : "Een vaste camera" ,
2021-07-04 00:22:46 +02:00
"fr" : "Une caméra fixe (non mobile)" ,
"it" : "Una videocamera fissa (non semovente)"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : {
"and" : [
"camera:type=dome"
]
} ,
"then" : {
"en" : "A dome camera (which can turn)" ,
2021-06-04 17:23:17 +02:00
"nl" : "Een dome (bolvormige camera die kan draaien)" ,
2021-07-04 00:22:46 +02:00
"fr" : "Une caméra dôme (qui peut tourner)" ,
2021-07-18 18:02:17 +02:00
"it" : "Una videocamera a cupola (che può ruotare)" ,
"ru" : "Камера с поворотным механизмом"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : {
"and" : [
"camera:type=panning"
]
} ,
"then" : {
"en" : "A panning camera" ,
2021-05-30 20:56:09 +02:00
"nl" : "Een camera die (met een motor) van links naar rechts kan draaien" ,
2021-06-04 17:23:17 +02:00
"ru" : "Панорамная камера" ,
2021-07-04 00:22:46 +02:00
"fr" : "Une caméra panoramique" ,
"it" : "Una videocamera panoramica"
2020-11-17 16:29:51 +01:00
}
}
]
} ,
{
"#" : "direction. We don't ask this for a dome on a pole or ceiling as it has a 360° view" ,
"question" : {
"en" : "In which geographical direction does this camera film?" ,
2021-06-04 17:23:17 +02:00
"nl" : "In welke geografische richting filmt deze camera?" ,
2021-07-04 00:22:46 +02:00
"fr" : "Dans quelle direction géographique cette caméra filme-t-elle ?" ,
"it" : "In quale direzione geografica punta questa videocamera?"
2021-04-28 20:42:23 +02:00
} ,
"render" : {
"en" : "Films to a compass heading of {camera:direction}" ,
2021-06-04 17:23:17 +02:00
"nl" : "Filmt in kompasrichting {camera:direction}" ,
2021-07-04 00:22:46 +02:00
"fr" : "Filme dans une direction {camera:direction}" ,
"it" : "Punta in direzione {camera:direction}"
2020-11-17 16:29:51 +01:00
} ,
"condition" : {
"or" : [
2021-04-28 20:42:23 +02:00
"camera:direction~*" ,
"direction~*" ,
2020-11-17 16:29:51 +01:00
"camera:type!=dome" ,
{
"and" : [
2020-12-27 22:24:27 +01:00
"camera:type=dome" ,
"camera:mount=wall"
2020-11-17 16:29:51 +01:00
]
}
]
} ,
"freeform" : {
"key" : "camera:direction" ,
"type" : "direction"
2021-04-28 20:42:23 +02:00
} ,
"mappings" : [
{
"if" : {
"and" : [
"camera:direction=" ,
"direction~*"
]
} ,
"then" : {
"en" : "Films to a compass heading of {direction}" ,
2021-06-04 17:23:17 +02:00
"nl" : "Filmt in kompasrichting {direction}" ,
2021-07-04 00:22:46 +02:00
"fr" : "Filme dans une direction {direction}" ,
"it" : "Punta in direzione {direction}"
2021-04-28 20:42:23 +02:00
} ,
"hideInAnswer" : true
}
]
2020-11-17 16:29:51 +01:00
} ,
{
"#" : "Operator" ,
"freeform" : {
"key" : "operator"
} ,
"question" : {
"en" : "Who operates this CCTV?" ,
2021-06-04 17:23:17 +02:00
"nl" : "Wie beheert deze bewakingscamera?" ,
2021-07-04 00:22:46 +02:00
"fr" : "Qui exploite ce système de vidéosurveillance ?" ,
"it" : "Chi gestisce questa videocamera a circuito chiuso?"
2020-11-17 16:29:51 +01:00
} ,
"render" : {
"en" : "Operated by {operator}" ,
2021-06-04 17:23:17 +02:00
"nl" : "Beheer door {operator}" ,
2021-07-04 00:22:46 +02:00
"fr" : "Exploité par {operator}" ,
"it" : "È gestita da {operator}"
2020-11-17 16:29:51 +01:00
}
} ,
{
"#" : "Surveillance type: public, outdoor, indoor" ,
"question" : {
"en" : "What kind of surveillance is this camera" ,
2021-06-04 17:23:17 +02:00
"nl" : "Wat soort bewaking wordt hier uitgevoerd?" ,
2021-07-04 00:22:46 +02:00
"fr" : "Quel genre de surveillance est cette caméra" ,
"it" : "Che cosa sorveglia questa videocamera"
2020-11-17 16:29:51 +01:00
} ,
"mappings" : [
{
"if" : {
"and" : [
"surveillance=public"
]
} ,
"then" : {
"en" : "A public area is surveilled, such as a street, a bridge, a square, a park, a train station, a public corridor or tunnel,..." ,
2021-06-04 17:23:17 +02:00
"nl" : "Bewaking van de publieke ruilmte, dus een straat, een brug, een park, een plein, een stationsgebouw, een publiek toegankelijke gang of tunnel..." ,
2021-07-04 00:22:46 +02:00
"fr" : "Une zone publique est surveillée, telle qu'une rue, un pont, une place, un parc, une gare, un couloir ou un tunnel public…" ,
"it" : "Sorveglia un'area pubblica, come una strada, un ponte, una piazza, un parco, una stazione, un passaggio o un sottopasso pubblico, ..."
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : {
"and" : [
"surveillance=outdoor"
]
} ,
"then" : {
"en" : "An outdoor, yet private area is surveilled (e.g. a parking lot, a fuel station, courtyard, entrance, private driveway, ...)" ,
2021-06-04 17:23:17 +02:00
"nl" : "Een buitenruimte met privaat karakter (zoals een privé-oprit, een parking, tankstation, ...)" ,
2021-07-04 00:22:46 +02:00
"fr" : "Une zone extérieure, mais privée, est surveillée (par exemple, un parking, une station-service, une cour, une entrée, une allée privée, etc.)" ,
"it" : "Sorveglia un'area esterna di proprietà privata (un parcheggio, una stazione di servizio, un cortile, un ingresso, un vialetto privato, ...)"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : {
"and" : [
"surveillance=indoor"
]
} ,
"then" : {
"nl" : "Een private binnenruimte wordt bewaakt, bv. een winkel, een parkeergarage, ..." ,
2021-06-04 17:23:17 +02:00
"en" : "A private indoor area is surveilled, e.g. a shop, a private underground parking, ..." ,
2021-07-04 00:22:46 +02:00
"fr" : "Une zone intérieure privée est surveillée, par exemple un magasin, un parking souterrain privé…" ,
"it" : "Sorveglia un ambiente interno di proprietà privata, per esempio un negozio, un parcheggio sotterraneo privato, ..."
2020-11-17 16:29:51 +01:00
}
}
]
} ,
{
"#" : "Indoor camera? This isn't clear for 'public'-cameras" ,
"question" : {
"en" : "Is the public space surveilled by this camera an indoor or outdoor space?" ,
2021-06-04 17:23:17 +02:00
"nl" : "Bevindt de bewaakte publieke ruimte camera zich binnen of buiten?" ,
2021-07-04 00:22:46 +02:00
"fr" : "L'espace public surveillé par cette caméra est-il un espace intérieur ou extérieur ?" ,
"it" : "Lo spazio pubblico sorvegliato da questa videocamera è all'aperto o al chiuso?"
2020-11-17 16:29:51 +01:00
} ,
"condition" : {
"and" : [
"surveillance:type=public"
]
} ,
"mappings" : [
{
"if" : "indoor=yes" ,
"then" : {
"en" : "This camera is located indoors" ,
2021-06-04 17:23:17 +02:00
"nl" : "Deze camera bevindt zich binnen" ,
2021-07-04 00:22:46 +02:00
"fr" : "Cette caméra est située à l'intérieur" ,
"it" : "Questa videocamera si trova al chiuso"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : "indoor=no" ,
"then" : {
"en" : "This camera is located outdoors" ,
2021-06-04 17:23:17 +02:00
"nl" : "Deze camera bevindt zich buiten" ,
2021-07-04 00:22:46 +02:00
"fr" : "Cette caméra est située à l'extérieur" ,
2021-07-18 18:02:17 +02:00
"it" : "Questa videocamera si trova all'aperto" ,
"ru" : "Эта камера расположена снаружи"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : "indoor=" ,
"then" : {
"en" : "This camera is probably located outdoors" ,
2021-06-04 17:23:17 +02:00
"nl" : "Deze camera bevindt zich waarschijnlijk buiten" ,
2021-07-04 00:22:46 +02:00
"fr" : "Cette caméra est probablement située à l'extérieur" ,
2021-07-18 18:02:17 +02:00
"it" : "Questa videocamera si trova probabilmente all'esterno" ,
"ru" : "Возможно, эта камера расположена снаружи"
2020-11-17 16:29:51 +01:00
} ,
"hideInAnswer" : true
}
]
} ,
{
"#" : "Level" ,
"question" : {
"en" : "On which level is this camera located?" ,
2021-06-04 17:23:17 +02:00
"nl" : "Op welke verdieping bevindt deze camera zich?" ,
2021-07-04 00:22:46 +02:00
"fr" : "À quel niveau se trouve cette caméra ?" ,
"it" : "A che piano si trova questa videocamera?"
2020-11-17 16:29:51 +01:00
} ,
2021-01-12 20:46:01 +01:00
"render" : {
"en" : "Located on level {level}" ,
2021-06-04 17:23:17 +02:00
"nl" : "Bevindt zich op verdieping {level}" ,
2021-07-04 00:22:46 +02:00
"fr" : "Situé au niveau {level}" ,
"it" : "Si trova al piano {level}"
2021-01-12 20:46:01 +01:00
} ,
2020-11-17 16:29:51 +01:00
"freeform" : {
"key" : "level" ,
"type" : "nat"
} ,
"condition" : {
"or" : [
"indoor=yes" ,
"surveillance:type=ye"
]
}
} ,
{
"#" : "Surveillance:zone" ,
"question" : {
"en" : "What exactly is surveilled here?" ,
2021-06-04 17:23:17 +02:00
"nl" : "Wat wordt hier precies bewaakt?" ,
2021-07-04 00:22:46 +02:00
"fr" : "Qu'est-ce qui est surveillé ici ?" ,
"it" : "Che cosa è sorvegliato qui?"
2020-11-17 16:29:51 +01:00
} ,
"freeform" : {
"key" : "surveillance:zone"
} ,
"render" : {
"en" : " Surveills a {surveillance:zone}" ,
2021-06-04 17:23:17 +02:00
"nl" : "Bewaakt een {surveillance:zone}" ,
2021-07-04 00:22:46 +02:00
"fr" : " Surveille un(e) {surveillance:zone}" ,
"it" : " Sorveglia una {surveillance:zone}"
2020-11-17 16:29:51 +01:00
} ,
"mappings" : [
{
"if" : {
"and" : [
"surveillance:zone=parking"
]
} ,
"then" : {
"en" : "Surveills a parking" ,
2021-06-04 17:23:17 +02:00
"nl" : "Bewaakt een parking" ,
2021-07-04 00:22:46 +02:00
"fr" : "Surveille un parking" ,
"it" : "Sorveglia un parcheggio"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : {
"and" : [
"surveillance:zone=traffic"
]
} ,
"then" : {
"en" : "Surveills the traffic" ,
2021-06-04 17:23:17 +02:00
"nl" : "Bewaakt het verkeer" ,
2021-07-04 00:22:46 +02:00
"fr" : "Surveille la circulation" ,
"it" : "Sorveglia il traffico"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : {
"and" : [
"surveillance:zone=entrance"
]
} ,
"then" : {
"en" : "Surveills an entrance" ,
2021-06-04 17:23:17 +02:00
"nl" : "Bewaakt een ingang" ,
2021-07-04 00:22:46 +02:00
"fr" : "Surveille une entrée" ,
"it" : "Sorveglia un ingresso"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : {
"and" : [
"surveillance:zone=corridor"
]
} ,
"then" : {
"en" : "Surveills a corridor" ,
2021-06-04 17:23:17 +02:00
"nl" : "Bewaakt een gang" ,
2021-07-04 00:22:46 +02:00
"fr" : "Surveille un couloir" ,
"it" : "Sorveglia un corridoio"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : {
"and" : [
"surveillance:zone=public_transport_platform"
]
} ,
"then" : {
"en" : "Surveills a public tranport platform" ,
2021-06-04 17:23:17 +02:00
"nl" : "Bewaakt een perron of bushalte" ,
2021-07-04 00:22:46 +02:00
"fr" : "Surveille un quai de transport public" ,
"it" : "Sorveglia una pensilina del trasporto pubblico"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : {
"and" : [
"surveillance:zone=shop"
]
} ,
"then" : {
"en" : "Surveills a shop" ,
2021-06-04 17:23:17 +02:00
"nl" : "Bewaakt een winkel" ,
2021-07-04 00:22:46 +02:00
"fr" : "Surveille un magasin" ,
"it" : "Sorveglia un negozio"
2020-11-17 16:29:51 +01:00
}
}
]
} ,
{
"#" : "camera:mount" ,
"question" : {
"en" : "How is this camera placed?" ,
2021-06-04 17:23:17 +02:00
"nl" : "Hoe is deze camera geplaatst?" ,
2021-07-04 00:22:46 +02:00
"fr" : "Comment cette caméra est-elle placée ?" ,
2021-07-18 18:02:17 +02:00
"it" : "Com'è posizionata questa telecamera?" ,
"ru" : "Как расположена эта камера?"
2020-11-17 16:29:51 +01:00
} ,
2021-01-12 20:46:01 +01:00
"render" : {
"en" : "Mounting method: {mount}" ,
2021-06-04 17:23:17 +02:00
"nl" : "Montage: {camera:mount}" ,
2021-07-04 00:22:46 +02:00
"fr" : "Méthode de montage : {mount}" ,
"it" : "Metodo di montaggio: {mount}"
2021-01-12 20:46:01 +01:00
} ,
2020-11-17 16:29:51 +01:00
"freeform" : {
"key" : "camera:mount"
} ,
"mappings" : [
{
"if" : "camera:mount=wall" ,
"then" : {
"en" : "This camera is placed against a wall" ,
2021-06-04 17:23:17 +02:00
"nl" : "Deze camera hangt aan een muur" ,
2021-07-04 00:22:46 +02:00
"fr" : "Cette caméra est placée contre un mur" ,
"it" : "Questa telecamera è posizionata contro un muro"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : "camera:mount=pole" ,
"then" : {
"en" : "This camera is placed one a pole" ,
2021-06-04 17:23:17 +02:00
"nl" : "Deze camera staat op een paal" ,
2021-07-04 00:22:46 +02:00
"fr" : "Cette caméra est placée sur un poteau" ,
"it" : "Questa telecamera è posizionata su un palo"
2020-11-17 16:29:51 +01:00
}
} ,
{
"if" : "camera:mount=ceiling" ,
"then" : {
"en" : "This camera is placed on the ceiling" ,
2021-06-04 17:23:17 +02:00
"nl" : "Deze camera hangt aan het plafond" ,
2021-07-04 00:22:46 +02:00
"fr" : "Cette caméra est placée au plafond" ,
"it" : "Questa telecamera è posizionata sul soffitto"
2020-11-17 16:29:51 +01:00
}
}
]
}
] ,
"hideUnderlayingFeaturesMinPercentage" : 0 ,
"icon" : {
"render" : "./assets/themes/surveillance_cameras/logo.svg" ,
"mappings" : [
{
"if" : "camera:type=dome" ,
"then" : "./assets/themes/surveillance_cameras/dome.svg"
} ,
{
"if" : "_direction:leftright=right" ,
"then" : "./assets/themes/surveillance_cameras/cam_right.svg"
} ,
{
"if" : "_direction:leftright=left" ,
"then" : "./assets/themes/surveillance_cameras/cam_left.svg"
}
]
} ,
"rotation" : {
2021-01-04 04:06:21 +01:00
"#" : "Note: {camera:direction} is substituted by a number, giving the string 'calc(123deg + 90deg)' ; it is this string that is used as css property, which interprets the calc" ,
Fix issues with camera rotation
This commit fixes at least these issues that I was aware of:
* Cardinal directions (e.g. NE) were not recognized.
* The camera icon did not rotatie when direction=* was used instead of
camera:direction, but the blue direction visualizer did.
Pietervdvn said he would have liked to convert the code for direction
normalizing to calculatedTags in a JSON file (as documented in
Docs/CalculatedTags.md), but when he saw the oneliners I had to produce
in response, I was allowed to keep it in SimpleMetaTagger.ts for now.
For your amusement, the oneliners are included below.
"calculatedTags": [
"_direction:numerical=(dir => dir === undefined ? undefined : ({N: 0, NNE: 22.5, NE: 45, ENE: 67.5, E: 90, ESE: 112.5, SE: 135, SSE: 157.5, S: 180, SSW: 202.5, SW: 225, WSW: 247.5, W: 270, WNW: 292.5, NW: 315, NNW: 337.5}[dir] ?? (isNaN(parseFloat(dir)) ? undefined : ((parseFloat(dir) % 360 + 360) % 360)))))(feat.properties['camera:direction'] ?? feat.properties.direction)",
"_direction:leftright=feat.properties['_direction:numerical'] === undefined ? undefined : (feat.properties['_direction:numerical'] <= 180 ? 'right' : 'left')"
]
2021-04-28 16:45:48 +02:00
"render" : "calc({_direction:numerical}deg + 90deg)" ,
2020-11-17 16:29:51 +01:00
"mappings" : [
{
"if" : "camera:type=dome" ,
"then" : "0"
} ,
{
"if" : "_direction:leftright=right" ,
Fix issues with camera rotation
This commit fixes at least these issues that I was aware of:
* Cardinal directions (e.g. NE) were not recognized.
* The camera icon did not rotatie when direction=* was used instead of
camera:direction, but the blue direction visualizer did.
Pietervdvn said he would have liked to convert the code for direction
normalizing to calculatedTags in a JSON file (as documented in
Docs/CalculatedTags.md), but when he saw the oneliners I had to produce
in response, I was allowed to keep it in SimpleMetaTagger.ts for now.
For your amusement, the oneliners are included below.
"calculatedTags": [
"_direction:numerical=(dir => dir === undefined ? undefined : ({N: 0, NNE: 22.5, NE: 45, ENE: 67.5, E: 90, ESE: 112.5, SE: 135, SSE: 157.5, S: 180, SSW: 202.5, SW: 225, WSW: 247.5, W: 270, WNW: 292.5, NW: 315, NNW: 337.5}[dir] ?? (isNaN(parseFloat(dir)) ? undefined : ((parseFloat(dir) % 360 + 360) % 360)))))(feat.properties['camera:direction'] ?? feat.properties.direction)",
"_direction:leftright=feat.properties['_direction:numerical'] === undefined ? undefined : (feat.properties['_direction:numerical'] <= 180 ? 'right' : 'left')"
]
2021-04-28 16:45:48 +02:00
"then" : "calc({_direction:numerical}deg - 90deg)"
2020-11-17 16:29:51 +01:00
}
]
} ,
"width" : {
"render" : "8"
} ,
"iconSize" : {
"mappings" : [
{
"if" : "camera:type=dome" ,
"then" : "50,50,center"
} ,
{
"if" : "_direction:leftright~*" ,
"then" : "100,35,center"
}
] ,
"render" : "50,50,center"
} ,
"color" : {
"render" : "#f00"
} ,
"presets" : [
{
"tags" : [
"man_made=surveillance" ,
"surveillance:type=camera"
] ,
"title" : "Surveillance camera"
}
] ,
"wayHandling" : 2
2021-05-19 22:38:41 +02:00
}