def extract_doors(self, area_ref, floor_number, is_elevator): if is_elevator: self.is_door_cache_available = False __, door_shapes, __ = self.osm_adapter.get( 'way[!"level"][indoor=door];') else: __, door_shapes, __ = self.osm_adapter.search_by_tag( data_type='way', key_val_dict={ 'level': str(floor_number), 'indoor': 'door' }) area = self.osm_bridge.get_area(area_ref) area_geometry = area.geometry area_geometry_cached = area_geometry.points if self.is_door_cache_available: if self.cached_floor_number != floor_number: self.door_shapes_cached = [] for door_shape in door_shapes: shp = Shape(door_shape.id) self.door_shapes_cached.append(shp.points) self.is_door_cache_available = True self.cached_floor_number = floor_number else: self.door_shapes_cached = [] for door_shape in door_shapes: shp = Shape(door_shape.id) self.door_shapes_cached.append(shp.points) self.is_door_cache_available = True self.cached_floor_number = floor_number doors = [] for i, door in enumerate(self.door_shapes_cached): is_added = False for area_node in area_geometry_cached: if self._is_point_inside_polygon(area_node, door): doors.append(door) is_added = True break if is_added == False: for pt in door: if self._is_point_inside_polygon(pt, area_geometry_cached): doors.append(door) break return doors
def geometry(self): __, geometries, __ = self.osm_adapter.get_osm_element_by_id( ids=[self._geometry_id], data_type='way') for tag in geometries[0].tags: setattr(self, tag.key, tag.value) nodes, __, __ = self.osm_adapter.get_osm_element_by_id( ids=geometries[0].nodes, data_type='node') return Shape(nodes)
def get_shape(self, ref): """Summary Args: ref (id, Node[]): point id or OSM nodes Returns: Shape: shape wm entity """ return Shape(ref)
def geometry(self): __, geometries, __ = self.osm_adapter.get_osm_element_by_id( ids=[self._geometry_id], data_type='way') for tag in geometries[0].tags: if tag.key == 'behaviour': self.behaviour = tag.value.split(";") else: setattr(self, tag.key, tag.value) nodes, __, __ = self.osm_adapter.get_osm_element_by_id( ids=geometries[0].nodes, data_type='node') return Shape(nodes)