ok. I see the problem it is in write()...

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File
"I:/It_24/115507_Road_Shields_Label_Processing/code/RoadShieldLabels/ShieldLabels.py",
line 24, in process_file
    output.write({'properties': elem['properties'],'geometry':
mapping(shape(elem['geometry']))})
  File "C:\Python27\lib\site-packages\fiona\collection.py", line 211, in
write
    self.writerecords([record])
  File "C:\Python27\lib\site-packages\fiona\collection.py", line 205, in
writerecords
    self.session.writerecs(records, self)
  File "ogrext.pyx", line 987, in fiona.ogrext.WritingSession.writerecs
(src/fiona/ogrext.c:15807)
ValueError: Record does not match collection schema: [u'ID', u'OSM_ID',
u'NAME', u'TYPE', u'TUNNEL', u'BRIDGE', u'ONEWAY', u'REF', u'Z_ORDER'] !=
[u'Z_ORDER', u'BRIDGE', u'NAME', u'TUNNEL', u'REF', u'ONEWAY', 'shield_ty',
u'OSM_ID', u'TYPE', u'ID']
>>>


On Thu, May 29, 2014 at 4:37 PM, Ari Simmons <ari.ucb.f...@gmail.com> wrote:

> Okay...so, based on Sean's advice I circled back to the function
> *(thanks). I am basically trying to COPY everything about one shapefile
> (data, attributes, etc) into another shapefile, with one addition - a new
> attribute field (i.e. 'shield_type').
>
> However all attempts to do this result in a 'driver error'....(?)
>
> Here is what I got:
>
> import fiona
> from shapely.geometry import shape, mapping
>
>     def process_file(self, inFile, outFile):
>         with fiona.collection(inFile, 'r') as input:
>             input_schema = input.schema
>             input_schema['geometry'] = 'LineString'
>             attributes = dict(input_schema['properties'])
>             attributes.update({'shield_type':'str:1'})
>             input_schema['properties'] = attributes
>             with fiona.collection(outFile, 'w', input_schema) as output:
>                 for elem in input:
>                     output.write({'properties':
> elem['properties'],'geometry': mapping(shape(elem['geometry']))})
>
> The error I get is below:
>
> >>> g = ShieldLabels()
> >>> inFile =
> r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data.shp'
> >>> outFile = r'I:\It_24\115507_Road_Shields_Label_Processing\data\ari.shp'
> >>> g.process_file(inFile, outFile)
>
>
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File
> "I:/It_24/115507_Road_Shields_Label_Processing/code/RoadShieldLabels/ShieldLabels.py",
> line 23, in process_file
>     with fiona.collection(outFile, 'w', input_schema) as output:
>   File "C:\Python27\lib\site-packages\fiona\__init__.py", line 147, in open
>     encoding=encoding, layer=layer, vsi=vsi, archive=archive)
>   File "C:\Python27\lib\site-packages\fiona\collection.py", line 42, in
> __init__
>     raise TypeError("invalid driver: %r" % driver)
> TypeError: invalid driver: {'geometry': 'LineString', 'properties':
> {u'Z_ORDER': 'int:6', u'BRIDGE': 'int:6', u'NAME': 'str:254', u'TUNNEL':
> 'int:6', u'TYPE': 'str:254', u'OSM_ID': 'float:19', 'shield_type': 'str:1',
> u'ONEWAY': 'int:6', u'REF': 'str:254', u'ID': 'float:11'}}
> >>>
>
>
>> Message: 1
>> Date: Wed, 28 May 2014 15:04:06 -0700
>> From: Ari Simmons <ari.ucb.f...@gmail.com>
>> Subject: [Community] Trying to add fields using meta
>> To: "community@lists.gispython.org" <community@lists.gispython.org>
>> Message-ID:
>>         <
>> cajxqebsrh1ggpd9obx01_i_uty0cwkgwqfnouyo4rxeh1ry...@mail.gmail.com>
>> Content-Type: text/plain; charset="utf-8"
>>
>> I am trying to copy the schema of an existing shapefile and add to it in
>> an
>> output shapefile. Somehow I am not getting anywhere with this...though the
>> docs seem very clear (and the download page :
>> https://pypi.python.org/pypi/Fiona) and it is just adding to a
>> dictionary.
>>
>> For this object, I have this schema
>>
>> >>> c =
>>
>> fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data.shp')
>> >>> c.schema
>> {'geometry': 'LineString', 'properties': OrderedDict([(u'ID', 'float:11'),
>> (u'OSM_ID', 'float:19'), (u'NAME', 'str:254'), (u'TYPE', 'str:254'),
>> (u'TUNNEL', 'int:6'), (u'BRIDGE', 'int:6'), (u'ONEWAY', 'int:6'), (u'REF',
>> 'str:254'), (u'Z_ORDER', 'int:6')])}
>>
>> and I want to return:
>>
>> >>> c =
>>
>> fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data_copy.shp')
>> >>> c.schema
>> {'geometry': 'LineString', 'properties': OrderedDict([(u'ID', 'float:11'),
>> (u'OSM_ID', 'float:19'), (u'NAME', 'str:254'), (u'TYPE', 'str:254'),
>> (u'TUNNEL', 'int:6'), (u'BRIDGE', 'int:6'), (u'ONEWAY', 'int:6'), (u'REF',
>> 'str:254'), (u'Z_ORDER', 'int:6'), (u'shield_type', 'str:254'), (u'label',
>> 'str:254'),  (u'label_len', 'int:10'), (u'zoom', 'int:10')])}
>>
>> to do so I am running:
>>
>>    def process_file(self, inFile, outFile):
>>         with fiona.open(inFile, 'r') as input:
>>             meta = input.meta
>>             # create new fields for the new schema
>>             meta['schema']['properties']['shield_type'.encode("utf-8")] =
>> 'str:254'
>>             meta['schema']['properties']['label'.encode("utf-8")] =
>> 'str:254'
>>             meta['schema']['properties']['label_len'] = 'int:10'
>>             meta['schema']['properties']['zoom'] = 'int:10'
>>
>>             with fiona.open(outFile, 'w', **meta) as output:
>>                   for item in input:
>>                     n = item.copy()
>>                     new_data_attributes =
>> function_using_some_regex_parsing(item['properties']['REF']
>>                     ...
>>
>> Right now running this I just get an empty dictionary...I'm not sure what
>> I'm missing...
>>
>> >>> c =
>>
>> fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data_copy.shp')
>> >>> c.schema
>> >>> {'geometry': 'LineString', 'properties': OrderedDict()}
>> -------------- next part --------------
>> An HTML attachment was scrubbed...
>> URL: <
>> http://lists.gispython.org/pipermail/community/attachments/20140528/2788d117/attachment.html
>> >
>>
>> ------------------------------
>>
>> Message: 2
>> Date: Wed, 28 May 2014 22:29:39 -0600
>> From: Sean Gillies <sean.gill...@gmail.com>
>> Subject: Re: [Community] Trying to add fields using meta
>> To: "gispython.org community projects" <community@lists.gispython.org>
>> Message-ID:
>>         <
>> caoodmjpbb34sbnkjkxt-cxetngnih1zpb7jzetcc1kwj00h...@mail.gmail.com>
>> Content-Type: text/plain; charset="utf-8"
>>
>> Hi Ari,
>>
>> Is there any chance that the
>> I:\It_24\115507_Road_Shields_Label_Processing\data\test_data_copy.shp
>> isn't
>> being written properly due to some logic in your function? My code below
>> writes an (empty) shapefile with the requested fields:
>>
>> $ python
>> Python 2.7.6 (default, May  8 2014, 07:38:16)
>> [GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
>> Type "help", "copyright", "credits" or "license" for more information.
>> >>> import fiona
>> >>> from collections import OrderedDict
>> >>> schema = {'geometry': 'LineString', 'properties': OrderedDict([(u'ID',
>> 'float:11'), (u'OSM_ID', 'float:19'), (u'NAME', 'str:254'), (u'TYPE',
>> 'str:254'), (u'TUNNEL', 'int:6'), (u'BRIDGE', 'int:6'), (u'ONEWAY',
>> 'int:6'), (u'REF', 'str:254'), (u'Z_ORDER', 'int:6'), (u'shield_type',
>> 'str:254'), (u'label', 'str:254'),  (u'label_len', 'int:10'), (u'zoom',
>> 'int:10')])}
>> >>> with fiona.open('/tmp/foo.shp', 'w', crs={'init': 'epsg:4326'},
>> schema=schema, driver='ESRI Shapefile') as output:
>> ...     pass
>> ...
>> >>> import subprocess
>> >>> subprocess.check_output(['ogrinfo', '/tmp/foo.shp', 'foo'])
>> 'INFO: Open of `/tmp/foo.shp\'\n      using driver `ESRI Shapefile\'
>> successful.\n\nLayer name: foo\nGeometry: Line String\nFeature Count:
>> 0\nExtent: (0.000000, 0.000000) - (0.000000, 0.000000)\nLayer SRS
>> WKT:\nGEOGCS["GCS_WGS_1984",\n    DATUM["WGS_1984",\n
>> SPHEROID["WGS_84",6378137,298.257223563]],\n    PRIMEM["Greenwich",0],\n
>> UNIT["Degree",0.017453292519943295]]\nID: Real (11.0)\nOSM_ID: Real
>> (19.0)\nNAME: String (254.0)\nTYPE: String (254.0)\nTUNNEL: Integer
>> (6.0)\nBRIDGE: Integer (6.0)\nONEWAY: Integer (6.0)\nREF: String
>> (254.0)\nZ_ORDER: Integer (6.0)\nshield_typ: String (254.0)\nlabel: String
>> (254.0)\nlabel_len: Integer (10.0)\nzoom: Integer (10.0)\n'
>> >>>
>>
>>
>> On Wed, May 28, 2014 at 4:04 PM, Ari Simmons <ari.ucb.f...@gmail.com>
>> wrote:
>>
>> > I am trying to copy the schema of an existing shapefile and add to it in
>> > an output shapefile. Somehow I am not getting anywhere with
>> this...though
>> > the docs seem very clear (and the download page :
>> > https://pypi.python.org/pypi/Fiona) and it is just adding to a
>> dictionary.
>> >
>> > For this object, I have this schema
>> >
>> > >>> c =
>> >
>> fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data.shp')
>> > >>> c.schema
>> > {'geometry': 'LineString', 'properties': OrderedDict([(u'ID',
>> 'float:11'),
>> > (u'OSM_ID', 'float:19'), (u'NAME', 'str:254'), (u'TYPE', 'str:254'),
>> > (u'TUNNEL', 'int:6'), (u'BRIDGE', 'int:6'), (u'ONEWAY', 'int:6'),
>> (u'REF',
>> > 'str:254'), (u'Z_ORDER', 'int:6')])}
>> >
>> > and I want to return:
>> >
>> > >>> c =
>> >
>> fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data_copy.shp')
>> > >>> c.schema
>> > {'geometry': 'LineString', 'properties': OrderedDict([(u'ID',
>> 'float:11'),
>> > (u'OSM_ID', 'float:19'), (u'NAME', 'str:254'), (u'TYPE', 'str:254'),
>> > (u'TUNNEL', 'int:6'), (u'BRIDGE', 'int:6'), (u'ONEWAY', 'int:6'),
>> (u'REF',
>> > 'str:254'), (u'Z_ORDER', 'int:6'), (u'shield_type', 'str:254'),
>> (u'label',
>> > 'str:254'),  (u'label_len', 'int:10'), (u'zoom', 'int:10')])}
>> >
>> > to do so I am running:
>> >
>> >    def process_file(self, inFile, outFile):
>> >         with fiona.open(inFile, 'r') as input:
>> >             meta = input.meta
>> >             # create new fields for the new schema
>> >             meta['schema']['properties']['shield_type'.encode("utf-8")]
>> =
>> > 'str:254'
>> >             meta['schema']['properties']['label'.encode("utf-8")] =
>> > 'str:254'
>> >             meta['schema']['properties']['label_len'] = 'int:10'
>> >             meta['schema']['properties']['zoom'] = 'int:10'
>> >
>> >             with fiona.open(outFile, 'w', **meta) as output:
>> >                   for item in input:
>> >                     n = item.copy()
>> >                     new_data_attributes =
>> > function_using_some_regex_parsing(item['properties']['REF']
>> >                     ...
>> >
>> > Right now running this I just get an empty dictionary...I'm not sure
>> what
>> > I'm missing...
>> >
>> > >>> c =
>> >
>> fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data_copy.shp')
>> > >>> c.schema
>> > >>> {'geometry': 'LineString', 'properties': OrderedDict()}
>> >
>> > _______________________________________________
>> > Community mailing list
>> > Community@lists.gispython.org
>> > http://lists.gispython.org/mailman/listinfo/community
>> >
>> >
>>
>>
>> --
>> Sean Gillies
>> -------------- next part --------------
>> An HTML attachment was scrubbed...
>> URL: <
>> http://lists.gispython.org/pipermail/community/attachments/20140528/8908242a/attachment-0001.htm
>> >
>>
>> ------------------------------
>>
>> _______________________________________________
>> Community mailing list
>> Community@lists.gispython.org
>> http://lists.gispython.org/mailman/listinfo/community
>>
>>
>> End of Community Digest, Vol 98, Issue 8
>> ****************************************
>>
>
>
_______________________________________________
Community mailing list
Community@lists.gispython.org
http://lists.gispython.org/mailman/listinfo/community

Reply via email to