Example #1
0
def apply_with_merge(handler, data, locations, tmp_path):
    mir = o.MergeInputReader()

    mir.add_buffer(data.encode('utf-8'), format='opl')

    fn = tmp_path / 'temp.opl'
    fn.write_text(data)
    mir.add_file(str(fn))

    mir.apply(handler, idx='flex_mem' if locations else '')
    def get_cairoutehandler(self, network="lwn", infomont=False):
        """Function to download osm data and create CaiRoutesHandler instance

        :param str network: the network level to query, default 'lwn'
        """
        data = self.get_data_osm(network=network)
        self.cch = CaiRoutesHandler(infomont=infomont)
        # trick to solve the problem that overpass data ar not sorted
        mir = osmium.MergeInputReader()
        mir.add_buffer(data.encode("utf-8"), "osm")
        mir.apply(self.cch, idx="flex_mem", simplify=True)
        return True
    def get_data_osm(self, sort=True, network="lwn", remove=True):
        """Function to return data in the original OSM format

        :param str network: the network level to query, default 'lwn'
        """
        temp = """[timeout:{time}][out:xml]
;
{area}
{query}
out;
>;
out qt;
out;"""

        network = check_network(network)
        if self.area:
            instr = temp.format(
                area='area["name"="{}"]->.a;'.format(self.area),
                query=self.query.format(netw=network, bbox="area.a"),
                time=self.timeout,
            )
        elif self.bbox:
            instr = temp.format(
                area="",
                query=self.query.format(netw=network, bbox=self.bbox),
                time=self.timeout,
            )
        else:
            instr = temp.format(
                area="",
                query=self.query.format(netw=network, bbox=""),
                time=self.timeout,
            )

        data = self._get_data(instr)

        if sort:
            mir = osmium.MergeInputReader()
            mir.add_buffer(data.encode("utf-8"), "osm")
            # the code stop here after printing the xml osm data
            tempname = tempfile.mkstemp(suffix=".osm")[1]

            with open(tempname, "w") as temp_osm:
                os.unlink(temp_osm.name)
                wh = osmium.WriteHandler(temp_osm.name)
                mir.apply(wh, idx="flex_mem")
                wh.close()
                temp_osm.close()
            with open(tempname, "r") as temp_osm:
                data = temp_osm.read()
            if remove:
                os.remove(tempname)
        return data
Example #4
0
    def test_merge_input_reader(self):
        if isinstance(self.data, (list, tuple)):
            fn = create_osm_file(self.data)
        else:
            fn = create_opl_file(self.data)

        try:
            self.handler = self.Handler()
            mir = osmium.MergeInputReader()
            with open(fn, "rb") as f:
                data = f.read()
                mir.add_buffer(data, format='osm')
            mir.add_file(fn)
            mir.apply(self.handler, idx=self.apply_idx)
        finally:
            os.remove(fn)

        if hasattr(self, "check_result"):
            self.check_result()

        if hasattr(self.handler, "check_result"):
            self.handler.check_result()