Podczas gdy obiekty Arcpy Geometry nie obsługują prawdziwych krzywych, w wersji 10.3 Esri zaimplementowała Prawdziwe krzywe w interfejsie API REST, a zatem musiała zaimplementować dla nich obsługę JSON w FeatureSets. Możesz więc „oszukać” arkady, aby zrobić to za Ciebie, jeśli utworzysz krzywą w strukturze JSON .
Oto przykład: utwórz plik JSON z prawdziwymi krzywymi (używa to łuku kołowego i krzywej Beziera), mniej więcej tak:
{ '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
}
}],
}
Następnie załaduj to do zestawu funkcji i zapisz w klasie elementów.
fs = arcpy.FeatureSet()
fs.load(r'C:\path_to_your_json_file.json')
arcpy.management.CopyFeatures(fs, r'in_memory\test_curve')
I bum, masz prawdziwe krzywe! Oto, co stworzył w ArcMap:
Więc w twoim przypadku, być może możesz zbudować strukturę json, albo rzutując oryginalne funkcje do zestawu funkcji i grając JSON, lub podczas iteracji między wierszami kursora wyszukiwania. Matematyka może być trochę trudna, aby uzyskać to, czego chcesz, ale na pewno jest wykonalna.
Powinienem również wspomnieć, że nie musisz tworzyć pełnego zestawu funkcji, możesz po prostu przekazać geometrię JSON również bezpośrednio do, arcpy.AsShape(geojson, True)
aby odzyskać obiekt geometrii.