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