Ari Simmons
2014-05-29 23:37:50 UTC
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']))})
r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data.shp'
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'}}
An HTML attachment was scrubbed...
URL: <http://lists.gispython.org/pipermail/community/attachments/20140529/9420cd60/attachment.htm>
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']))})
g = ShieldLabels()
inFile =
inFile =
outFile = r'I:\It_24\115507_Road_Shields_Label_Processing\data\ari.shp'
g.process_file(inFile, outFile)
g.process_file(inFile, outFile)
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.fire at gmail.com>
Subject: [Community] Trying to add fields using meta
To: "community at lists.gispython.org" <community at lists.gispython.org>
<
CAJxqeBsRh1GgpD9OBx01_i_UtY0cWKGwqfnOUyo4RxEh1RYUbw at 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
https://pypi.python.org/pypi/Fiona) and it is just adding to a dictionary.
For this object, I have this schema
fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data.shp')
{'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')])}
fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data_copy.shp')
{'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')])}
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'
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...
fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data_copy.shp')
-------------- 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.gillies at gmail.com>
Subject: Re: [Community] Trying to add fields using meta
To: "gispython.org community projects" <community at lists.gispython.org>
<
CAOodmJpBb34SBNkjkXT-CXEtNgNiH1zPb7jZeTcC1KWJ00hMCg at 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
$ 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.
'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')])}
... pass
...
'INFO: Open of `/tmp/foo.shp\'\n using driver `ESRI Shapefile\'
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.fire at gmail.com>
{'geometry': 'LineString', 'properties': OrderedDict([(u'ID',
'float:11'),
{'geometry': 'LineString', 'properties': OrderedDict([(u'ID',
'float:11'),
_______________________________________________
Community mailing list
Community at 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 at lists.gispython.org
http://lists.gispython.org/mailman/listinfo/community
End of Community Digest, Vol 98, Issue 8
****************************************
-------------- next part --------------Date: Wed, 28 May 2014 15:04:06 -0700
From: Ari Simmons <ari.ucb.fire at gmail.com>
Subject: [Community] Trying to add fields using meta
To: "community at lists.gispython.org" <community at lists.gispython.org>
<
CAJxqeBsRh1GgpD9OBx01_i_UtY0cWKGwqfnOUyo4RxEh1RYUbw at 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
https://pypi.python.org/pypi/Fiona) and it is just adding to a dictionary.
For this object, I have this schema
c =
c.schema
(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')])}
c =
c.schema
(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')])}
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'
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 =
c.schema
{'geometry': 'LineString', 'properties': OrderedDict()}
{'geometry': 'LineString', 'properties': OrderedDict()}
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.gillies at gmail.com>
Subject: Re: [Community] Trying to add fields using meta
To: "gispython.org community projects" <community at lists.gispython.org>
<
CAOodmJpBb34SBNkjkXT-CXEtNgNiH1zPb7jZeTcC1KWJ00hMCg at 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
$ 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',
from collections import OrderedDict
schema = {'geometry': 'LineString', 'properties': OrderedDict([(u'ID',
'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'},
...
import subprocess
subprocess.check_output(['ogrinfo', '/tmp/foo.shp', 'foo'])
subprocess.check_output(['ogrinfo', '/tmp/foo.shp', 'foo'])
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.fire at gmail.com>
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
https://pypi.python.org/pypi/Fiona) and it is just adding to a
dictionary.an output shapefile. Somehow I am not getting anywhere with this...though
https://pypi.python.org/pypi/Fiona) and it is just adding to a
For this object, I have this schema
fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data.shp')c =
c.schema
(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',(u'TUNNEL', 'int:6'), (u'BRIDGE', 'int:6'), (u'ONEWAY', 'int:6'),
'str:254'), (u'Z_ORDER', 'int:6')])}
fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data_copy.shp')c =
c.schema
(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',(u'TUNNEL', 'int:6'), (u'BRIDGE', 'int:6'), (u'ONEWAY', 'int:6'),
'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')])}
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'
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...
fiona.open(r'I:\It_24\115507_Road_Shields_Label_Processing\data\test_data_copy.shp')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'
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 =
c.schema
{'geometry': 'LineString', 'properties': OrderedDict()}
{'geometry': 'LineString', 'properties': OrderedDict()}
Community mailing list
Community at 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 at lists.gispython.org
http://lists.gispython.org/mailman/listinfo/community
End of Community Digest, Vol 98, Issue 8
****************************************
An HTML attachment was scrubbed...
URL: <http://lists.gispython.org/pipermail/community/attachments/20140529/9420cd60/attachment.htm>