Столько вопросов...
Что значит as polysnapped, as foo?
Это псевдонимы, используемые для доступа. В частности, polysnapped — это псевдоним (новое имя) для поля, определяемого выражением
ST_AsText(ST_Snap(...))
foo — псевдоним (новое имя) для подзапроса
SELECT
ST_GeomFromText('...') As poly,
ST_GeomFromText('...') As line
То есть фактически твой запрос возвращает поле polysnapped из таблицы (виртуальной) foo. Само имя foo никак не используется, но его указание требуется синтаксисом.
Как мне привязать например, вместо линии, другой полигон?
В запросе для foo указать вместо линии другой полигон (я переименовал поля для наглядности):
SELECT ST_AsText( ST_Snap(poly1, poly2, ST_Distance(poly1, poly2) * 10) ) AS polysnapped
FROM (SELECT
ST_GeomFromText('POLYGON(...)') As poly1,
ST_GeomFromText('POLYGON(...)') As poly2
) AS foo
Почему он мне возвращает тот же полигон без привязки линии?
Ну так в документации же сказано: «If no snapping occurs then the input geometry is returned unchanged». А вот почему no snapping occurs, можно только предполагать. Скорее всего, как опять же сказано в документации, «Too much snapping can result in invalid topology being created... This can result in some potential snaps being omitted». А вот это too much snapping вполне могло произойти от *10 в твоей привязке, в то время как в примерах *1.01 и * 1.25. Как говорится, почувствуйте разницу.
Что за параметры передаются в скобках? я так понимаю, первый - основной полигон, второй - линия, полигон, который я хочу привязать, третий - это радиус который учитывается при привязке?
Да. Сперва из форматированного текста функция ST_GeomFromText создаёт объекты, которые затем предаются в функцию ST_Snap.
Еще вопрос, может, вы поможете.
Я использую эту функцию чтобы получить одну общую сплошную границу, между полигонами, но получается абсолютно не то.
Вот пример, 2 полигона, хочу чтобы их границы соединились, но чтобы не получился один сплошной полигон:
Хочу добиться вот такого эффекта, именно так будут выглядеть границы моих полигонов:
было:
Немного не так.
Первый параметр — то, что привязывается, то есть обрабатываемая геометрия. В результате привязки она может (и должна, вообще-то) измениться.
Второй параметр — то, к чему привязывается, вершины этой геометрии служат в качестве сетки. В результате привязки она не изменяется.
Третий параметр — расстояние, на котором для элементов обрабатываемой геометрии (первый параметр) видны потенциальные узлы привязки или, иначе, на какое расстояние могут перемещаться элементы обрабатываемой геометрии.
Дело в том, что данном конкретном случае линия и многоугольник пересекаются, то есть расстояние между ними равно нулю. Если ноль умножить на что угодно, всё равно получится ноль, то есть третий параметр (расстояние привязки) равен нулю, а это как раз и приводит к неизменности обрабатываемой геометрии.
В таком случае вместо лучше использовать то есть вычислять расстояние строго по вершинам, без учёта рёбер.
Судя по результату, ты задаёшь слишком большое расстояние привязки.
В POLYGON((...)) вместо многоточий надо поставить свои координаты.
Множители подбирал на глазок по твоей карте.