@@ -80,6 +80,8 @@ DTYPE_OGR_FIELD_TYPES = {
8080 ' float' : (OFTReal, OFSTNone),
8181 ' float64' : (OFTReal, OFSTNone),
8282
83+ ' string' : (OFTString, OFSTNone),
84+
8385 ' datetime64[D]' : (OFTDate, OFSTNone),
8486 ' datetime64' : (OFTDateTime, OFSTNone),
8587}
@@ -1470,7 +1472,7 @@ cdef infer_field_types(list dtypes):
14701472
14711473# TODO: set geometry and field data as memory views?
14721474def 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 ,
14741476 str crs , str geometry_type , str encoding , object dataset_kwargs ,
14751477 object layer_kwargs , bint promote_to_multi = False , bint nan_as_null = True ,
14761478 bint append = False , dataset_metadata = None , layer_metadata = None
@@ -1517,6 +1519,12 @@ def ogr_write(
15171519 else :
15181520 field_mask = [None ] * len (field_data)
15191521
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+
15201528 path_b = path.encode(' UTF-8' )
15211529 path_c = path_b
15221530
@@ -1641,7 +1649,7 @@ def ogr_write(
16411649 layer_options = NULL
16421650
16431651 # ## Create the fields
1644- field_types = infer_field_types([field.dtype for field in field_data] )
1652+ field_types = infer_field_types(field_dtype )
16451653
16461654 # ## Create the fields
16471655 if create_layer:
0 commit comments