Para acceder a las geometrías espaciales con una transformación personalizada, cree un flujo de datos mediante los siguientes pasos. Este proceso leerá las geometrías y las guardará como archivos Well-Known Text mediante secuencias de comandos Groovy.
-
Cree un trabajo en Enterprise Designer y coloque una etapa Read Spatial Data en este.
La etapa se configura para que lea el archivo de geometría heterogénea e incluya solo el campo Geometría en el flujo.
- Cree una etapa Transformer 'setGeomType' que use una transformación personalizada. Esta transformación usará Groovy para obtener el tipo de IGeometry desde el campo Geometría y agregará un nuevo campo en el flujo de tipo Cadena de caracteres que indique el tipo de geometría.
def geometry = data['Geometry']
def geometryType = geometry.getType()
data['GeometryType'] = geometryType.toString()
-
Agregue Conditional Router 'geomTypeRouter' al flujo. Enruta los campos a otras partes del flujo según el valor del campo GeometryType.
-
Cree transformaciones personalizadas para cada IGeometry que desee convertir a WKT. Cada puerto del enrutador setGeomType irá a una transformación distinta.
Por ejemplo, use este código Groovy para convertir IPointGeometry a un WKT POINT:
def point = data['Geometry']
data['WKT'] = 'POINT(' + point.getX() + ', ' + point.getY() + ')'
Use este código Groovy para convertir IMultiCurve en WKT MULTILINESTRING:
def multiCurve = data['Geometry']
def wkt = new StringBuffer('MULTILINESTRING (')
def dp = new com.mapinfo.midev.geometry.DirectPosition()
multiCurve.each {com.mapinfo.midev.geometry.ICurve curve ->
wkt << '('
def lineString = curve.asLineString()
lineString.each{curveSegment ->
def controlPointIterator = curveSegment.getControlPointIterator()
while (controlPointIterator.hasNext()) {
controlPointIterator.nextDirectPosition(dp)
wkt << dp.getX() << ', ' << dp.getY() << ','
}
}
wkt.setCharAt(wkt.size() - 1, (char)')')
}
wkt << ')'
data['WKT'] = wkt.toString()
- Conecta cada etapa de transformación WKT a su propia etapa Write to File.
El flujo de datos final tiene la siguiente apariencia: