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
_______________________________________________ Community mailing list Community@lists.gispython.org http://lists.gispython.org/mailman/listinfo/community