Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / координаты преобразовать в sdo_geometry / 9 сообщений из 9, страница 1 из 1
21.09.2018, 17:58
    #39706246
L_Kira
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
координаты преобразовать в sdo_geometry
Здравствуйте
есть json с координатами следующего вида

"coordinates": [
[
[
49.7798774,
51.8828385
],
[
49.7794911,
51.882802
],
[
49.7793302,
51.8827822
],
..............................

как его можно преобразовать в sdo_geometry?
...
Рейтинг: 0 / 0
21.09.2018, 20:24
    #39706284
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
координаты преобразовать в sdo_geometry
Слона надо есть по частям
json -> table
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
with  coords (jsn) as (
select '{
"coordinates": [
[49.7798774,51.8828385],
[49.7794911,51.882802],
[49.7793302,51.8827822]
]
}' from dual
)
select cc.x, cc.y  from coords
, json_table(
    jsn,'$'
    COLUMNS NESTED PATH '$.coordinates[*]'
    COLUMNS (
      X number path '$[0]'
     ,Y number path '$[1]'
      )) as cc
;

         X          Y
---------- ----------
49.7798774 51.8828385
49.7794911  51.882802
49.7793302 51.8827822



Далее, легким движением руки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
with  coords (jsn) as (
select '{
"coordinates": [
[49.7798774,51.8828385],
[49.7794911,51.882802],
[49.7793302,51.8827822]
]
}' from dual
)
,  xy ( x,y) as (
select cc.x, cc.y  from coords
, json_table(
    jsn,'$'
    COLUMNS NESTED PATH '$.coordinates[*]'
    COLUMNS (
      X number path '$[0]'
     ,Y number path '$[1]'
      )) as cc
)

select MDSYS.SDO_GEOMETRY(2001,8265,SDO_POINT_TYPE(x,y,null),null,null) as obj from xy;

OBJ
------------------------------------------------------------------------------------------------------------------------------------------------------
SDO_GEOMETRY(2001, 8265, SDO_POINT_TYPE(49.7798774, 51.8828385, NULL), NULL, NULL)
SDO_GEOMETRY(2001, 8265, SDO_POINT_TYPE(49.7794911, 51.882802, NULL), NULL, NULL)
SDO_GEOMETRY(2001, 8265, SDO_POINT_TYPE(49.7793302, 51.8827822, NULL), NULL, NULL)
...
Рейтинг: 0 / 0
21.09.2018, 20:27
    #39706285
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
координаты преобразовать в sdo_geometry
Oracle Doc JSON_TABLE


Примеры в конце
...
Рейтинг: 0 / 0
21.09.2018, 20:37
    #39706287
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
координаты преобразовать в sdo_geometry
Vadim LejninПримеры в конце

Ну а пример в начале должен быть:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> select  version
  2    from  v$instance
  3  /

VERSION
-----------------
12.2.0.1.0

SQL> 



А если ниже то через что-то типа PLJSON.

SY.
...
Рейтинг: 0 / 0
22.09.2018, 09:32
    #39706385
L_Kira
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
координаты преобразовать в sdo_geometry
Спасибо
А если в результате должен получить один объект sdo_geometry с набором координат и параметров представляющих собой полигон?
...
Рейтинг: 0 / 0
24.09.2018, 21:26
    #39707306
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
координаты преобразовать в sdo_geometry
L_Kira,

Как-так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
with  coords (jsn) as (
select '{
"coordinates": [
[1.0,1,0],
[1.0,2.0],
[2.0,2.0],
[2.0,1.0]
]
}' from dual
)
,  xy ( a, b, x,y) as (
select cc.row_number as a, cc.row_number+1 as b, cc.x, cc.y  from coords
, json_table(
    jsn,'$'
    COLUMNS 
    NESTED PATH '$.coordinates[*]'
    COLUMNS (
      row_number for ordinality
     ,X number path '$[0]'
     ,Y number path '$[1]'
      )) as cc
)
, ords(wkt) as (
select 'POLIGON(('||replace(ltrim(sys_connect_by_path(pair,'X'),'X'),'X',',')||'))' as wkt  
from (
select 
a
,x||' '||y as pair
, count(*) over () cnt
from xy
)
where a = cnt
start with a  = 1
connect by a = PRIOR a + 1
)
select 
wkt
--,SDO_GEOMETRY(wkt) as OBJ
FROM ORDS



но ...
наткнулся на непонятку
WKT вроде сформировал правильно, но конструктор ругается на неправильный WKT


Вот пример,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t(s) as (select N'POLIGON((1 1,1 2,2 2,2 1))' from dual)
select 
s
-- ,sdo_geometry(s) 
,SDO_GEOMETRY(N'POLYGON((1 1,1 2,2 2,2 1))') as o1 
from t
;



Строка генерирует wkt правильно, а вот такое же значение колонки вываливает ошибку.
снять комментарий со строки ",sdo_geometry(s) "

разбираться сейчас не буду, пора домой :)
может посмотрю завтра
...
Рейтинг: 0 / 0
25.09.2018, 01:47
    #39707357
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
координаты преобразовать в sdo_geometry
Vadim Lejnin
Код: plsql
1.
2.
N'POLIGON'
N'POLYGON' 
...
Рейтинг: 0 / 0
25.09.2018, 07:35
    #39707393
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
координаты преобразовать в sdo_geometry
Vadim Lejnin
Код: plsql
1.
SDO_GEOMETRY(N'POLYGON((1 1,1 2,2 2,2 1))')

Занакуя?
...
Рейтинг: 0 / 0
25.09.2018, 12:57
    #39707622
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
координаты преобразовать в sdo_geometry
andrey_anonymous, elic

Ага спасиб, в конце дня глаз замылился напроч
nvarchar , это я порядке бреда пытался подставить
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / координаты преобразовать в sdo_geometry / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]