Hi, On Fri, Nov 02, 2018 at 11:36:49AM +0900, koji higuchi wrote: > Hi Sarah, > It stopped working with the following error, though I used try and > exception: > > Traceback (most recent call last): > File "D:\test.py", line 47, in <module> > ShapeConverter().apply_file(fi, locations=True) > RuntimeError: Read failed: The data is invalid.
This means that one of your input files is broken. You need to find out which one and repair it. Sarah > > Please help me. > > On Thu, Nov 1, 2018 at 7:59 PM koji higuchi <koji51gu...@gmail.com> wrote: > > > Hi Sarah, > > Your answer was great and it helped me to correct my code. > > I think that it's okay to use class and definition. > > Thank you very much for your help. > > > > Best regards > > Koji > > > > > > On Thu, Nov 1, 2018 at 7:07 PM koji higuchi <koji51gu...@gmail.com> wrote: > > > >> Hi Sarah, > >> Thank you so much for your help! > >> Writing speed for GPKG format with fiona has been very slow. > >> I wanted to extract one by one ids and write geom and tag using > >> ogr/python. > >> Could you help me how to extract geom and tag of each id in a for loop > >> without using class and definitions? > >> > >> On Thu, Nov 1, 2018 at 6:07 PM Sarah Hoffmann <lon...@denofr.de> wrote: > >> > >>> Hi, > >>> > >>> On Thu, Nov 01, 2018 at 12:13:40PM +0900, koji higuchi wrote: > >>> > *I tried to extract data from .osm.pbf file and write to shapefile as > >>> > follows:* > >>> > > >>> > import os, osmium, fiona > >>> > > >>> > fi = 'europe-latest.osm.pbf' > >>> > fo = 'europe-latest.shp' > >>> > > >>> > drv = 'ESRI Shapefile' > >>> > > >>> > crs = {'no_defs': True, 'ellps': 'WGS84', 'datum': 'WGS84', 'proj': > >>> > 'longlat'} > >>> > > >>> > schema = {'geometry': 'LineString', > >>> > 'properties': {'id': 'float', 'name' : 'str', > >>> 'kind' : > >>> > 'str'}} > >>> > > >>> > outfile = fiona.open(fo, 'w', driver=drv, crs=crs, schema=schema) > >>> > > >>> > geomfab = osmium.geom.GeoJSONFactory() > >>> > > >>> > class ShapeConverter(osmium.SimpleHandler): > >>> > def way(self, w): > >>> > if 'place' in w.tags: > >>> > rec = {'geometry' : eval(geomfab.create_linestring(w)), > >>> > 'properties' : {'id' : float(w.id), > >>> > 'name' : w.tags.get('name'), > >>> > 'kind' : w.tags['place']}} > >>> > outfile.write(rec) > >>> > > >>> > ShapeConverter().apply_file(fi, locations=True) > >>> > > >>> > I got the following error after extracting several contents: > >>> > > >>> > rec = {'geometry' : eval(geomfab.create_linestring(w)), > >>> > RuntimeError: need at least two points for linestring > >>> (way_id=619453148) > >>> > > >>> > How could I skip that erroneous id and extract data for other working > >>> ids? > >>> > >>> You need to do this manually yourself in the handler. I recommend > >>> simply catching the exception as there are some other error > >>> conditions besides too few points: > >>> > >>> def way(self, w): > >>> if 'place' in w.tags: > >>> try: > >>> geom = geomfab.create_linestring(w) > >>> except: > >>> print("Skipping way with bad geometry") > >>> return > >>> > >>> rec = {'geometry' : eval(geom), > >>> 'properties' : {'id' : float(w.id), > >>> 'name' : w.tags.get('name'), > >>> 'kind' : w.tags['place']}} > >>> outfile.write(rec) > >>> > >>> Kind regards > >>> > >>> Sarah > >>> > >> _______________________________________________ dev mailing list dev@openstreetmap.org https://lists.openstreetmap.org/listinfo/dev