@@ -80,6 +80,8 @@ DTYPE_OGR_FIELD_TYPES = {
80
80
' float' : (OFTReal, OFSTNone),
81
81
' float64' : (OFTReal, OFSTNone),
82
82
83
+ ' string' : (OFTString, OFSTNone),
84
+
83
85
' datetime64[D]' : (OFTDate, OFSTNone),
84
86
' datetime64' : (OFTDateTime, OFSTNone),
85
87
}
@@ -1470,7 +1472,7 @@ cdef infer_field_types(list dtypes):
1470
1472
1471
1473
# TODO: set geometry and field data as memory views?
1472
1474
def ogr_write (
1473
- str path , str layer , str driver , geometry , fields , field_data , field_mask ,
1475
+ str path , str layer , str driver , geometry , fields , field_dtype , field_data , field_mask ,
1474
1476
str crs , str geometry_type , str encoding , object dataset_kwargs ,
1475
1477
object layer_kwargs , bint promote_to_multi = False , bint nan_as_null = True ,
1476
1478
bint append = False , dataset_metadata = None , layer_metadata = None
@@ -1517,6 +1519,12 @@ def ogr_write(
1517
1519
else :
1518
1520
field_mask = [None ] * len (field_data)
1519
1521
1522
+ if field_dtype is not None :
1523
+ if len (field_dtype) != len (field_data):
1524
+ raise ValueError (" field_dtype and field_data must be same length" )
1525
+ else :
1526
+ field_dtype = [field.dtype for field in field_data]
1527
+
1520
1528
path_b = path.encode(' UTF-8' )
1521
1529
path_c = path_b
1522
1530
@@ -1641,7 +1649,7 @@ def ogr_write(
1641
1649
layer_options = NULL
1642
1650
1643
1651
# ## Create the fields
1644
- field_types = infer_field_types([field.dtype for field in field_data] )
1652
+ field_types = infer_field_types(field_dtype )
1645
1653
1646
1654
# ## Create the fields
1647
1655
if create_layer:
0 commit comments