Программно установить параметры трансформатора в FME2015
Я пытаюсь обновить свое приложение с FME2009 до FME2015. Проблема, с которой я сталкиваюсь, заключается в том, что устанавливаемые параметры не используются в реальном трансформаторе. Вместо этого используются значения по умолчанию из определения трансформатора. В частности, имена системы координат источника и назначения не применяются.
Установка параметров таким образом работала отлично, когда мое приложение было связано с FME2009.
Выдержка из кода:
StringCollection directives = new StringCollection();
directives.Add(Safe.FMEObjects.Constants.TransformerManager.CreateTransformerDirectives.SerializationString);
parameters = String.Format("\"SOURCE_COORDSYS,{0},XFORMER_NAME,SpineClipTransformer,DEST_COORDSYS,{1}\"", sourceCSys, destCSys);
directives.Add(String.Format("NAME,SpineClipTransformer,VERSION,0,PARAMETER_VALUES,{0},INPUT_FEATURE_TYPES,,INPUT_FILTERS,,INPUT_ATTRS,,OUTPUT_FEATURE_TYPES,,OUTPUT_FUNCTIONS,", parameters));
transformer = fme.TransformerManager().CreateTransformer(directives);
Когда я выполняю этот код, я вижу из журналов, что используются значения по умолчанию.
Выдержка из журнала:
Система координат с именем TOM_PRICE_MINE_MGA не существует. ПЛОХИЕ: Не найдено определение для системы координат `TOM_PRICE_MINE_MGA(TOM_PRICE_MINE_MGA)' (crdsysmn.cpp:1074) Система координат с именем TOM_PRICE_MINE_MGA не существует. BADNEWS: указана неизвестная система координат 'TOM_PRICE_MINE_MGA' - прерывание (crdsysmn.cpp:1628) указана неизвестная система координат 'TOM_PRICE_MINE_MGA' - отменено BADNEWS: репроектор: не удалось создать механизм репроекции (механизм fmereprojector.cpp:404) Reprojection C Repro: не может быть воспроизведен, репродуктор не воспроизводится
Отрывок трансформатора:
<GLOBAL_PARAMETERS>
<GLOBAL_PARAMETER
GUI_LINE="GUI COORDSYS DEST_COORDSYS Destination Coordinate System:"
DEFAULT_VALUE="EPSG:28350"
IS_STAND_ALONE="false"
/>
<GLOBAL_PARAMETER
GUI_LINE="GUI COORDSYS SOURCE_COORDSYS Source Coordinate System:"
DEFAULT_VALUE="TOM_PRICE_MINE_MGA"
IS_STAND_ALONE="false"
/>
</GLOBAL_PARAMETERS>
...
DEFAULT_MACRO DEST_COORDSYS EPSG:28350
DEFAULT_MACRO SOURCE_COORDSYS TOM_PRICE_MINE_MGA
Редактировать 1
Я нашел метод IFMEOTransformer.Serialize и запустил его после того, как создал экземпляр трансформатора.
Моя директива: NAME,SpineClipTransformer,VERSION,0,PARAMETER_VALUES,"SOURCE_COORDSYS,LL-GDA94,XFORMER_NAME,SpineClipTransformer,DEST_COORDSYS,MGA94-50",INPUT_FEATURE_TYPES,,INPUT_FILTERS,,INPUT_ATTRS,,OUTPUT_FEATURE_TYPES,,OUTPUT_FUNCTIONS,
Вывод IFMEOTransformer.Serialize(): NAME,SpineClipTransformer,VERSION,1,PARAMETER_VALUES,"__COMPOUND_PARAMETERS,,XFORMER_NAME,SpineClipTransformer,TRANSFORMER_GROUP,",INPUT_FEATURE_TYPES,,INPUT_FILTERS,,INPUT_ATTRS,,OUTPUT_FEATURE_TYPES,,OUTPUT_FUNCTIONS,
Пытаясь следовать этому формату (ничего не зная об этом), я изменил свою директиву на: NAME,SpineClipTransformer,VERSION,1,PARAMETER_VALUES,"__COMPOUND_PARAMETERS,SOURCE_COORDSYS,LL-GDA94,XFORMER_NAME,SpineClipTransformer,DEST_COORDSYS,MGA94-50,TRANSFORMER_GROUP,",INPUT_FEATURE_TYPES,,INPUT_FILTERS,,INPUT_ATTRS,,OUTPUT_FEATURE_TYPES,,OUTPUT_FUNCTIONS,
Новый вывод IFMEOTransformer.Serialize(): NAME,SpineClipTransformer,VERSION,1,PARAMETER_VALUES,"__COMPOUND_PARAMETERS,SOURCE_COORDSYS,XFORMER_NAME,SpineClipTransformer,TRANSFORMER_GROUP,",INPUT_FEATURE_TYPES,,INPUT_FILTERS,,INPUT_ATTRS,,OUTPUT_FEATURE_TYPES,,OUTPUT_FUNCTIONS,