diff --git a/assets/geo/uulm_beta copy.geojson b/assets/geo/uulm_beta copy.geojson new file mode 100644 index 0000000..a72e5fa --- /dev/null +++ b/assets/geo/uulm_beta copy.geojson @@ -0,0 +1,2293 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "name": "O26", + "description": "connections: [O25, O27]", + "layer": "buildings" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.956487, + 48.422766 + ], + [ + 9.956754, + 48.422869 + ], + [ + 9.956875, + 48.422724 + ], + [ + 9.956864, + 48.422719 + ], + [ + 9.956912, + 48.422659 + ], + [ + 9.956663, + 48.422563 + ], + [ + 9.956805, + 48.422393 + ], + [ + 9.956499, + 48.422281 + ], + [ + 9.956359, + 48.42245 + ], + [ + 9.956106, + 48.422355 + ], + [ + 9.956057, + 48.422414 + ], + [ + 9.95607, + 48.422419 + ], + [ + 9.955976, + 48.42253 + ], + [ + 9.955959, + 48.422526 + ], + [ + 9.955931, + 48.422559 + ], + [ + 9.95619, + 48.422653 + ], + [ + 9.956046, + 48.422825 + ], + [ + 9.956348, + 48.422933 + ], + [ + 9.956487, + 48.422766 + ] + ] + ] + }, + "id": "E0NjM" + }, + { + "type": "Feature", + "properties": { + "name": "O27", + "layer": "buildings" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.957511, + 48.422725 + ], + [ + 9.95749, + 48.422716 + ], + [ + 9.957505, + 48.422703 + ], + [ + 9.957501, + 48.422687 + ], + [ + 9.95752, + 48.422666 + ], + [ + 9.957304, + 48.42259 + ], + [ + 9.95714, + 48.422781 + ], + [ + 9.957071, + 48.422793 + ], + [ + 9.956872, + 48.422723 + ], + [ + 9.956754, + 48.422869 + ], + [ + 9.957041, + 48.422971 + ], + [ + 9.957057, + 48.42301 + ], + [ + 9.957013, + 48.423063 + ], + [ + 9.956992, + 48.423067 + ], + [ + 9.956977, + 48.423086 + ], + [ + 9.956978, + 48.423105 + ], + [ + 9.956937, + 48.423155 + ], + [ + 9.956951, + 48.423159 + ], + [ + 9.956942, + 48.423163 + ], + [ + 9.957128, + 48.423232 + ], + [ + 9.957134, + 48.423228 + ], + [ + 9.957148, + 48.423235 + ], + [ + 9.957313, + 48.423032 + ], + [ + 9.957367, + 48.423022 + ], + [ + 9.957596, + 48.423104 + ], + [ + 9.957717, + 48.422963 + ], + [ + 9.957557, + 48.422903 + ], + [ + 9.95758, + 48.422903 + ], + [ + 9.957604, + 48.422864 + ], + [ + 9.957598, + 48.422852 + ], + [ + 9.957604, + 48.422853 + ], + [ + 9.957634, + 48.422817 + ], + [ + 9.95761, + 48.422752 + ], + [ + 9.957552, + 48.422732 + ], + [ + 9.957516, + 48.422737 + ], + [ + 9.957511, + 48.422725 + ] + ], + [ + [ + 9.957399, + 48.422788 + ], + [ + 9.957439, + 48.422805 + ], + [ + 9.957447, + 48.422848 + ], + [ + 9.957509, + 48.42287 + ], + [ + 9.957531, + 48.422894 + ], + [ + 9.95752, + 48.422903 + ], + [ + 9.957395, + 48.422856 + ], + [ + 9.95738, + 48.422813 + ], + [ + 9.957399, + 48.422788 + ] + ] + ] + }, + "id": "QwNzY" + }, + { + "type": "Feature", + "properties": { + "name": "O28", + "layer": "buildings" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.957694, + 48.42299 + ], + [ + 9.957633, + 48.423065 + ], + [ + 9.957685, + 48.423083 + ], + [ + 9.957655, + 48.423117 + ], + [ + 9.957988, + 48.423238 + ], + [ + 9.958181, + 48.423011 + ], + [ + 9.957855, + 48.422888 + ], + [ + 9.957753, + 48.423011 + ], + [ + 9.957694, + 48.42299 + ] + ] + ] + }, + "id": "g2OTc" + }, + { + "type": "Feature", + "properties": { + "name": "O29", + "layer": "buildings" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.957469, + 48.423339 + ], + [ + 9.957796, + 48.423461 + ], + [ + 9.957907, + 48.423329 + ], + [ + 9.957583, + 48.423205 + ], + [ + 9.957469, + 48.423339 + ] + ] + ] + }, + "id": "gwNDk" + }, + { + "type": "Feature", + "properties": { + "name": "O25", + "layer": "buildings" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.955818, + 48.422616 + ], + [ + 9.955785, + 48.422601 + ], + [ + 9.95577, + 48.422642 + ], + [ + 9.955799, + 48.422687 + ], + [ + 9.955697, + 48.422756 + ], + [ + 9.955543, + 48.422697 + ], + [ + 9.955557, + 48.422639 + ], + [ + 9.955538, + 48.422633 + ], + [ + 9.955527, + 48.422642 + ], + [ + 9.955314, + 48.422563 + ], + [ + 9.955325, + 48.422551 + ], + [ + 9.955048, + 48.42245 + ], + [ + 9.955055, + 48.422444 + ], + [ + 9.955036, + 48.422436 + ], + [ + 9.955056, + 48.422407 + ], + [ + 9.955237, + 48.422373 + ], + [ + 9.95524, + 48.422384 + ], + [ + 9.955286, + 48.422377 + ], + [ + 9.955311, + 48.422345 + ], + [ + 9.955327, + 48.422336 + ], + [ + 9.955121, + 48.422257 + ], + [ + 9.955229, + 48.422134 + ], + [ + 9.955276, + 48.42208 + ], + [ + 9.955304, + 48.422091 + ], + [ + 9.955358, + 48.422031 + ], + [ + 9.955408, + 48.422053 + ], + [ + 9.955404, + 48.422089 + ], + [ + 9.955424, + 48.422081 + ], + [ + 9.95544, + 48.422062 + ], + [ + 9.955503, + 48.422086 + ], + [ + 9.955498, + 48.422097 + ], + [ + 9.955538, + 48.422112 + ], + [ + 9.955548, + 48.422102 + ], + [ + 9.955877, + 48.422225 + ], + [ + 9.955889, + 48.422207 + ], + [ + 9.955986, + 48.42224 + ], + [ + 9.955944, + 48.422297 + ], + [ + 9.956104, + 48.422357 + ], + [ + 9.956058, + 48.422415 + ], + [ + 9.956069, + 48.422422 + ], + [ + 9.955976, + 48.422532 + ], + [ + 9.955959, + 48.422527 + ], + [ + 9.955933, + 48.422558 + ], + [ + 9.955913, + 48.422553 + ], + [ + 9.955818, + 48.422616 + ] + ] + ] + }, + "id": "YzMDM" + }, + { + "type": "Feature", + "properties": { + "name": "Bistro", + "description": "type: food_drink\nlevel: 2\nbuilding: o25\ndescription: Bistro" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955735, + 48.42224 + ] + }, + "id": "k3NTA" + }, + { + "type": "Feature", + "properties": { + "name": "BurgerBar", + "description": "type: food_drink\nlevel: 2\nbuilding: o25\ndescription: Burgers", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955818, + 48.422328 + ] + }, + "id": "c3OTk" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 2\nconnects: [o29, outside]", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957527, + 48.423267 + ] + }, + "id": "A1NDQ" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 2\nconnects: [o28, outside]", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957663, + 48.423077 + ] + }, + "id": "A0MTY" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 1\nconnects: [o28, outside]", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957729, + 48.422999 + ] + }, + "id": "I3MjA" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 2\nconnects: [o28, outside]", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.958054, + 48.42316 + ] + }, + "id": "kyNTc" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 1\nconnects: [o28, o27]", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957643, + 48.423046 + ] + }, + "id": "g2Mzc" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 2\nconnects: [o28, o27]", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957645, + 48.423047 + ] + }, + "id": "E2MTk" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 1\nconnects: [o27, outside]", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957454, + 48.422637 + ] + }, + "id": "gwMTE" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 2\nconnects: [o27, outside]", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95701, + 48.423186 + ] + }, + "id": "IzMDU" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 1\nconnects: [o26, o27]", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956836, + 48.422768 + ] + }, + "id": "Q3ODk" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 1\nconnects: [o26, o25]", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956043, + 48.422448 + ] + }, + "id": "U0OTA" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "layer": "layer_2", + "description": "type: door\nlevel: 2\nconnects: [o26, o27]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956847, + 48.422754 + ] + }, + "id": "UwOTg" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 2\nconnects: [o26, o25]", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956003, + 48.422497 + ] + }, + "id": "U3NzE" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "description": "type: door\nlevel: 3\nconnects: [o26, o25]", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956051, + 48.42244 + ] + }, + "id": "EyMjg" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "layer": "layer_4", + "description": "type: door\nlevel: 4\nconnects: [o26, o25]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956026, + 48.422464 + ] + }, + "id": "IxMTA" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "layer": "layer_5", + "description": "type: door\nlevel: 5\nconnects: [o26, o27]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95679, + 48.422821 + ] + }, + "id": "gzMDQ" + }, + { + "type": "Feature", + "properties": { + "name": "door", + "layer": "layer_5", + "description": "type: door\nlevel: 5\nconnects: [o26, o25]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956034, + 48.422457 + ] + }, + "id": "I4OTg" + }, + { + "type": "Feature", + "properties": { + "name": "food_drink", + "description": "type: food_drink\nlevel: 2\nbuilding: o27\ndescription: Coffee, Snacks, Drinks", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95736, + 48.422972 + ] + }, + "id": "Q1MTY" + }, + { + "type": "Feature", + "properties": { + "layer": "layer_2", + "description": "type: food_drink\nlevel: 2\nbuilding: o25\ndescription: Coffee, Snacks, Drinks", + "name": "food_drink" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955884, + 48.422395 + ] + }, + "id": "M5OTg" + }, + { + "type": "Feature", + "properties": { + "name": "food_drink", + "description": "type: food_drink\nlayer: 2\nbuilding: o25\ndescription: Coffee, Snacks, Drinks", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955599, + 48.422217 + ] + }, + "id": "I3MTA" + }, + { + "type": "Feature", + "properties": { + "name": "H20", + "description": "type: lecture_hall\nlevel: 2\nbuilding: o27\ndescription: idk, it looks like an octagon", + "layer": "layer_2" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.957509, + 48.422868 + ], + [ + 9.957452, + 48.422848 + ], + [ + 9.957438, + 48.4228 + ], + [ + 9.957478, + 48.422744 + ], + [ + 9.957547, + 48.422732 + ], + [ + 9.957607, + 48.422749 + ], + [ + 9.957631, + 48.422813 + ], + [ + 9.9576, + 48.422853 + ], + [ + 9.957509, + 48.422868 + ] + ] + ] + }, + "id": "Y5NTU" + }, + { + "type": "Feature", + "properties": { + "name": "H22", + "description": "type: lecture_hall\nlevel: 2\nbuilding: o28\ndescription: Big Lecture Hall, often used for Info Lectures", + "layer": "layer_2" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.958066, + 48.423145 + ], + [ + 9.957847, + 48.423064 + ], + [ + 9.957945, + 48.42296 + ], + [ + 9.958, + 48.422943 + ], + [ + 9.95818, + 48.42301 + ], + [ + 9.958066, + 48.423145 + ] + ] + ] + }, + "id": "g4MjA" + }, + { + "type": "Feature", + "properties": { + "name": "lift", + "layer": "lift", + "description": "type: lift\nbuilding: o29\nconnects_levels: [1, 2, 3]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957559, + 48.423315 + ] + }, + "id": "c0NDc" + }, + { + "type": "Feature", + "properties": { + "name": "lift", + "description": "type: lift\nbuilding: o27\nconnects_levels: [1, 2, 3, 4, 5]", + "layer": "lift" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957325, + 48.422964 + ] + }, + "id": "g1NjU" + }, + { + "type": "Feature", + "properties": { + "name": "lift", + "layer": "lift", + "description": "type: lift\nbuilding: o26\nconnects_levels: [1, 2, 3, 4, 5]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956493, + 48.422605 + ] + }, + "id": "YzNDY" + }, + { + "type": "Feature", + "properties": { + "name": "lift", + "description": "type: lift\nbuilding: o25\nconnects_levels: [1, 2, 3, 4, 5, 6]", + "layer": "lift" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955672, + 48.422277 + ] + }, + "id": "c0Nzk" + }, + { + "type": "Feature", + "properties": { + "name": "pc_pool", + "description": "type: pc_pool\nlevel: 1\nbuilding: o28\nnumber: 1001", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957823, + 48.423141 + ] + }, + "id": "YzNzE" + }, + { + "type": "Feature", + "properties": { + "name": "pc_pool", + "layer": "layer_3", + "description": "type: pc_pool\nlevel: 3\nbuilding: o29\nnumber: 3005" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957764, + 48.423412 + ] + }, + "id": "UyMzQ" + }, + { + "type": "Feature", + "properties": { + "name": "pc_pool", + "description": "type: pc_pool\nlevel: 3\nbuilding: o29\nnumber: 3006", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95768, + 48.423376 + ] + }, + "id": "M4MDA" + }, + { + "type": "Feature", + "properties": { + "name": "pc_pool", + "description": "type: pc_pool\nlevel: 1\nbuilding: o27\nnumber: 133", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957253, + 48.42271 + ] + }, + "id": "U1MzI" + }, + { + "type": "Feature", + "properties": { + "description": "type: public_transport\nbus_lines: [5, 8, 13, E, N3]\ntram_lines: [2]", + "name": "public_transport", + "layer": "layer_public_transport" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.956899, + 48.422292 + ], + [ + 9.956365, + 48.421983 + ], + [ + 9.956195, + 48.421858 + ], + [ + 9.956258, + 48.421767 + ], + [ + 9.956371, + 48.421696 + ], + [ + 9.957063, + 48.422208 + ], + [ + 9.956899, + 48.422292 + ] + ] + ] + }, + "id": "Y4NjA" + }, + { + "type": "Feature", + "properties": { + "description": "type: public_transport\nbus_lines: [5, 13, E, N3]\ntram_lines: [2]", + "name": "public_transport", + "layer": "layer_public_transport" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.956491, + 48.425174 + ], + [ + 9.956648, + 48.425245 + ], + [ + 9.957028, + 48.424888 + ], + [ + 9.956888, + 48.424832 + ], + [ + 9.956679, + 48.424985 + ], + [ + 9.956491, + 48.425174 + ] + ] + ] + }, + "id": "QyMjQ" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "description": "type: seminar_room\nlevel: 1\nbuilding: o29\nnumber: 1001", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.9576, + 48.423238 + ] + }, + "id": "UwMDc" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "layer": "layer_1", + "description": "type: seminar_room\nlevel: 1\nbuilding: o29\nnumber: 1002" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957674, + 48.423266 + ] + }, + "id": "cxODg" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "layer": "layer_1", + "description": "type: seminar_room\nlevel: 1\nbuilding: o29\nnumber: 1003" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957759, + 48.423297 + ] + }, + "id": "IxMTM" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "layer": "layer_1", + "description": "type: seminar_room\nlevel: 1\nbuilding: o29\nnumber: 1004" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957835, + 48.423322 + ] + }, + "id": "cwODM" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "description": "type: seminar_room\nlevel: 2\nbuilding: o29\nnumber: 2001", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957598, + 48.423239 + ] + }, + "id": "k4MDk" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "description": "type: seminar_room\nlevel: 2\nbuilding: o29\nnumber: 2002", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957675, + 48.423267 + ] + }, + "id": "UyMDc" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "description": "type: seminar_room\nlevel: 2\nbuilding: o29\nnumber: 2003", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957757, + 48.423296 + ] + }, + "id": "U3MDE" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "layer": "layer_2", + "description": "type: seminar_room\nlevel: 2\nbuilding: o29\nnumber: 2004" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957834, + 48.423323 + ] + }, + "id": "czNjM" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "layer": "layer_2", + "description": "type: seminar_room\nlevel: 2\nbuilding: o29\nnumber: 2005" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957764, + 48.423412 + ] + }, + "id": "IyNTc" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "layer": "layer_2", + "description": "type: seminar_room\nlevel: 2\nbuilding: o29\nnumber: 2006" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957678, + 48.423377 + ] + }, + "id": "EwODc" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "description": "type: seminar_room\nlevel: 3\nbuilding: o29\nnumber: 3001", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957599, + 48.423238 + ] + }, + "id": "g2NjA" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "layer": "layer_3", + "description": "type: seminar_room\nlevel: 3\nbuilding: o29\nnumber: 3002" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957677, + 48.423266 + ] + }, + "id": "U3MTQ" + }, + { + "type": "Feature", + "properties": { + "name": "seminar_room", + "layer": "layer_3", + "description": "type: seminar_room\nlevel: 3\nbuilding: o29\nnumber: 3003" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957757, + 48.423297 + ] + }, + "id": "UwMzg" + }, + { + "type": "Feature", + "properties": { + "description": "type: seminar_room\nlevel: 3\nbuilding: o29\nnumber: 3004", + "name": "seminar_room", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957832, + 48.423322 + ] + }, + "id": "kzMzA" + }, + { + "type": "Feature", + "properties": { + "name": "stairs", + "description": "type: stairs\nbuilding: o29\nconnects_levels: [1,2,3]", + "layer": "stairs" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957509, + 48.423328 + ] + }, + "id": "E5MDQ" + }, + { + "type": "Feature", + "properties": { + "layer": "stairs", + "name": "stairs", + "description": "type: stairs\nbuilding: o29\nconnects_levels: [1,2,3]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957828, + 48.42339 + ] + }, + "id": "I1Njk" + }, + { + "type": "Feature", + "properties": { + "name": "stairs", + "description": "type: stairs\nbuilding: o28\nconnects_levels: [1, 2]", + "layer": "stairs" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957705, + 48.423024 + ] + }, + "id": "gwNTI" + }, + { + "type": "Feature", + "properties": { + "name": "stairs", + "description": "type: stairs\nbuilding: o27\nconnects_levels: [1, 2, 3, 4, 5]", + "layer": "stairs" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957215, + 48.422917 + ] + }, + "id": "EzODk" + }, + { + "type": "Feature", + "properties": { + "name": "stairs", + "description": "type: stairs\nbuilding: o26\nconnects_levels: [1, 2]", + "layer": "stairs" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956448, + 48.422549 + ] + }, + "id": "MwOTA" + }, + { + "type": "Feature", + "properties": { + "name": "stairs", + "description": "type: stairs\nbuilding: o26\nconnects_levels: [2, 3, 4, 5]", + "layer": "stairs" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956426, + 48.422602 + ] + }, + "id": "k0NTQ" + }, + { + "type": "Feature", + "properties": { + "name": "stairs", + "description": "type: stairs\nbuilding: o25\nconnects_levels: [1, 2]", + "layer": "stairs" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955645, + 48.422265 + ] + }, + "id": "M3Njc" + }, + { + "type": "Feature", + "properties": { + "name": "stairs", + "layer": "stairs", + "description": "type: stairs\nbuilding: o25\nconnects_levels: [2, 3, 4, 5, 6]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955629, + 48.42231 + ] + }, + "id": "c1MzM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: o29\n\n", + "layer": "level_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957543, + 48.423354 + ] + }, + "id": "AzNzU" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: o27\n", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957029, + 48.422951 + ] + }, + "id": "Y0NDM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: handicap\nbuilding: o27", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957162, + 48.422794 + ] + }, + "id": "QzNjE" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o27", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957179, + 48.422783 + ] + }, + "id": "A2MTA" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o26", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956392, + 48.42254 + ] + }, + "id": "cxNTM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_3", + "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o29" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957544, + 48.423355 + ] + }, + "id": "g0MzY" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: handicap\nbuilding: o29", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957545, + 48.423342 + ] + }, + "id": "k1ODA" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o29", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957547, + 48.423343 + ] + }, + "id": "MzNjc" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o29", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957551, + 48.423339 + ] + }, + "id": "I2MTE" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: male\nbuilding: o27", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957029, + 48.42295 + ] + }, + "id": "IzMDg" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: female\nbuilding: o27", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95704, + 48.422941 + ] + }, + "id": "k4Njg" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o27", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957201, + 48.422991 + ] + }, + "id": "MxNjQ" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o27", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95724, + 48.422844 + ] + }, + "id": "M1ODg" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 4\ntoilet_type: male\nbuilding: o27", + "layer": "layer_4" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957203, + 48.422989 + ] + }, + "id": "I3Nzk" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 4\ntoilet_type: female\nbuilding: o27", + "layer": "layer_4" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95724, + 48.422844 + ] + }, + "id": "Y1MTU" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 5\ntoilet_type: male\nbuilding: o27", + "layer": "layer_5" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957201, + 48.422991 + ] + }, + "id": "kyOTM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 5\ntoilet_type: female\nbuilding: o27", + "layer": "layer_5" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957242, + 48.422843 + ] + }, + "id": "gzMzY" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: o26", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95649, + 48.422643 + ] + }, + "id": "I1NjU" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: female\nbuilding: o26", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956459, + 48.422644 + ] + }, + "id": "QwMTM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: male\nbuilding: o26", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956471, + 48.422635 + ] + }, + "id": "UwMTk" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o26", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956471, + 48.422638 + ] + }, + "id": "AwNzg" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o26", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956501, + 48.422642 + ] + }, + "id": "Y4ODI" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 5\ntoilet_type: male\nbuilding: o26", + "layer": "layer_5" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956503, + 48.422639 + ] + }, + "id": "c3Nzc" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 5\ntoilet_type: female\nbuilding: o26", + "layer": "layer_5" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956471, + 48.422633 + ] + }, + "id": "QwMTc" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o25", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955547, + 48.422256 + ] + }, + "id": "c1NjM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: ö26", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955476, + 48.422234 + ] + }, + "id": "UyNjA" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: male\nbuilding: o25", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955672, + 48.422339 + ] + }, + "id": "M2NTA" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: female\nbuilding: o25", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955696, + 48.422312 + ] + }, + "id": "g0OTM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o25", + "layer": "laye_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955642, + 48.422266 + ] + }, + "id": "EyNjk" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o25\n" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955657, + 48.422252 + ] + }, + "id": "UxNjU" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_4", + "description": "type: toilet\nlevel: 4\ntoilet_type: female\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955644, + 48.422266 + ] + }, + "id": "I4MjE" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_4", + "description": "type: toilet\nlevel: 4\ntoilet_type: male\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955656, + 48.422252 + ] + }, + "id": "Q3MTg" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_5", + "description": "type: toilet\nlevel: 5\ntoilet_type: male\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955657, + 48.422253 + ] + }, + "id": "I0NzE" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_5", + "description": "type: toilet\nlevel: 5\ntoilet_type: female\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955642, + 48.422266 + ] + }, + "id": "M4NzY" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_6", + "description": "type: toilet\nlevel: 6\ntoilet_type: male\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955657, + 48.422253 + ] + }, + "id": "M5Njk" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_6", + "description": "type: toilet\nlevel: 6\ntoilet_type: female\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955642, + 48.422266 + ] + }, + "id": "U2Mjc" + }, + { + "type": "Feature", + "properties": { + "name": "H1", + "description": "type: lecture_hall\nlevel: 2\nbuilding: o25\ndescription: why does this have this shape", + "layer": "layer_2" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.955821, + 48.422615 + ], + [ + 9.955912, + 48.422554 + ], + [ + 9.955903, + 48.422506 + ], + [ + 9.955925, + 48.422456 + ], + [ + 9.955805, + 48.422415 + ], + [ + 9.955764, + 48.422453 + ], + [ + 9.955695, + 48.422466 + ], + [ + 9.955677, + 48.422558 + ], + [ + 9.955821, + 48.422615 + ] + ] + ] + }, + "id": "M0MjM" + }, + { + "type": "Feature", + "properties": { + "name": "H2", + "description": "type: lecture_hall\nlevel: 2\nbuilding: o25\ndescription: lecture hall 2", + "layer": "layer_2" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.955542, + 48.422698 + ], + [ + 9.9557, + 48.422756 + ], + [ + 9.955798, + 48.422687 + ], + [ + 9.95577, + 48.422638 + ], + [ + 9.955787, + 48.4226 + ], + [ + 9.955721, + 48.422576 + ], + [ + 9.955691, + 48.422611 + ], + [ + 9.955571, + 48.422606 + ], + [ + 9.955542, + 48.422698 + ] + ] + ] + }, + "id": "MzMTc" + }, + { + "type": "Feature", + "properties": { + "name": "H4", + "layer": "layer_2", + "description": "type: lecture_hall\nlevel: 2\nbuilding: o25\ndescription: this is the 5th lecture hall" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.955034, + 48.422443 + ], + [ + 9.955249, + 48.422524 + ], + [ + 9.955295, + 48.422472 + ], + [ + 9.955288, + 48.422376 + ], + [ + 9.955241, + 48.422389 + ], + [ + 9.955236, + 48.422374 + ], + [ + 9.955059, + 48.422405 + ], + [ + 9.955034, + 48.422443 + ] + ] + ] + }, + "id": "gzMDI" + } + ] +} \ No newline at end of file diff --git a/assets/geo/uulm_beta.geojson b/assets/geo/uulm_beta.geojson index cc80dc7..a72e5fa 100644 --- a/assets/geo/uulm_beta.geojson +++ b/assets/geo/uulm_beta.geojson @@ -247,6 +247,44 @@ 9.957511, 48.422725 ] + ], + [ + [ + 9.957399, + 48.422788 + ], + [ + 9.957439, + 48.422805 + ], + [ + 9.957447, + 48.422848 + ], + [ + 9.957509, + 48.42287 + ], + [ + 9.957531, + 48.422894 + ], + [ + 9.95752, + 48.422903 + ], + [ + 9.957395, + 48.422856 + ], + [ + 9.95738, + 48.422813 + ], + [ + 9.957399, + 48.422788 + ] ] ] }, @@ -536,413 +574,33 @@ { "type": "Feature", "properties": { - "layer": "buildings" - }, - "geometry": { - "type": "LineString", - "coordinates": [] - }, - "id": "Y2OTY" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: o29\n\n", - "layer": "level_1" + "name": "Bistro", + "description": "type: food_drink\nlevel: 2\nbuilding: o25\ndescription: Bistro" }, "geometry": { "type": "Point", "coordinates": [ - 9.957543, - 48.423354 + 9.955735, + 48.42224 ] }, - "id": "AzNzU" + "id": "k3NTA" }, { "type": "Feature", "properties": { - "name": "stairs", - "description": "type: stairs\nbuilding: o29\nconnects_levels: [1,2,3]", - "layer": "stairs" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957509, - 48.423328 - ] - }, - "id": "E5MDQ" - }, - { - "type": "Feature", - "properties": { - "layer": "stairs", - "name": "stairs", - "description": "type: stairs\nbuilding: o29\nconnects_levels: [1,2,3]" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957828, - 48.42339 - ] - }, - "id": "I1Njk" - }, - { - "type": "Feature", - "properties": { - "name": "lift", - "layer": "lift", - "description": "type: lift\nbuilding: o29\nconnects_levels: [1, 2, 3]" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957559, - 48.423315 - ] - }, - "id": "c0NDc" - }, - { - "type": "Feature", - "properties": { - "name": "stairs", - "description": "type: stairs\nbuilding: o28\nconnects_levels: [1, 2]", - "layer": "stairs" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957705, - 48.423024 - ] - }, - "id": "gwNTI" - }, - { - "type": "Feature", - "properties": { - "name": "stairs", - "description": "type: stairs\nbuilding: o27\nconnects_levels: [1, 2, 3, 4, 5]", - "layer": "stairs" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957215, - 48.422917 - ] - }, - "id": "EzODk" - }, - { - "type": "Feature", - "properties": { - "name": "lift", - "description": "type: lift\nbuilding: o27\nconnects_levels: [1, 2, 3, 4, 5]", - "layer": "lift" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957325, - 48.422964 - ] - }, - "id": "g1NjU" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: o27\n", - "layer": "layer_1" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957029, - 48.422951 - ] - }, - "id": "Y0NDM" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 1\ntoilet_type: handicap\nbuilding: o27", - "layer": "layer_1" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957162, - 48.422794 - ] - }, - "id": "QzNjE" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o27", - "layer": "layer_1" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957179, - 48.422783 - ] - }, - "id": "A2MTA" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o26", - "layer": "layer_1" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.956392, - 48.42254 - ] - }, - "id": "cxNTM" - }, - { - "type": "Feature", - "properties": { - "name": "stairs", - "description": "type: stairs\nbuilding: o26\nconnects_levels: [1, 2]", - "layer": "stairs" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.956448, - 48.422549 - ] - }, - "id": "MwOTA" - }, - { - "type": "Feature", - "properties": { - "name": "lift", - "layer": "lift", - "description": "type: lift\nbuilding: o26\nconnects_levels: [1, 2, 3, 4, 5]" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.956493, - 48.422605 - ] - }, - "id": "YzNDY" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "layer": "layer_3", - "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o29" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957544, - 48.423355 - ] - }, - "id": "g0MzY" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 2\ntoilet_type: handicap\nbuilding: o29", + "name": "BurgerBar", + "description": "type: food_drink\nlevel: 2\nbuilding: o25\ndescription: Burgers", "layer": "layer_2" }, "geometry": { "type": "Point", "coordinates": [ - 9.957545, - 48.423342 + 9.955818, + 48.422328 ] }, - "id": "k1ODA" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o29", - "layer": "layer_1" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957547, - 48.423343 - ] - }, - "id": "MzNjc" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o29", - "layer": "layer_3" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957551, - 48.423339 - ] - }, - "id": "I2MTE" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 2\ntoilet_type: male\nbuilding: o27", - "layer": "layer_2" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957029, - 48.42295 - ] - }, - "id": "IzMDg" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 2\ntoilet_type: female\nbuilding: o27", - "layer": "layer_2" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.95704, - 48.422941 - ] - }, - "id": "k4Njg" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o27", - "layer": "layer_3" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957201, - 48.422991 - ] - }, - "id": "MxNjQ" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o27", - "layer": "layer_3" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.95724, - 48.422844 - ] - }, - "id": "M1ODg" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 4\ntoilet_type: male\nbuilding: o27", - "layer": "layer_4" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957203, - 48.422989 - ] - }, - "id": "I3Nzk" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 4\ntoilet_type: female\nbuilding: o27", - "layer": "layer_4" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.95724, - 48.422844 - ] - }, - "id": "Y1MTU" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 5\ntoilet_type: male\nbuilding: o27", - "layer": "layer_5" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957201, - 48.422991 - ] - }, - "id": "kyOTM" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 5\ntoilet_type: female\nbuilding: o27", - "layer": "layer_5" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.957242, - 48.422843 - ] - }, - "id": "gzMzY" + "id": "c3OTk" }, { "type": "Feature", @@ -1072,505 +730,6 @@ }, "id": "IzMDU" }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: o26", - "layer": "layer_1" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.95649, - 48.422643 - ] - }, - "id": "I1NjU" - }, - { - "type": "Feature", - "properties": { - "name": "stairs", - "description": "type: stairs\nbuilding: o26\nconnects_levels: [2, 3, 4, 5]", - "layer": "stairs" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.956426, - 48.422602 - ] - }, - "id": "k0NTQ" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 2\ntoilet_type: female\nbuilding: o26", - "layer": "layer_2" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.956459, - 48.422644 - ] - }, - "id": "QwMTM" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 2\ntoilet_type: male\nbuilding: o26", - "layer": "layer_2" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.956471, - 48.422635 - ] - }, - "id": "UwMTk" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o26", - "layer": "layer_3" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.956471, - 48.422638 - ] - }, - "id": "AwNzg" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o26", - "layer": "layer_3" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.956501, - 48.422642 - ] - }, - "id": "Y4ODI" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 5\ntoilet_type: male\nbuilding: o26", - "layer": "layer_5" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.956503, - 48.422639 - ] - }, - "id": "c3Nzc" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 5\ntoilet_type: female\nbuilding: o26", - "layer": "layer_5" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.956471, - 48.422633 - ] - }, - "id": "QwMTc" - }, - { - "type": "Feature", - "properties": { - "name": "food_drink", - "description": "type: food_drink\nbuilding: o27", - "layer": "layer_2" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.95736, - 48.422972 - ] - }, - "id": "Q1MTY" - }, - { - "type": "Feature", - "properties": { - "name": "lift", - "description": "type: lift\nbuilding: o25\nconnects_levels: [1, 2, 3, 4, 5, 6]", - "layer": "lift" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955672, - 48.422277 - ] - }, - "id": "c0Nzk" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o25", - "layer": "layer_1" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955547, - 48.422256 - ] - }, - "id": "c1NjM" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: ö26", - "layer": "layer_1" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955476, - 48.422234 - ] - }, - "id": "UyNjA" - }, - { - "type": "Feature", - "properties": { - "name": "stairs", - "description": "type: stairs\nbuilding: o25\nconnecting_levels: [1, 2]", - "layer": "stairs" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955645, - 48.422265 - ] - }, - "id": "M3Njc" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 2\ntoilet_type: male\nbuilding: o25", - "layer": "layer_2" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955672, - 48.422339 - ] - }, - "id": "M2NTA" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 2\ntoilet_type: female\nbuilding: o25", - "layer": "layer_2" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955696, - 48.422312 - ] - }, - "id": "g0OTM" - }, - { - "type": "Feature", - "properties": { - "description": "type: public_transport\nbus_lines: [5, 8, 13, E, N3]\ntram_lines: [2]", - "name": "public_transport", - "layer": "layer_public_transport" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 9.956899, - 48.422292 - ], - [ - 9.956365, - 48.421983 - ], - [ - 9.956195, - 48.421858 - ], - [ - 9.956258, - 48.421767 - ], - [ - 9.956371, - 48.421696 - ], - [ - 9.957063, - 48.422208 - ], - [ - 9.956899, - 48.422292 - ] - ] - ] - }, - "id": "Y4NjA" - }, - { - "type": "Feature", - "properties": { - "description": "type: public_transport\nbus_lines: [5, 13, E, N3]\ntram_lines: [2]", - "name": "public_transport", - "layer": "layer_public_transport" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 9.956491, - 48.425174 - ], - [ - 9.956648, - 48.425245 - ], - [ - 9.957028, - 48.424888 - ], - [ - 9.956888, - 48.424832 - ], - [ - 9.956679, - 48.424985 - ], - [ - 9.956491, - 48.425174 - ] - ] - ] - }, - "id": "QyMjQ" - }, - { - "type": "Feature", - "properties": { - "name": "stairs", - "layer": "stairs", - "description": "type: stairs\nbuilding: o25\nconnects_levels: [2, 3, 4, 5, 6]" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955629, - 48.42231 - ] - }, - "id": "c1MzM" - }, - { - "type": "Feature", - "properties": { - "layer": "layer_2", - "description": "type: food_drink\nbuilding: o25", - "name": "food_drink" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955884, - 48.422395 - ] - }, - "id": "M5OTg" - }, - { - "type": "Feature", - "properties": { - "name": "food_drink", - "description": "type: food_drink\nbuilding: o25", - "layer": "layer_2" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955599, - 48.422217 - ] - }, - "id": "I3MTA" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o25", - "layer": "laye_3" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955642, - 48.422266 - ] - }, - "id": "EyNjk" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o25\n" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955657, - 48.422252 - ] - }, - "id": "UxNjU" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "layer": "layer_4", - "description": "type: toilet\nlevel: 4\ntoilet_type: female\nbuilding: o25" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955644, - 48.422266 - ] - }, - "id": "I4MjE" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "layer": "layer_4", - "description": "type: toilet\nlevel: 4\ntoilet_type: male\nbuilding: o25" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955656, - 48.422252 - ] - }, - "id": "Q3MTg" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "layer": "layer_5", - "description": "type: toilet\nlevel: 5\ntoilet_type: male\nbuilding: o25" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955657, - 48.422253 - ] - }, - "id": "I0NzE" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "layer": "layer_5", - "description": "type: toilet\nlevel: 5\ntoilet_type: female\nbuilding: o25" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955642, - 48.422266 - ] - }, - "id": "M4NzY" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "layer": "layer_6", - "description": "type: toilet\nlevel: 6\ntoilet_type: male\nbuilding: o25" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955657, - 48.422253 - ] - }, - "id": "M5Njk" - }, - { - "type": "Feature", - "properties": { - "name": "toilet", - "layer": "layer_6", - "description": "type: toilet\nlevel: 6\ntoilet_type: female\nbuilding: o25" - }, - "geometry": { - "type": "Point", - "coordinates": [ - 9.955642, - 48.422266 - ] - }, - "id": "U2Mjc" - }, { "type": "Feature", "properties": { @@ -1702,17 +861,354 @@ { "type": "Feature", "properties": { - "name": "lecture_hall", - "description": "type: lecture_hall\nlevel: 2\nbuilding: o28\ndescription: Big Lecture Hall, often used for Info lectures" + "name": "food_drink", + "description": "type: food_drink\nlevel: 2\nbuilding: o27\ndescription: Coffee, Snacks, Drinks", + "layer": "layer_2" }, "geometry": { "type": "Point", "coordinates": [ - 9.957997, - 48.423037 + 9.95736, + 48.422972 ] }, - "id": "EzMzc" + "id": "Q1MTY" + }, + { + "type": "Feature", + "properties": { + "layer": "layer_2", + "description": "type: food_drink\nlevel: 2\nbuilding: o25\ndescription: Coffee, Snacks, Drinks", + "name": "food_drink" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955884, + 48.422395 + ] + }, + "id": "M5OTg" + }, + { + "type": "Feature", + "properties": { + "name": "food_drink", + "description": "type: food_drink\nlayer: 2\nbuilding: o25\ndescription: Coffee, Snacks, Drinks", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955599, + 48.422217 + ] + }, + "id": "I3MTA" + }, + { + "type": "Feature", + "properties": { + "name": "H20", + "description": "type: lecture_hall\nlevel: 2\nbuilding: o27\ndescription: idk, it looks like an octagon", + "layer": "layer_2" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.957509, + 48.422868 + ], + [ + 9.957452, + 48.422848 + ], + [ + 9.957438, + 48.4228 + ], + [ + 9.957478, + 48.422744 + ], + [ + 9.957547, + 48.422732 + ], + [ + 9.957607, + 48.422749 + ], + [ + 9.957631, + 48.422813 + ], + [ + 9.9576, + 48.422853 + ], + [ + 9.957509, + 48.422868 + ] + ] + ] + }, + "id": "Y5NTU" + }, + { + "type": "Feature", + "properties": { + "name": "H22", + "description": "type: lecture_hall\nlevel: 2\nbuilding: o28\ndescription: Big Lecture Hall, often used for Info Lectures", + "layer": "layer_2" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.958066, + 48.423145 + ], + [ + 9.957847, + 48.423064 + ], + [ + 9.957945, + 48.42296 + ], + [ + 9.958, + 48.422943 + ], + [ + 9.95818, + 48.42301 + ], + [ + 9.958066, + 48.423145 + ] + ] + ] + }, + "id": "g4MjA" + }, + { + "type": "Feature", + "properties": { + "name": "lift", + "layer": "lift", + "description": "type: lift\nbuilding: o29\nconnects_levels: [1, 2, 3]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957559, + 48.423315 + ] + }, + "id": "c0NDc" + }, + { + "type": "Feature", + "properties": { + "name": "lift", + "description": "type: lift\nbuilding: o27\nconnects_levels: [1, 2, 3, 4, 5]", + "layer": "lift" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957325, + 48.422964 + ] + }, + "id": "g1NjU" + }, + { + "type": "Feature", + "properties": { + "name": "lift", + "layer": "lift", + "description": "type: lift\nbuilding: o26\nconnects_levels: [1, 2, 3, 4, 5]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956493, + 48.422605 + ] + }, + "id": "YzNDY" + }, + { + "type": "Feature", + "properties": { + "name": "lift", + "description": "type: lift\nbuilding: o25\nconnects_levels: [1, 2, 3, 4, 5, 6]", + "layer": "lift" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955672, + 48.422277 + ] + }, + "id": "c0Nzk" + }, + { + "type": "Feature", + "properties": { + "name": "pc_pool", + "description": "type: pc_pool\nlevel: 1\nbuilding: o28\nnumber: 1001", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957823, + 48.423141 + ] + }, + "id": "YzNzE" + }, + { + "type": "Feature", + "properties": { + "name": "pc_pool", + "layer": "layer_3", + "description": "type: pc_pool\nlevel: 3\nbuilding: o29\nnumber: 3005" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957764, + 48.423412 + ] + }, + "id": "UyMzQ" + }, + { + "type": "Feature", + "properties": { + "name": "pc_pool", + "description": "type: pc_pool\nlevel: 3\nbuilding: o29\nnumber: 3006", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95768, + 48.423376 + ] + }, + "id": "M4MDA" + }, + { + "type": "Feature", + "properties": { + "name": "pc_pool", + "description": "type: pc_pool\nlevel: 1\nbuilding: o27\nnumber: 133", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957253, + 48.42271 + ] + }, + "id": "U1MzI" + }, + { + "type": "Feature", + "properties": { + "description": "type: public_transport\nbus_lines: [5, 8, 13, E, N3]\ntram_lines: [2]", + "name": "public_transport", + "layer": "layer_public_transport" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.956899, + 48.422292 + ], + [ + 9.956365, + 48.421983 + ], + [ + 9.956195, + 48.421858 + ], + [ + 9.956258, + 48.421767 + ], + [ + 9.956371, + 48.421696 + ], + [ + 9.957063, + 48.422208 + ], + [ + 9.956899, + 48.422292 + ] + ] + ] + }, + "id": "Y4NjA" + }, + { + "type": "Feature", + "properties": { + "description": "type: public_transport\nbus_lines: [5, 13, E, N3]\ntram_lines: [2]", + "name": "public_transport", + "layer": "layer_public_transport" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.956491, + 48.425174 + ], + [ + 9.956648, + 48.425245 + ], + [ + 9.957028, + 48.424888 + ], + [ + 9.956888, + 48.424832 + ], + [ + 9.956679, + 48.424985 + ], + [ + 9.956491, + 48.425174 + ] + ] + ] + }, + "id": "QyMjQ" }, { "type": "Feature", @@ -1941,130 +1437,857 @@ { "type": "Feature", "properties": { - "name": "lecture_hall", - "description": "type: lecture_hall\nlevel: 2\nbuilding: o27\ndescription: H20", - "layer": "layer_2" + "name": "stairs", + "description": "type: stairs\nbuilding: o29\nconnects_levels: [1,2,3]", + "layer": "stairs" }, "geometry": { "type": "Point", "coordinates": [ - 9.957559, - 48.422785 + 9.957509, + 48.423328 ] }, - "id": "A1NzM" + "id": "E5MDQ" }, { "type": "Feature", "properties": { - "name": "lecture_hall", - "description": "type: lecture_hall\nlevel: 2\nbuilding: o25\ndescription: H1", - "layer": "layer_2" + "layer": "stairs", + "name": "stairs", + "description": "type: stairs\nbuilding: o29\nconnects_levels: [1,2,3]" }, "geometry": { "type": "Point", "coordinates": [ - 9.955834, - 48.422465 + 9.957828, + 48.42339 ] }, - "id": "A3NzQ" + "id": "I1Njk" }, { "type": "Feature", "properties": { - "name": "lecture_hall", - "layer": "layer_2", - "description": "type: lecture_hall\nlevel: 2\nbuilding: o25\ndescription: H2" + "name": "stairs", + "description": "type: stairs\nbuilding: o28\nconnects_levels: [1, 2]", + "layer": "stairs" }, "geometry": { "type": "Point", "coordinates": [ - 9.955669, - 48.422647 + 9.957705, + 48.423024 ] }, - "id": "IyMTg" + "id": "gwNTI" }, { "type": "Feature", "properties": { - "name": "lecture_hall", - "description": "type: lecture_hall\nlevel: 2\nbuilding: o25\ndescription: H4", - "layer": "layer_2" + "name": "stairs", + "description": "type: stairs\nbuilding: o27\nconnects_levels: [1, 2, 3, 4, 5]", + "layer": "stairs" }, "geometry": { "type": "Point", "coordinates": [ - 9.955217, - 48.422437 + 9.957215, + 48.422917 ] }, - "id": "EzNTY" + "id": "EzODk" }, { "type": "Feature", "properties": { - "name": "pc_pool", - "description": "type: pc_pool\nlevel: 1\nbuilding: o28\nnumber: 1001", + "name": "stairs", + "description": "type: stairs\nbuilding: o26\nconnects_levels: [1, 2]", + "layer": "stairs" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956448, + 48.422549 + ] + }, + "id": "MwOTA" + }, + { + "type": "Feature", + "properties": { + "name": "stairs", + "description": "type: stairs\nbuilding: o26\nconnects_levels: [2, 3, 4, 5]", + "layer": "stairs" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956426, + 48.422602 + ] + }, + "id": "k0NTQ" + }, + { + "type": "Feature", + "properties": { + "name": "stairs", + "description": "type: stairs\nbuilding: o25\nconnects_levels: [1, 2]", + "layer": "stairs" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955645, + 48.422265 + ] + }, + "id": "M3Njc" + }, + { + "type": "Feature", + "properties": { + "name": "stairs", + "layer": "stairs", + "description": "type: stairs\nbuilding: o25\nconnects_levels: [2, 3, 4, 5, 6]" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955629, + 48.42231 + ] + }, + "id": "c1MzM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: o29\n\n", + "layer": "level_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957543, + 48.423354 + ] + }, + "id": "AzNzU" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: o27\n", "layer": "layer_1" }, "geometry": { "type": "Point", "coordinates": [ - 9.957823, - 48.423141 + 9.957029, + 48.422951 ] }, - "id": "YzNzE" + "id": "Y0NDM" }, { "type": "Feature", "properties": { - "name": "pc_pool", - "layer": "layer_3", - "description": "type: pc_pool\nlevel: 3\nbuilding: o29\nnumber: 3005" + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: handicap\nbuilding: o27", + "layer": "layer_1" }, "geometry": { "type": "Point", "coordinates": [ - 9.957764, - 48.423412 + 9.957162, + 48.422794 ] }, - "id": "UyMzQ" + "id": "QzNjE" }, { "type": "Feature", "properties": { - "name": "pc_pool", - "description": "type: pc_pool\nlevel: 3\nbuilding: o29\nnumber: 3006", + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o27", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957179, + 48.422783 + ] + }, + "id": "A2MTA" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o26", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956392, + 48.42254 + ] + }, + "id": "cxNTM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_3", + "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o29" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957544, + 48.423355 + ] + }, + "id": "g0MzY" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: handicap\nbuilding: o29", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957545, + 48.423342 + ] + }, + "id": "k1ODA" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o29", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957547, + 48.423343 + ] + }, + "id": "MzNjc" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o29", "layer": "layer_3" }, "geometry": { "type": "Point", "coordinates": [ - 9.95768, - 48.423376 + 9.957551, + 48.423339 ] }, - "id": "M4MDA" + "id": "I2MTE" }, { "type": "Feature", "properties": { - "name": "pc_pool", - "description": "type: pc_pool\nlevel: 1\nbuilding: o27\nnumber: 133", + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: male\nbuilding: o27", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957029, + 48.42295 + ] + }, + "id": "IzMDg" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: female\nbuilding: o27", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95704, + 48.422941 + ] + }, + "id": "k4Njg" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o27", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957201, + 48.422991 + ] + }, + "id": "MxNjQ" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o27", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95724, + 48.422844 + ] + }, + "id": "M1ODg" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 4\ntoilet_type: male\nbuilding: o27", + "layer": "layer_4" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957203, + 48.422989 + ] + }, + "id": "I3Nzk" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 4\ntoilet_type: female\nbuilding: o27", + "layer": "layer_4" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.95724, + 48.422844 + ] + }, + "id": "Y1MTU" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 5\ntoilet_type: male\nbuilding: o27", + "layer": "layer_5" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957201, + 48.422991 + ] + }, + "id": "kyOTM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 5\ntoilet_type: female\nbuilding: o27", + "layer": "layer_5" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.957242, + 48.422843 + ] + }, + "id": "gzMzY" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: o26", "layer": "layer_1" }, "geometry": { "type": "Point", "coordinates": [ - 9.957253, - 48.42271 + 9.95649, + 48.422643 ] }, - "id": "U1MzI" + "id": "I1NjU" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: female\nbuilding: o26", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956459, + 48.422644 + ] + }, + "id": "QwMTM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: male\nbuilding: o26", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956471, + 48.422635 + ] + }, + "id": "UwMTk" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o26", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956471, + 48.422638 + ] + }, + "id": "AwNzg" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o26", + "layer": "layer_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956501, + 48.422642 + ] + }, + "id": "Y4ODI" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 5\ntoilet_type: male\nbuilding: o26", + "layer": "layer_5" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956503, + 48.422639 + ] + }, + "id": "c3Nzc" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 5\ntoilet_type: female\nbuilding: o26", + "layer": "layer_5" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.956471, + 48.422633 + ] + }, + "id": "QwMTc" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: female\nbuilding: o25", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955547, + 48.422256 + ] + }, + "id": "c1NjM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 1\ntoilet_type: male\nbuilding: ö26", + "layer": "layer_1" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955476, + 48.422234 + ] + }, + "id": "UyNjA" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: male\nbuilding: o25", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955672, + 48.422339 + ] + }, + "id": "M2NTA" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 2\ntoilet_type: female\nbuilding: o25", + "layer": "layer_2" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955696, + 48.422312 + ] + }, + "id": "g0OTM" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: female\nbuilding: o25", + "layer": "laye_3" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955642, + 48.422266 + ] + }, + "id": "EyNjk" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "description": "type: toilet\nlevel: 3\ntoilet_type: male\nbuilding: o25\n" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955657, + 48.422252 + ] + }, + "id": "UxNjU" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_4", + "description": "type: toilet\nlevel: 4\ntoilet_type: female\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955644, + 48.422266 + ] + }, + "id": "I4MjE" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_4", + "description": "type: toilet\nlevel: 4\ntoilet_type: male\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955656, + 48.422252 + ] + }, + "id": "Q3MTg" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_5", + "description": "type: toilet\nlevel: 5\ntoilet_type: male\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955657, + 48.422253 + ] + }, + "id": "I0NzE" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_5", + "description": "type: toilet\nlevel: 5\ntoilet_type: female\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955642, + 48.422266 + ] + }, + "id": "M4NzY" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_6", + "description": "type: toilet\nlevel: 6\ntoilet_type: male\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955657, + 48.422253 + ] + }, + "id": "M5Njk" + }, + { + "type": "Feature", + "properties": { + "name": "toilet", + "layer": "layer_6", + "description": "type: toilet\nlevel: 6\ntoilet_type: female\nbuilding: o25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.955642, + 48.422266 + ] + }, + "id": "U2Mjc" + }, + { + "type": "Feature", + "properties": { + "name": "H1", + "description": "type: lecture_hall\nlevel: 2\nbuilding: o25\ndescription: why does this have this shape", + "layer": "layer_2" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.955821, + 48.422615 + ], + [ + 9.955912, + 48.422554 + ], + [ + 9.955903, + 48.422506 + ], + [ + 9.955925, + 48.422456 + ], + [ + 9.955805, + 48.422415 + ], + [ + 9.955764, + 48.422453 + ], + [ + 9.955695, + 48.422466 + ], + [ + 9.955677, + 48.422558 + ], + [ + 9.955821, + 48.422615 + ] + ] + ] + }, + "id": "M0MjM" + }, + { + "type": "Feature", + "properties": { + "name": "H2", + "description": "type: lecture_hall\nlevel: 2\nbuilding: o25\ndescription: lecture hall 2", + "layer": "layer_2" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.955542, + 48.422698 + ], + [ + 9.9557, + 48.422756 + ], + [ + 9.955798, + 48.422687 + ], + [ + 9.95577, + 48.422638 + ], + [ + 9.955787, + 48.4226 + ], + [ + 9.955721, + 48.422576 + ], + [ + 9.955691, + 48.422611 + ], + [ + 9.955571, + 48.422606 + ], + [ + 9.955542, + 48.422698 + ] + ] + ] + }, + "id": "MzMTc" + }, + { + "type": "Feature", + "properties": { + "name": "H4", + "layer": "layer_2", + "description": "type: lecture_hall\nlevel: 2\nbuilding: o25\ndescription: this is the 5th lecture hall" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.955034, + 48.422443 + ], + [ + 9.955249, + 48.422524 + ], + [ + 9.955295, + 48.422472 + ], + [ + 9.955288, + 48.422376 + ], + [ + 9.955241, + 48.422389 + ], + [ + 9.955236, + 48.422374 + ], + [ + 9.955059, + 48.422405 + ], + [ + 9.955034, + 48.422443 + ] + ] + ] + }, + "id": "gzMDI" } ] } \ No newline at end of file diff --git a/lib/components/map_render_level.dart b/lib/components/map_render_level.dart index 6ae3b36..f03bce2 100644 --- a/lib/components/map_render_level.dart +++ b/lib/components/map_render_level.dart @@ -1,4 +1,6 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:get/get.dart'; import 'package:latlong2/latlong.dart'; @@ -7,7 +9,7 @@ import 'package:uninav/data/geo/model.dart'; import 'package:uninav/map.dart'; import 'package:uninav/util/geomath.dart'; -List renderLevel(int level) { +List renderLevel(int level, {LayerHitNotifier? hitNotifier}) { return [ LevelLayer( filter: (feature) => @@ -18,55 +20,58 @@ List renderLevel(int level) { points: pts, color: Colors.orange.withOpacity(0.2), borderColor: Colors.orange, - isFilled: true, - borderStrokeWidth: 1, + borderStrokeWidth: 2, + hitValue: feature, ), ) .unwrap(), markerConstructor: (feature) => Marker( - width: 150, - height: 60, + width: 50, + height: 20, point: feature.getPoint().unwrap(), - builder: (cx) => Center( - child: Column( - children: [ - Icon( - Icons.class_, - color: Colors.black, - ), - Text('${feature.name}'), - ], - ), + child: Column( + children: [ + Icon( + Icons.class_, + color: Colors.black, + ), + Text('${feature.name}'), + ], ), - )), + alignment: Alignment.center, + ), + notifier: hitNotifier), LevelLayer( filter: (feature) => feature.level == level && feature.type is Room, polyConstructor: (feature) => feature .getPolygon( constructor: (pts) => Polygon( points: pts, - color: Colors.green.withOpacity(0.2), + color: Colors.green.withOpacity(1.2), borderColor: Colors.green, - isFilled: true, - borderStrokeWidth: 1, + borderStrokeWidth: 2, + hitValue: feature, ), ) .unwrap(), + notifier: hitNotifier, ), LevelLayer( filter: (feature) => feature.level == level && feature.type is Door, markerConstructor: (feature) { final point = feature.getPoint().unwrap(); return Marker( - width: 20, - height: 20, + width: 21, + height: 21, point: point, - builder: (ctx) => const Icon( + child: const Icon( Icons.door_front_door, color: Colors.brown, ), + alignment: Alignment.center, ); }, + notifier: hitNotifier, ), LevelLayer( filter: (feature) => feature.level == level && feature.type is Toilet, @@ -93,16 +98,17 @@ List renderLevel(int level) { final point = feature.getPoint().unwrap(); return Marker( - width: 20, - height: 20, + width: 21, + height: 21, point: point, - builder: (ctx) => Icon( + child: Icon( icon, color: Colors.purple, ), - rotateAlignment: Alignment.center, + alignment: Alignment.center, ); }, + notifier: hitNotifier, ), LevelLayer( filter: (feature) => @@ -111,15 +117,17 @@ List renderLevel(int level) { markerConstructor: (feature) { final point = feature.getPoint().unwrap(); return Marker( - width: 20, - height: 20, + width: 21, + height: 21, point: point, - builder: (ctx) => Icon( + child: Icon( Icons.stairs_outlined, color: Colors.deepPurple.shade300, ), + alignment: Alignment.center, ); }, + notifier: hitNotifier, ), LevelLayer( filter: (feature) => @@ -128,15 +136,17 @@ List renderLevel(int level) { markerConstructor: (feature) { final point = feature.getPoint().unwrap(); return Marker( - width: 20, - height: 20, + width: 21, + height: 21, point: point, - builder: (ctx) => const Icon( + child: const Icon( Icons.elevator_outlined, color: Colors.deepPurple, ), + alignment: Alignment.center, ); }, + notifier: hitNotifier, ), ]; } @@ -147,6 +157,7 @@ class LevelLayer extends StatelessWidget { final Marker Function(LatLng, String)? polyCenterMarkerConstructor; final Marker Function(Feature)? markerConstructor; final int? level; + final LayerHitNotifier? notifier; const LevelLayer({ this.level, @@ -154,6 +165,7 @@ class LevelLayer extends StatelessWidget { this.polyConstructor, this.polyCenterMarkerConstructor, this.markerConstructor, + this.notifier, super.key, }); @@ -172,7 +184,15 @@ class LevelLayer extends StatelessWidget { if (polyConstructor != null) { filteredPolygons.add(polyConstructor!(feature)); } else { - filteredPolygons.add(feature.getPolygon().unwrap()); + filteredPolygons.add(feature + .getPolygon( + constructor: (points) => Polygon( + points: points, + borderColor: Colors.black26, + borderStrokeWidth: 2.0, + hitValue: feature, + )) + .unwrap()); } // calculate polygon center @@ -186,7 +206,7 @@ class LevelLayer extends StatelessWidget { width: 100, height: 100, point: center, - builder: (cx) => Center( + child: Center( child: Text( feature.name, style: const TextStyle( @@ -195,6 +215,7 @@ class LevelLayer extends StatelessWidget { ), ), ), + alignment: Alignment.center, )); } } else if (feature.isPoint()) { @@ -206,7 +227,7 @@ class LevelLayer extends StatelessWidget { width: 100, height: 100, point: point, - builder: (cx) => Center( + child: Center( child: Text( feature.name, style: const TextStyle( @@ -215,6 +236,7 @@ class LevelLayer extends StatelessWidget { ), ), ), + alignment: Alignment.center, )); } } @@ -226,28 +248,39 @@ class LevelLayer extends StatelessWidget { // print(filteredPolygons[0].points[0]); // print(myMapController.features.length); + // filteredPolygons.forEach((element) { + // print(element.hitValue); + // }); + final List widgets = []; if (filteredPolygons.isNotEmpty) { if (polyConstructor != null) { - widgets.add(PolygonLayer(polygons: filteredPolygons)); + widgets.add(TranslucentPointer( + child: PolygonLayer( + polygons: filteredPolygons, + hitNotifier: notifier, + ), + )); } else { - widgets.add(PolygonLayer( - polygons: filteredPolygons - .map((poly) => Polygon( - points: poly.points, - borderColor: Colors.black26, - borderStrokeWidth: 2.0, - )) - .toList())); + widgets.add(TranslucentPointer( + child: PolygonLayer( + polygons: filteredPolygons, + hitNotifier: notifier, + ), + )); } - widgets.add(MarkerLayer( - markers: polygonCenterMarkers, - rotate: true, + widgets.add(TranslucentPointer( + child: MarkerLayer( + markers: polygonCenterMarkers, + rotate: true, + ), )); } if (filteredMarkers.isNotEmpty) { - widgets.add(MarkerLayer(markers: filteredMarkers, rotate: true)); + widgets.add(TranslucentPointer( + child: MarkerLayer(markers: filteredMarkers, rotate: true), + )); } return Stack(children: widgets); diff --git a/lib/controllers/map_controller.dart b/lib/controllers/map_controller.dart index 0e133dc..6864a6f 100644 --- a/lib/controllers/map_controller.dart +++ b/lib/controllers/map_controller.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:anyhow/anyhow.dart'; -import 'package:geojson/geojson.dart'; +import 'package:geojson_vi/geojson_vi.dart'; import 'package:get/get.dart'; import 'package:uninav/data/geo/model.dart'; import 'package:uninav/data/geo/parser.dart'; @@ -46,14 +46,17 @@ class MyMapController extends GetxController { final featuresList = []; - final geojson = GeoJson(); - - await geojson.parse(geoJsonString); + print('doing'); + final geojson = GeoJSONFeatureCollection.fromJSON(geoJsonString); + print('done'); for (final feature in geojson.features) { + print(feature); + print(feature?.properties); + if (feature == null) continue; print(feature.properties); - final parsed = - parseFeature(feature.properties ?? {}, feature); + final parsed = parseFeature( + feature.properties ?? {}, feature.geometry); if (parsed case Ok(:final ok)) { featuresList.add(ok); } diff --git a/lib/data/geo/model.dart b/lib/data/geo/model.dart index 261adbd..c8cf8ec 100644 --- a/lib/data/geo/model.dart +++ b/lib/data/geo/model.dart @@ -2,7 +2,7 @@ import 'package:anyhow/anyhow.dart'; import 'package:flutter/material.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:geojson/geojson.dart'; +import 'package:geojson_vi/geojson_vi.dart'; import 'package:latlong2/latlong.dart'; part 'model.freezed.dart'; @@ -15,27 +15,30 @@ class Feature with _$Feature { required String name, required FeatureType type, String? description, - required dynamic geometry, + required GeoJSONGeometry geometry, int? level, }) = _Feature; bool isPolygon() { - return geometry is GeoJsonFeature; + return geometry is GeoJSONPolygon; } bool isPoint() { - return geometry is GeoJsonFeature; + return geometry is GeoJSONPoint; } Result getPolygon({Polygon Function(List)? constructor}) { if (isPolygon()) { constructor ??= (pts) => Polygon( - points: pts, borderColor: Colors.black26, borderStrokeWidth: 2.0); - final polygon = geometry as GeoJsonFeature; + points: pts, + borderColor: Colors.black26, + borderStrokeWidth: 2.0, + ); + final polygon = geometry as GeoJSONPolygon; // print(polygon.geometry!.geoSeries[0].geoPoints); - final points = polygon.geometry!.geoSeries[0].geoPoints - .map((e) => LatLng(e.latitude, e.longitude)) - .toList(); + final points = + // polygon.coordinates[0].map((e) => LatLng(e[0], e[1])).toList(); + polygon.coordinates[0].map((e) => LatLng(e[1], e[0])).toList(); // print(points); return Ok(constructor(points)); @@ -46,9 +49,8 @@ class Feature with _$Feature { Result getPoint() { if (isPoint()) { - final point = geometry as GeoJsonFeature; - return Ok(LatLng(point.geometry!.geoPoint.latitude, - point.geometry!.geoPoint.longitude)); + final point = geometry as GeoJSONPoint; + return Ok(LatLng(point.coordinates[1], point.coordinates[0])); } else { return bail("Feature Geometry is not a Point"); } diff --git a/lib/data/geo/parser.dart b/lib/data/geo/parser.dart index 9e5b716..d4d8a74 100644 --- a/lib/data/geo/parser.dart +++ b/lib/data/geo/parser.dart @@ -1,10 +1,10 @@ import 'package:anyhow/anyhow.dart'; -import 'package:geojson/geojson.dart'; +import 'package:geojson_vi/geojson_vi.dart'; import 'package:uninav/data/geo/model.dart'; import 'package:yaml/yaml.dart'; Result parseFeature( - Map properties, dynamic geometry) { + Map properties, GeoJSONGeometry geometry) { final name = properties['name'] as String?; final description_yaml = properties['description'] as String? ?? ''; final layer = properties['layer'] as String?; diff --git a/lib/map.dart b/lib/map.dart index 01598c2..5ec4977 100644 --- a/lib/map.dart +++ b/lib/map.dart @@ -2,12 +2,12 @@ import 'package:anim_search_bar/anim_search_bar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_map/flutter_map.dart'; -import 'package:flutter_map/plugin_api.dart'; import 'package:get/get.dart'; import 'package:latlong2/latlong.dart'; import 'package:rust_core/slice.dart'; import 'package:uninav/components/drawer.dart'; import 'package:uninav/components/hamburger_menu.dart'; +import 'package:uninav/components/map_render_level.dart'; import 'package:uninav/controllers/map_controller.dart'; import 'package:uninav/data/geo/model.dart'; import 'package:uninav/util/geomath.dart'; @@ -18,6 +18,7 @@ class MapPage extends StatelessWidget { @override Widget build(BuildContext context) { + final LayerHitNotifier hitNotifier = ValueNotifier(null); return Scaffold( drawer: MyDrawer(), appBar: AppBar( @@ -51,64 +52,95 @@ class MapPage extends StatelessWidget { FlutterMap( mapController: MapController(), options: MapOptions( - center: LatLng(48.422766, 9.9564), - zoom: 16.0, + initialCenter: const LatLng(48.422766, 9.9564), + initialZoom: 16.0, // camera constraints maxZoom: 19, + onTap: (tapPosition, latlng) => print(tapPosition), ), children: [ TileLayer( urlTemplate: "https://tile.openstreetmap.org/{z}/{x}/{y}.png", maxZoom: 19, ), + GestureDetector( + onTap: () { + print("tap"); + final LayerHitResult? hit = hitNotifier.value; + if (hit == null) { + return; + } - // buildings - LevelLayer( - filter: (feature) => feature.type is Building, - ), + print("not null"); + print(hit.coordinate); + hit.printInfo(); + print(hit.hitValues); - // public transport - LevelLayer( - filter: (feature) => - feature.level == null && feature.type is PublicTransport, - polyCenterMarkerConstructor: (center, name) => Marker( - width: 100, - height: 100, - point: center, - builder: (cx) => const Center( - child: Icon( - Icons.train, - color: Colors.black, - ), + for (final hitValue in hit.hitValues) { + print(hitValue); + } + // Handle the hit, which in this case is a tap + // For example, see the example in Hit Handling (below) + }, + child: MouseRegion( + cursor: SystemMouseCursors.click, + child: Stack( + children: [ + // buildings + LevelLayer( + filter: (feature) => feature.type is Building, + notifier: hitNotifier, + ), + + // public transport + LevelLayer( + filter: (feature) => + feature.level == null && + feature.type is PublicTransport, + polyCenterMarkerConstructor: (center, name) => Marker( + width: 100, + height: 100, + point: center, + child: const Icon( + Icons.train, + color: Colors.black, + ), + alignment: Alignment.center, + ), + polyConstructor: (feature) => feature + .getPolygon( + constructor: (pts) => Polygon( + points: pts, + color: Colors.green.withOpacity(0.2), + borderColor: Colors.green, + borderStrokeWidth: 1, + hitValue: feature, + )) + .unwrap(), + notifier: hitNotifier, + ), + + // current level + Obx( + () => Stack( + children: renderLevel( + Get.find() + .currentLevel + .value, + hitNotifier: hitNotifier)), + ), + + // RichAttributionWidget(attributions: [ + // TextSourceAttribution( + // 'OpenStreetMap contributors', + // onTap: () => + // launchUrl(Uri.parse('https://openstreetmap.org/copyright')), + // ) + // ]), + ], ), ), - polyConstructor: (feature) => feature - .getPolygon( - constructor: (pts) => Polygon( - points: pts, - color: Colors.green.withOpacity(0.2), - borderColor: Colors.green, - isFilled: true, - borderStrokeWidth: 1, - )) - .unwrap(), ), - - // current level - Obx( - () => Stack( - children: renderLevel( - Get.find().currentLevel.value), - ), - ) - - // RichAttributionWidget(attributions: [ - // TextSourceAttribution( - // 'OpenStreetMap contributors', - // onTap: () => - // launchUrl(Uri.parse('https://openstreetmap.org/copyright')), - // ) - // ]), ], ), Positioned( @@ -152,251 +184,3 @@ class MapPage extends StatelessWidget { )); } } - -List renderLevel(int level) { - return [ - LevelLayer( - filter: (feature) => - feature.level == level && feature.type is LectureHall, - polyConstructor: (feature) => feature - .getPolygon( - constructor: (pts) => Polygon( - points: pts, - color: Colors.orange.withOpacity(0.2), - borderColor: Colors.orange, - isFilled: true, - borderStrokeWidth: 1, - ), - ) - .unwrap(), - markerConstructor: (feature) => Marker( - width: 150, - height: 60, - point: feature.getPoint().unwrap(), - builder: (cx) => Center( - child: Column( - children: [ - Icon( - Icons.class_, - color: Colors.black, - ), - Text('${feature.name}'), - ], - ), - ), - )), - LevelLayer( - filter: (feature) => feature.level == level && feature.type is Room, - polyConstructor: (feature) => feature - .getPolygon( - constructor: (pts) => Polygon( - points: pts, - color: Colors.green.withOpacity(0.2), - borderColor: Colors.green, - isFilled: true, - borderStrokeWidth: 1, - ), - ) - .unwrap(), - ), - LevelLayer( - filter: (feature) => feature.level == level && feature.type is Door, - markerConstructor: (feature) { - final point = feature.getPoint().unwrap(); - return Marker( - width: 20, - height: 20, - point: point, - builder: (ctx) => const Icon( - Icons.door_front_door, - color: Colors.brown, - ), - ); - }, - ), - LevelLayer( - filter: (feature) => feature.level == level && feature.type is Toilet, - markerConstructor: (feature) { - final type = (feature.type as Toilet).toilet_type; - IconData icon; - switch (type.toLowerCase()) { - case 'male': - icon = Icons.male; - break; - case 'female': - icon = Icons.female; - break; - case 'handicap': - icon = Icons.wheelchair_pickup; - break; - default: - print("WARN: Toilet didn't have recognizable type! " - "(Level ${feature.level}, Name ${feature.name}, " - "Location: ${feature.getPoint().unwrap()})"); - icon = Icons.wc; - break; - } - - final point = feature.getPoint().unwrap(); - return Marker( - width: 20, - height: 20, - point: point, - builder: (ctx) => Icon( - icon, - color: Colors.purple, - ), - rotateAlignment: Alignment.center, - ); - }, - ), - LevelLayer( - filter: (feature) => - feature.type is Stairs && - (feature.type as Stairs).connects_levels.contains(level), - markerConstructor: (feature) { - final point = feature.getPoint().unwrap(); - return Marker( - width: 20, - height: 20, - point: point, - builder: (ctx) => Icon( - Icons.stairs_outlined, - color: Colors.deepPurple.shade300, - ), - ); - }, - ), - LevelLayer( - filter: (feature) => - feature.type is Lift && - (feature.type as Lift).connects_levels.contains(level), - markerConstructor: (feature) { - final point = feature.getPoint().unwrap(); - return Marker( - width: 20, - height: 20, - point: point, - builder: (ctx) => const Icon( - Icons.elevator_outlined, - color: Colors.deepPurple, - ), - ); - }, - ), - ]; -} - -class LevelLayer extends StatelessWidget { - final bool Function(Feature)? filter; - final Polygon Function(Feature)? polyConstructor; - final Marker Function(LatLng, String)? polyCenterMarkerConstructor; - final Marker Function(Feature)? markerConstructor; - final int? level; - - const LevelLayer({ - this.level, - this.filter, - this.polyConstructor, - this.polyCenterMarkerConstructor, - this.markerConstructor, - super.key, - }); - - @override - Widget build(BuildContext context) { - final myMapController = Get.find(); - - return Obx(() { - final List filteredPolygons = []; - final List polygonCenterMarkers = []; - final List filteredMarkers = []; - - for (final feature in myMapController.features) { - if (filter == null || filter!(feature)) { - if (feature.isPolygon()) { - if (polyConstructor != null) { - filteredPolygons.add(polyConstructor!(feature)); - } else { - filteredPolygons.add(feature.getPolygon().unwrap()); - } - - // calculate polygon center - final center = - polygonCenterMinmax(feature.getPolygon().unwrap().points); - if (polyCenterMarkerConstructor != null) { - polygonCenterMarkers - .add(polyCenterMarkerConstructor!(center, feature.name)); - } else { - polygonCenterMarkers.add(Marker( - width: 100, - height: 100, - point: center, - builder: (cx) => Center( - child: Text( - feature.name, - style: const TextStyle( - color: Colors.black54, - // backgroundColor: Colors.white, - ), - ), - ), - )); - } - } else if (feature.isPoint()) { - if (markerConstructor != null) { - filteredMarkers.add(markerConstructor!(feature)); - } else { - final point = feature.getPoint().unwrap(); - filteredMarkers.add(Marker( - width: 100, - height: 100, - point: point, - builder: (cx) => Center( - child: Text( - feature.name, - style: const TextStyle( - color: Colors.black54, - // backgroundColor: Colors.white, - ), - ), - ), - )); - } - } - } - } - // print(filteredPolygons.length); - // print(filteredPolygons); - - // print(filteredPolygons[0].points[0]); - // print(myMapController.features.length); - - final List widgets = []; - if (filteredPolygons.isNotEmpty) { - if (polyConstructor != null) { - widgets.add(PolygonLayer(polygons: filteredPolygons)); - } else { - widgets.add(PolygonLayer( - polygons: filteredPolygons - .map((poly) => Polygon( - points: poly.points, - borderColor: Colors.black26, - borderStrokeWidth: 2.0, - )) - .toList())); - } - widgets.add(MarkerLayer( - markers: polygonCenterMarkers, - rotate: true, - )); - } - - if (filteredMarkers.isNotEmpty) { - widgets.add(MarkerLayer(markers: filteredMarkers, rotate: true)); - } - - return Stack(children: widgets); - }); - } -} diff --git a/pubspec.lock b/pubspec.lock index 3e67040..40c11bc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -185,6 +185,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_earcut: + dependency: transitive + description: + name: dart_earcut + sha256: "41b493147e30a051efb2da1e3acb7f38fe0db60afba24ac1ea5684cee272721e" + url: "https://pub.dev" + source: hosted + version: "1.1.0" dart_style: dependency: transitive description: @@ -193,14 +201,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" - extra_pedantic: - dependency: transitive - description: - name: extra_pedantic - sha256: eb9cc0842dc1c980f00fd226364456d2169d54f7118b8ae16443188063edce0b - url: "https://pub.dev" - source: hosted - version: "1.5.0" fake_async: dependency: transitive description: @@ -242,10 +242,10 @@ packages: dependency: "direct main" description: name: flutter_map - sha256: "52c65a977daae42f9aae6748418dd1535eaf27186e9bac9bf431843082bc75a3" + sha256: bee8c5bacb49a68aabcf6009c050a8b3b07ac75403f29f741d8c00d4a725e086 url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "7.0.0-dev.1" flutter_test: dependency: "direct dev" description: flutter @@ -280,30 +280,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" - geodesy: - dependency: transitive - description: - name: geodesy - sha256: d9959000de938adf760f946546ccbf9ebdff8f4f6d0b5c54e8b8b1ed350b1028 - url: "https://pub.dev" - source: hosted - version: "0.4.0-nullsafety.0" - geojson: + geojson_vi: dependency: "direct main" description: - name: geojson - sha256: "8aab8116d074e92ef2d1ade25ec5ae90ea8bf024a920ab46703c433ffe08878f" + name: geojson_vi + sha256: ffba1991df4d3f98cfd7fee02bcde00b76a39d4daa838ba8a0ba8b83cbff0705 url: "https://pub.dev" source: hosted - version: "1.0.0" - geopoint: - dependency: transitive - description: - name: geopoint - sha256: "594afb50a689e6584b80b7de8332c83a78e50725dc4324b2c014d19c56de5e3f" - url: "https://pub.dev" - source: hosted - version: "1.0.0" + version: "2.2.3" get: dependency: "direct main" description: @@ -332,10 +316,10 @@ packages: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.1" http_multi_server: dependency: transitive description: @@ -368,14 +352,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - iso: - dependency: transitive - description: - name: iso - sha256: "7030a1a096f7924deb6cccde6c7d80473dddd54eeedf20402e3d6e51b1672b27" - url: "https://pub.dev" - source: hosted - version: "1.0.0" js: dependency: transitive description: @@ -404,10 +380,10 @@ packages: dependency: "direct main" description: name: latlong2 - sha256: "08ef7282ba9f76e8495e49e2dc4d653015ac929dce5f92b375a415d30b407ea0" + sha256: "98227922caf49e6056f91b6c56945ea1c7b166f28ffcd5fb8e72fc0b453cc8fe" url: "https://pub.dev" source: hosted - version: "0.8.2" + version: "0.9.1" leak_tracker: dependency: transitive description: @@ -448,6 +424,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + logger: + dependency: transitive + description: + name: logger + sha256: "8c94b8c219e7e50194efc8771cd0e9f10807d8d3e219af473d89b06cc2ee4e04" + url: "https://pub.dev" + source: hosted + version: "2.2.0" logging: dependency: transitive description: @@ -512,14 +496,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" - pedantic: - dependency: transitive - description: - name: pedantic - sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" - url: "https://pub.dev" - source: hosted - version: "1.11.1" plugin_platform_interface: dependency: transitive description: @@ -597,14 +573,6 @@ packages: description: flutter source: sdk version: "0.0.99" - slugify: - dependency: transitive - description: - name: slugify - sha256: b272501565cb28050cac2d96b7bf28a2d24c8dae359280361d124f3093d337c3 - url: "https://pub.dev" - source: hosted - version: "2.0.0" source_gen: dependency: transitive description: @@ -701,14 +669,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - tuple: - dependency: transitive - description: - name: tuple - sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151 - url: "https://pub.dev" - source: hosted - version: "2.0.2" typed_data: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 977f972..6ff9234 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -38,9 +38,12 @@ dependencies: get: ^4.6.6 yaml: ^3.1.2 surrealdb: ^0.8.0 - geojson: ^1.0.0 + # geojson: ^1.0.0 flutter_map: 7.0.0-dev.1 - # latlong2: ^0.9.0 + # flutter_map: ^4.0.0 + latlong2: ^0.9.0 + # latlong2: ^0.8.0 + geojson_vi: ^2.2.3 url_launcher: ^6.2.6 anim_search_bar: ^2.0.3 freezed_annotation: ^2.4.1