Преобразование пространственной геометрии Oracle дает неверный результат

#oracle #spatial-query #oracle-spatial

#Oracle #пространственный запрос #oracle-spatial

Вопрос:

Я пытаюсь преобразовать SRID из 2180 в 2177. Это мой пример кода.

 SELECT SDO_CS.TRANSFORM(MDSYS.SDO_GEOMETRY(2002,2180,null,MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),MDSYS.SDO_ORDINATE_ARRAY(461273,290199996,608231,546195962,461280,489099996,608185,353195948)),2177) geometria FROM DUAL
 

Результат есть MDSYS.SDO_ORDINATE_ARRAY(6374994,33906775,295683316,187577,6638854,92398028,551837709,962805,6387072,01129964,494707234,588496,6717195,04670803,358718858,239292)
, но когда я использую онлайн-конвертер, он выглядит так (правильное значение):
6527855.83,5911838.68 6527863.20 5911792.21

Что я делаю не так?

Ответ №1:

Я думаю, что причина тривиальна, вы использовали , вместо . при разделении десятичных частей. Со мной это тоже иногда случается 😉

 select sdo_cs.transform(
         mdsys.sdo_geometry(2002,2180,null,mdsys.sdo_elem_info_array(1,2,1),
                            mdsys.sdo_ordinate_array(461273.290199996,
                                                     608231.546195962,
                                                     461280.489099996,
                                                     608185.353195948)),
                            2177) geometria 
  from dual
 

Результат:

 6527855.83374364
5911838.68338696
6527863.68346768
5911792.56737736
 

Комментарии:

1. Спасибо! Я не знаю, почему кто-то разделил каждое значение запятой в коде, над которым я работаю, вместо того, чтобы преобразовывать координаты в десятичные и помещать их в массив. Ошибка не была видна, потому что при отладке в VS2017 вместо точек отображаются запятые, даже сейчас, когда все работает нормально.