Я полагаю, что NiFi не знает, как обрабатывать любые типы объектов, определенные в реляционных базах данных. И, очевидно, гораздо меньше понимания сложных типов, таких как пространственные типы. Даже если бы он понимал типы объектов, вы бы остались с чем-то сложным в использовании, так как это открыло бы внутреннюю часть типа, и вам потребуется глубокая проверка руководств Oracle, чтобы декодировать контент, чтобы использовать информацию.
Самым простым определенно является получение пространственных типов в сериализованной строковой или двоичной нотации. У вас есть выбор между несколькими нотациями и двумя способами их получения:
Использование методов типа объекта:
Важно: обратите внимание, что вы должны использовать псевдоним таблицы для вызова методов объекта!
WKT:
SQL> select c.location.get_wkt() from us_cities c where city='New York';
C.LOCATION.GET_WKT()
-------------------------------------------------------------------------------
POINT (-73.943849 40.6698)
1 row selected.
GML:
SQL> select c.location.get_gml() from us_cities c where city='New York';
C.LOCATION.GET_GML()
-------------------------------------------------------------------------------
<gml:Point srsName="EPSG:4326" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-73.943849,40.6698 </gml:coordinates></gml:Point>
1 row selected.
GeoJSON:
SQL> select c.location.get_geojson() from us_cities c where city='New York';
C.LOCATION.GET_GEOJSON()
-------------------------------------------------------------------------------
{ "type": "Point", "coordinates": [-73.943849, 40.6698] }
1 row selected.
Использование функций:
WKT
SQL> select sdo_util.to_wktgeometry(location) from us_cities c where city='New York';
SDO_UTIL.TO_WKTGEOMETRY(LOCATION)
-------------------------------------------------------------------------------
POINT (-73.943849 40.6698)
1 row selected.
GML
SQL> select sdo_util.to_gmlgeometry(location) from us_cities c where city='New York';
SDO_UTIL.TO_GMLGEOMETRY(LOCATION)
-------------------------------------------------------------------------------
<gml:Point srsName="EPSG:4326" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-73.943849,40.6698 </gml:coordinates></gml:Point>
1 row selected.
GeoJSON
SQL> select sdo_util.to_geojson(location) from us_cities c where city='New York';
SDO_UTIL.TO_GEOJSON(LOCATION)
-------------------------------------------------------------------------------
{ "type": "Point", "coordinates": [-73.943849, 40.6698] }
1 row selected.
В этих примерах я показываю только очки. Геометрии, конечно, могут быть более сложными: линии, мульти-линии, полигоны, мульти-полигоны, полигоны с пустотами. Также 3D-структуры: поверхности и твердые тела ...
Для тех геометрий, которые являются точками, вы можете просто извлечь координаты X и Y прямо из объектов. Еще раз обратите внимание на использование псевдонимов.
select city, c.location.sdo_point.x longitude, c.location.sdo_point.y latitude
from us_cities c;
CITY LONGITUDE LATITUDE
------------------------------ ---------- ----------
New York -73.943849 40.6698
Los Angeles -118.4112 34.112101
....
Sioux Falls -96.7301 43.544201
Simi Valley -118.7513 34.26305
195 rows selected.
Для других геометрий (линий и т. Д.) Вам необходимо пройти через сериализацию текста.
person
Albert Godfrind
schedule
26.10.2018