Esempio n. 1
0
    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
Esempio n. 2
0
    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)
Esempio n. 3
0
    def get_shape(self, ref):
        """Summary

        Args:
            ref (id, Node[]): point id or OSM nodes

        Returns:
            Shape: shape wm entity
        """
        return Shape(ref)
Esempio n. 4
0
    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)