Хотя объекты arcpy Geometry не поддерживают истинные кривые, в 10.3 Esri реализовала True Curves в REST API и поэтому должна была реализовать поддержку JSON для них в FeatureSets. Таким образом, вы можете «обмануть» arcpy, сделав это за вас, если создадите кривую в структуре JSON .
Вот пример: создайте файл JSON с истинными кривыми (для этого используются круговая дуга и кривая Безье), примерно так:
{ 'fieldAliases': {
'Id': 'Id',
'FID': 'FID'
},
'fields': [{
'alias': 'FID',
'type': 'esriFieldTypeOID',
'name': 'FID'
}, {
'alias': 'Id',
'type': 'esriFieldTypeInteger',
'name': 'Id'
}],
'displayFieldName': '',
'spatialReference': {
'wkid': 103734,
'latestWkid': 103734
},
'geometryType': 'esriGeometryPolyline'
'features': [{
'geometry': {
"curvePaths":[[
[6,3],[5,3],
{"b":[[3,2],[6,1],[2,4]]},
[1,2],
{"a":[[0,2],[0,3],0,0,2.094395102393195,1.83,0.33333333]}
]]
},
'attributes': {
'Id': 0,
'FID': 0
}
}],
}
Затем загрузите его в набор функций и сохраните его в классе объектов.
fs = arcpy.FeatureSet()
fs.load(r'C:\path_to_your_json_file.json')
arcpy.management.CopyFeatures(fs, r'in_memory\test_curve')
И бум, у вас есть истинные изгибы! Вот что он создал в ArcMap:
Таким образом, в вашем случае, возможно, вы можете построить структуру json, либо приведя исходные объекты к набору функций и играя с JSON, либо во время итерации по строкам в поисковом курсоре. Математика может быть немного сложнее, чтобы получить то, что вы хотите, но, безусловно, выполнимо.
Я также должен отметить, что вам не нужно формировать полный набор объектов, вы можете просто передать геометрию JSON непосредственно в arcpy.AsShape(geojson, True)
объект, чтобы вернуть объект геометрии.