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

Подскажите пожалуйста как сделать 30-ти сантиметровый буфер точки? Уже и документацию читал все равно не могу разобраться в этих коэффициентах.

Код: sql
1.
sdo_buffer(/* геометрия точки */, 0.02, 0.3)
...
Рейтинг: 0 / 0
Построить буфер точке
    #39515503
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще хочу понять как работать с Relate. В примере реализована работа с одним объектом точного слоя. Просто один объект исходная точка, а второй буфер из исходной точки. Не понимаю почему возвращается FALSE

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH BUFF AS (select /*+ ALL_ROWS */
                  T.Id,
                  m.sdo_diminfo,
                  mdsys.sdo_geom.sdo_buffer(T.gdo_geometry, m.sdo_diminfo, 0.3, 'unit=meter') gdo_geometry
             from geo.TEST T, mdsys.SDO_GEOM_METADATA_TABLE m
            where T.Id = 100
              and m.sdo_table_name = 'TEST' 
              and m.sdo_owner = 'GEO')

SELECT BUFF.Id
       ,(select mdsys.sdo_geom.relate(BUFF.gdo_geometry, BUFF.sdo_diminfo, 'mask=contains', C.gdo_geometry, BUFF.sdo_diminfo) from geo.TEST C where C.Id = BUFF.Id) R01
  FROM BUFF
...
Рейтинг: 0 / 0
Построить буфер точке
    #39516067
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nechto,

А что возвращает если в запрос подставить

Код: plsql
1.
   (select mdsys.sdo_geom.relate(BUFF.gdo_geometry, BUFF.sdo_diminfo, 'mask=DETERMINE', C.geometry2, BUFF.sdo_diminfo)
...
Рейтинг: 0 / 0
Построить буфер точке
    #39516403
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoПросто один объект исходная точка, а второй буфер из исходной точки. Не понимаю почему возвращается FALSE
Точно сказать не могу, но что у Вас в diminfo - лежит ли точка в границах и не превышает ли точность Ваши 0.3 метра?
...
Рейтинг: 0 / 0
Построить буфер точке
    #39517911
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorSmNechto,
А что возвращает если в запрос подставить
Код: plsql
1.
   (select mdsys.sdo_geom.relate(BUFF.gdo_geometry, BUFF.sdo_diminfo, 'mask=DETERMINE', C.geometry2, BUFF.sdo_diminfo)



Поставил 'mask=DETERMINE', вернуло 'DISJOINT'

Сергей Арсеньев Точно сказать не могу, но что у Вас в diminfo - лежит ли точка в границах и не превышает ли точность Ваши 0.3 метра?


В DIMINFO у меня следующее
Код: plaintext
1.
2.
3.
sdo_dimname   sdo_lb   sdo_ub    sdo_tolerance
X             0        180       0.05
Y             0        90        0.05
...
Рейтинг: 0 / 0
Построить буфер точке
    #39517921
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то tolerance для градусов слишком большой.
...
Рейтинг: 0 / 0
Построить буфер точке
    #39518462
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander RyndinЧто-то tolerance для градусов слишком большой.
+1


ну как и следовало ожидать ...
либо границы для метров маленькие, либо 0.05 градуса это маловато для 0.3 метра
...
Рейтинг: 0 / 0
Построить буфер точке
    #39518546
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм, с градусной системой давно дел не имел.
Но думал, что толеранс указывается в в метрах
https://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_intro.htm#SPATL450

For geodetic data (such as data identified by longitude and latitude coordinates), the tolerance value is a number of meters. For example, a tolerance value of 100 indicates a tolerance of 100 meters. The tolerance value for geodetic data should not be smaller than 0.05 (5 centimeters), and in most cases it should be larger. Spatial uses 0.05 as the tolerance value for geodetic data if you specify a smaller value with the following functions: SDO_GEOM.RELATE, SDO_GEOM.SDO_DIFFERENCE, SDO_GEOM.SDO_INTERSECTION, SDO_GEOM.SDO_UNION, and SDO_GEOM.SDO_XOR; for other functions, Spatial uses the smaller tolerance value that you specify.
...
Рейтинг: 0 / 0
Построить буфер точке
    #39518571
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и для sdo_buffer при использовании градусов (geodetic data) рекомендуется указывать arc_tolerance.
Цитаты
For example: 'unit=km arc_tolerance=0.05'
If the input geometry is geodetic data, this parameter is required, and arc_tolerance must be specified.
...
If the input geometry is geodetic data and if arc_tolerance is not specified, the default value is the tolerance value multiplied by 20

https://docs.oracle.com/database/121/SPATL/sdo_geom-sdo_buffer.htm#SPATL1111
...
Рейтинг: 0 / 0
Построить буфер точке
    #39518962
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевAlexander RyndinЧто-то tolerance для градусов слишком большой.
+1
ну как и следовало ожидать ...
либо границы для метров маленькие, либо 0.05 градуса это маловато для 0.3 метра

Подскажите пожалуйста, что нужно подставить чтобы результат появился? А то я не совсем понимаю эту точность в градусах.
...
Рейтинг: 0 / 0
Построить буфер точке
    #39519023
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoПодскажите пожалуйста, что нужно подставить чтобы результат появился? А то я не совсем понимаю эту точность в градусах.
А что возвращает
Код: plsql
1.
2.
BUFF.Id
       ,(select mdsys.sdo_geom.relate(BUFF.gdo_geometry, 'mask=contains', C.gdo_geometry, 1e-8) from geo.TEST C where C.Id = BUFF.Id) R01

?
...
Рейтинг: 0 / 0
Построить буфер точке
    #39519088
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевNechtoПодскажите пожалуйста, что нужно подставить чтобы результат появился? А то я не совсем понимаю эту точность в градусах.
А что возвращает
Код: plsql
1.
2.
BUFF.Id
       ,(select mdsys.sdo_geom.relate(BUFF.gdo_geometry, 'mask=contains', C.gdo_geometry, 1e-8) from geo.TEST C where C.Id = BUFF.Id) R01

?

FALSE
...
Рейтинг: 0 / 0
Построить буфер точке
    #39519164
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto,

а геометрии привести можешь?

BUFF.gdo_geometry
и
C.gdo_geometry

в виде mdsys.sdo_geometry(...)
...
Рейтинг: 0 / 0
Построить буфер точке
    #39519191
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
+1
пример
Код: plsql
1.
2.
3.
4.
5.
6.
  WITH BUFF AS (select /*+ ALL_ROWS */
 SDO_GEOMETRY(2001, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(34.73333333, 43.93333333)) AS geom ,
 mdsys.sdo_geom.sdo_buffer(SDO_GEOMETRY(2001, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(34.73333333, 43.93333333)), 0.3 ,0.05, 'unit=meter') BF
  FROM dual)
  select   (mdsys.sdo_geom.relate(BF, 'mask=contains', geom, 0.05 ))FF 
  from buff



Кстати, возвращается
MASK=CONTAINS
...
Рейтинг: 0 / 0
Построить буфер точке
    #39519325
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorSm,

Так по документации:
авторThe SDO_GEOM.RELATE function can return the following types of answers:

If you pass a mask listing one or more relationships, the function returns the specified mask value if one or more of the relationships are true for the pair of geometries. If all relationships are false, the procedure returns FALSE.
...
Рейтинг: 0 / 0
Построить буфер точке
    #39519359
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев,

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


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