Как получить координаты ограничительной рамки на определенном расстоянии от точки в postGIS? - PullRequest
0 голосов
/ 02 мая 2020

Моя цель - определить ограничивающий прямоугольник круга заданного радиуса, построенного вокруг точки в postGIS.

Точка, экстент в порядке, но когда я делаю это:

select ST_AsGeoJSON( st_extent( st_buffer( ST_SetSRID(ST_MakePoint(11.0120, 49.5897), 4326), 6000 ) ) );

Я получаю

{"type":"Polygon","coordinates":[[[-5988.988,-5950.4103],
                                  [-5988.988,6049.5897],
                                  [6011.012,6049.5897],
                                  [6011.012,-5950.4103],
                                  [-5988.988,-5950.4103]]]}

, когда ожидал что-то вроде (

{"type":"Polygon","coordinates":[[[10.929017, 49.535753],
                                 [10.929017, 49.643646],
                                 [11.094983, 49.643646],
                                 [11.094983, 49.535753],
                                 [10.929017, 49.535753]]]}

(ручной Geo JSON - может содержать ошибки)

Итак - как заставить postGIS SQL выводить географические координаты вместо того, что выглядит как геометрия?

1 Ответ

1 голос
/ 02 мая 2020

Если геометрия передана в ST_Buffer, то второй аргумент - градусы, а не метры. Чтобы использовать метры для второго аргумента, приведите первый аргумент к географии. Затем приведите его обратно к геометрии для использования с экстентом:

select
  ST_AsGeoJSON(
    st_extent(
      st_buffer(
        ST_SetSRID(
          ST_MakePoint(11.0120, 49.5897),
          4326
        )::geography,
        6000
      )::geometry
    )
  );
...