[OSM-dev] RuntimeError: need at least two points for linestring (way_id=619453148)
koji higuchi
koji51guchi at gmail.com
Fri Nov 2 02:44:17 UTC 2018
Here is full code I was working with:
https://drive.google.com/open?id=1NclLve4I5C05DqiOAWZQHhuyVk4ilx0g
On Fri, Nov 2, 2018 at 11:36 AM koji higuchi <koji51guchi at gmail.com> 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.
>
> Please help me.
>
> On Thu, Nov 1, 2018 at 7:59 PM koji higuchi <koji51guchi at 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 <koji51guchi at 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 <lonvia at 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
>>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/dev/attachments/20181102/b6b5dc62/attachment.html>
More information about the dev
mailing list