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
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()