Hi Sean, I think you are right....went down to 'shield_ty' and it worked. I am running fiona 1.0.2..I can ugrade to 1.1.5 and test, or do you want me to try 1.1.4 specifically?
-Ari On Sun, Jun 1, 2014 at 3:54 PM, <community-requ...@lists.gispython.org> wrote: > Send Community mailing list submissions to > community@lists.gispython.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://lists.gispython.org/mailman/listinfo/community > or, via email, send a message with subject or body 'help' to > community-requ...@lists.gispython.org > > You can reach the person managing the list at > community-ow...@lists.gispython.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Community digest..." > > > Today's Topics: > > 1. Re: Subject: Trying to add fields to 'properties' - invalid > driver error (Sean Gillies) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Sun, 1 Jun 2014 16:54:37 -0600 > From: Sean Gillies <sean.gill...@gmail.com> > Subject: Re: [Community] Subject: Trying to add fields to 'properties' > - invalid driver error > To: "gispython.org community projects" <community@lists.gispython.org> > Message-ID: > <CAOodmJo=O= > m_zxmcot2drsyxbuxyjyesetz9f0etdohj4a1...@mail.gmail.com> > Content-Type: text/plain; charset="utf-8" > > Ari, > > I think the problem is that "shield_type" is 11 characters ? too long for a > shapefile field, and so OGR (and FIona) tuncates it to "shield_typ". In > Fiona versions before 1.1.4, an attempt to write a feature with a > "shield_type" property would fail. In version 1.1.4, it should work thanks > to an internal mapping. Can you upgrade or confirm that you have version > 1.1.4+ and that this is a bug? > > > On Thu, May 29, 2014 at 5:54 PM, Ari Simmons <ari.ucb.f...@gmail.com> > wrote: > > > 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 > > > > > > > -- > Sean Gillies > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: < > http://lists.gispython.org/pipermail/community/attachments/20140601/2c0f2f9b/attachment.htm > > > > ------------------------------ > > _______________________________________________ > Community mailing list > Community@lists.gispython.org > http://lists.gispython.org/mailman/listinfo/community > > > End of Community Digest, Vol 99, Issue 1 > **************************************** >
_______________________________________________ Community mailing list Community@lists.gispython.org http://lists.gispython.org/mailman/listinfo/community