Skip to main content
Solved

fmeobjects.FMECoordSysManager() not working in defining a coordinate system in FME 2024.

  • February 9, 2026
  • 2 replies
  • 19 views

aguan
Supporter
Forum|alt.badge.img+11

I dug out one of my old FME 2014 workbenches. It has this PythonCaller defining a local CRS. It had worked beautifully for years.

import pyfme

#define custom CRS
myCSMan = pyfme.FMECoordSysManager()
fmeParams = {}
fmeParams['CS_NAME'] = "local_polyconic_cs"
fmeParams['DESC_NM'] = "Dynamic CS"
fmeParams['DT_NAME'] = "WGS84"
fmeParams['PROJ'] = "PLYCN"
fmeParams['UNIT'] = "FOOT"
fmeParams['X_OFF'] = 0.0
fmeParams['Y_OFF'] = 0.0
fmeParams['MAP_SCL'] = 1.0
fmeParams['SCL_RED'] = 0.9996
fmeParams['SOURCE'] = "HESS"
fmeParams['QUAD'] = 1
fmeParams['ZERO_X'] = 0.0001
fmeParams['ZERO_Y'] = 0.0001

surf_lat = float(feature.getAttribute('surf_lat'))
surf_long = float(feature.getAttribute('surf_long'))
        
fmeParams['PARM1'] = str(surf_long)
fmeParams['ORG_LAT'] = str(surf_lat)

myfmeCS = myCSMan.defineCoordSys(fmeParams, "myfmeCS")

 

Now I am at FME 2024 where pyfme has been replaced by fmeobjects. So I made the changes like below:

 

import fmeobjects

myCSMan = fmeobjects.FMECoordSysManager()

#defineCoordSys only takes one parameter

myfmeCS = myCSMan.defineCoordSys(fmeParams)

 

The last line gives this error:

Message Type: fme::internal::_v0::py::Exception
Python Exception <TypeError>: Could not convert Python coord system parameters.
Error encountered while calling method `input'
PythonCaller_5 (PythonFactory): PythonFactory failed to process feature

 

Any idea?

 

Allen

Best answer by david_r

The problem is that the method defineCoordSys() has changed, it now takes only coordSysParms (a dict[str, str] or pairwise list[str]).

Try something like this:

import fmeobjects

# Define custom CRS
myCSMan = fmeobjects.FMECoordSysManager()

# Static parameters
fmeParams = {
'CS_NAME': 'local_polyconic_cs',
'DESC_NM': 'Dynamic CS',
'DT_NAME': 'WGS84',
'PROJ': 'PLYCN',
'UNIT': 'FOOT',
'X_OFF': '0.0',
'Y_OFF': '0.0',
'MAP_SCL': '1.0',
'SCL_RED': '0.9996',
'SOURCE': 'HESS',
'QUAD': '1',
'ZERO_X': '0.0001',
'ZERO_Y': '0.0001',
}

# Dynamic parameters
fmeParams['PARM1'] = str(feature.getAttribute('surf_long'))
fmeParams['ORG_LAT'] = str(feature.getAttribute('surf_lat'))

# defineCoordSys now takes a single arg and returns the unique CS name
cs_name = myCSMan.defineCoordSys(fmeParams)

See also https://docs.safe.com/fme/html/fmepython/api/fmeobjects/_coordsys/fmeobjects.FMECoordSysManager.defineCoordSys.html#fmeobjects.FMECoordSysManager.defineCoordSys

2 replies

david_r
Celebrity
  • Best Answer
  • February 9, 2026

The problem is that the method defineCoordSys() has changed, it now takes only coordSysParms (a dict[str, str] or pairwise list[str]).

Try something like this:

import fmeobjects

# Define custom CRS
myCSMan = fmeobjects.FMECoordSysManager()

# Static parameters
fmeParams = {
'CS_NAME': 'local_polyconic_cs',
'DESC_NM': 'Dynamic CS',
'DT_NAME': 'WGS84',
'PROJ': 'PLYCN',
'UNIT': 'FOOT',
'X_OFF': '0.0',
'Y_OFF': '0.0',
'MAP_SCL': '1.0',
'SCL_RED': '0.9996',
'SOURCE': 'HESS',
'QUAD': '1',
'ZERO_X': '0.0001',
'ZERO_Y': '0.0001',
}

# Dynamic parameters
fmeParams['PARM1'] = str(feature.getAttribute('surf_long'))
fmeParams['ORG_LAT'] = str(feature.getAttribute('surf_lat'))

# defineCoordSys now takes a single arg and returns the unique CS name
cs_name = myCSMan.defineCoordSys(fmeParams)

See also https://docs.safe.com/fme/html/fmepython/api/fmeobjects/_coordsys/fmeobjects.FMECoordSysManager.defineCoordSys.html#fmeobjects.FMECoordSysManager.defineCoordSys


aguan
Supporter
Forum|alt.badge.img+11
  • Author
  • Supporter
  • February 9, 2026

@david_r That seems to work, thanks a lot.