Я использую PostGIS 1.5.2, с геометриями в SRID: 900913. Мне нужно создать круги, используя список точек в качестве центра, с радиусом 600 километров. Я использую этот запрос:
INSERT INTO circles (geom) (
SELECT ST_Buffer(point, 600000, 'quad_segs=8')
FROM points
);
Но созданные круги имеют радиус не 600 километров (радиус близок к этой длине, но не совсем).
Существуют ли другие способы создания кругов в PostGIS?
ПРИМЕЧАНИЕ: информация представлена из Испании. Правильный прогноз - 4326, но клиент использует растры Google, поэтому я храню данные в 900913, чтобы избежать репроекций и повысить производительность.
postgis
postgis-1.5
angelcervera
источник
источник
SELECT ST_Distance( (select point from points where id = 7), (select point from points where id = 42));
return более 100 км разницы, уважайте gmap-pedometer.com, но если я считаю эту длину правильной, радиус окружности будет идеальным. Но люди используют первое расстояние как радиус, а не расстояние, возвращаемое st_distance. Возможно ли преобразовать первое расстояние во второе?Ответы:
Попробуй это:
Это переворачивает географию, затем использует встроенный выбор SRID, чтобы (по иронии судьбы) перевернуть обратно в геометрию, где запускается хороший плоский буфер, а затем переворачивается обратно. Проблема с вашим подходом в Mercator заключается в том, что Mercator не сохраняет расстояние. Использование более подходящей локальной проекции дает лучшие результаты, и это то, что происходит в вышеупомянутом методе.
источник
Вы можете увеличить значение quad_seg, чтобы получить более точный круг. Чтобы получить реальный круг, вы должны работать с криволинейным типом геометрии, но я не знаю, какое программное обеспечение может это показать.
Точность srid 90013 также очень плохая, поскольку это проекция, охватывающая весь мир.
Вы получите более точный результат с локальной проекцией.
источник
Это зависит от того, где создаются ваши круги. Они возле экватора или ближе к полюсам?
Посмотрите на эту карту . Как вы думаете, Антарктида или Гренландия действительно такие большие? Это проекция, которую вы используете, верно?
Я бы порекомендовал вам быстро прочитать этот документ USGS о прогнозах , в частности, приведенную ниже таблицу, которая дает вам краткое представление о том, какие прогнозы хороши для чего.
И после всего этого, я думаю, я должен наконец ответить на ваш вопрос :)
Никлас сказал, что это хороший совет. Есть ли конкретный прогноз для вашего района, который будет работать лучше?
В противном случае вы можете захотеть взглянуть на новый тип географии PostGIS . Тем не менее, наиболее подходящий ответ зависит от того, где находятся ваши данные.
ОБНОВЛЕНИЕ: Поскольку теперь мы знаем, что ваши данные находятся в Испании, вы рассматривали возможность их хранения в локальной проекции, такой как UTM Zone 31N , выполнения ваших операций с их использованием, а затем проецирования их обратно в Google Web Mercator?
источник
Вы можете использовать новый тип геометрии SQL / MM Part 3 CIRCULARSTRING и / или CURVEPOLYGON.
Однако следует помнить, что поддержка этого типа ограничена как внутренними функциями, так и внешними программами. Вы можете использовать ST_CurveToLine, чтобы помочь визуализировать это.
Кроме того, это немного отталкивает (начиная с PostGIS 2.0 svn), что
SELECT ST_Area('CURVEPOLYGON(CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1))'::geometry)
является лишь приблизительным приближением к π . (Сравните 3,14033115695475 с 3,14159265358979 отpi()
).источник