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

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

как его можно преобразовать в sdo_geometry?
...
Рейтинг: 0 / 0
координаты преобразовать в sdo_geometry
    #39706284
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слона надо есть по частям
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
координаты преобразовать в sdo_geometry
    #39706285
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle Doc JSON_TABLE


Примеры в конце
...
Рейтинг: 0 / 0
координаты преобразовать в sdo_geometry
    #39706287
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
координаты преобразовать в sdo_geometry
    #39706385
L_Kira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
А если в результате должен получить один объект sdo_geometry с набором координат и параметров представляющих собой полигон?
...
Рейтинг: 0 / 0
координаты преобразовать в sdo_geometry
    #39707306
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
координаты преобразовать в sdo_geometry
    #39707357
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnin
Код: plsql
1.
2.
N'POLIGON'
N'POLYGON' 
...
Рейтинг: 0 / 0
координаты преобразовать в sdo_geometry
    #39707393
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnin
Код: plsql
1.
SDO_GEOMETRY(N'POLYGON((1 1,1 2,2 2,2 1))')

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

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


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