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