В таких случаях возьмите бумагу и ручку и запишите, что вам нужно (вход) и что вы ожидаете (выход) для КАЖДОГО задействованного шага.
Существует ошибка почти в каждом предположении made.
1) Geography
- это не то же самое, что Geometry
. В то время как оба используют WGS84 4326 CRS, первое устройство указывается в метрах, а второе - в градусах. В первом используются дуги большого круга, а в последнем используются прямые линии для соединения двух точек (вычисление расстояний, пересечение и т. Д. c сильно затронуты на больших расстояниях)
2) Вы говорите, что ваши данные находятся в CRS 2263 (Нью-Йорк Лонг-Айленд (ftUS)), который имеет следующие границы:
WGS84 Границы: -74.2700, 40.4700, -71.7500, 41.3100
Прогнозируемые границы: 909126.0155, 110626.2880 , 1610215.3590, 424498.0529
Отображаемые вами координаты находятся не в этом CRS, а, скорее всего, в WGS84.
Давайте проверим это предположение: если мы (ошибочно) предположим, что координаты, которые вы предоставили в 2263 году, что произойдет, если мы спроецируем их на 4326?
select st_asText(st_transform(st_geomFromEWKT('SRID=2263;POINT (-73.73891083685496 40.59593727361931)'),4326));
st_astext
------------------------------------------
POINT(-77.5198536012811 40.112488506058)
Корзина go, это результат, который вы получаете.
==> Сначала исправьте используемый CRS или координаты. Один из них неверен.
Но даже если бы у вас был правильный CRS, запрос не работал бы так, как предполагалось.
Вы говорите, что хотите: 1) изменить точку на географию, 2 ) буферизуйте его на 60 метров, 3) конвертируйте обратно в исходный CRS.
То, что вы сделали, было 1) измените точку на 2263 (она уже в CRS, она не имеет никакого эффекта) 2) буфер на 60 футов 3) преобразовать в WGS84 (геометрия)
Чтобы достичь того, что вы описали, скорее всего:
SELECT ST_Transform(
ST_Buffer(
ST_Transform(pt.geom,4326)::geography, -- change to 4326 and cast to geography
60), -- buffer 60 meters
2263) as geom -- change back to original CRS