Skip to content

Commit dd5e569

Browse files
committed
use VectorTranslate instead of CopyDataSource for convenience and reliability; nature access. natcap#1686
1 parent d28d068 commit dd5e569

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

src/natcap/invest/urban_nature_access.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -2093,11 +2093,10 @@ def _write_supply_demand_vector(source_aoi_vector_path, feature_attrs,
20932093
Returns:
20942094
``None``
20952095
"""
2096-
source_vector = ogr.Open(source_aoi_vector_path)
2097-
driver = ogr.GetDriverByName('GPKG')
2098-
driver.CopyDataSource(source_vector, target_aoi_vector_path)
2099-
source_vector = None
2100-
driver = None
2096+
gdal.VectorTranslate(
2097+
target_aoi_vector_path, source_aoi_vector_path,
2098+
format='GPKG',
2099+
preserveFID=True)
21012100

21022101
target_vector = gdal.OpenEx(target_aoi_vector_path, gdal.GA_Update)
21032102
target_layer = target_vector.GetLayer()

tests/test_urban_nature_access.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -904,8 +904,14 @@ def test_write_vector(self):
904904
from natcap.invest import urban_nature_access
905905
args = _build_model_args(self.workspace_dir)
906906

907+
admin_vector = gdal.OpenEx(args['admin_boundaries_vector_path'])
908+
admin_layer = admin_vector.GetLayer()
909+
fid = admin_layer.GetNextFeature().GetFID()
910+
admin_layer = None
911+
admin_vector = None
912+
907913
feature_attrs = {
908-
0: {
914+
fid: {
909915
'my-field-1': float(1.2345),
910916
'my-field-2': numpy.float32(2.34567),
911917
'my-field-3': numpy.float64(3.45678),
@@ -924,10 +930,10 @@ def test_write_vector(self):
924930
vector = gdal.OpenEx(target_vector_path)
925931
self.assertEqual(vector.GetLayerCount(), 1)
926932
layer = vector.GetLayer()
927-
self.assertEqual(len(layer.schema), len(feature_attrs[0]))
933+
self.assertEqual(len(layer.schema), len(feature_attrs[fid]))
928934
self.assertEqual(layer.GetFeatureCount(), 1)
929-
feature = layer.GetFeature(0)
930-
for field_name, expected_field_value in feature_attrs[0].items():
935+
feature = layer.GetFeature(fid)
936+
for field_name, expected_field_value in feature_attrs[fid].items():
931937
self.assertEqual(
932938
feature.GetField(field_name), expected_field_value)
933939
finally:

0 commit comments

Comments
 (0)