Я пытаюсь экстраполировать от отрезка линии, чтобы найти точку на линии, но на треть пути назад, т.е. пытаюсь найти точку new
, заданные точки A
и B
ниже:
Учитывая строку, я могу интерполировать ее, чтобы получить позицию с любым конкретным процентом вдоль нее:
=# select st_line_interpolate_point(
st_makeline('0101000020E6100000300DC347C49418C03EE8D9ACFAA44A40',
'0101000020E6100000FB743C66A03218C0CDCCCCCCCC7C4A40'),
0.333);
0101000020E6100000ED45B41D537718C069C6A2E9EC984A40
Я попытался ввести отрицательное число, чтобы найти точку вдоль линии в противоположном направлении, но это не удалось, поскольку аргумент интерполяции должен находиться в диапазоне [0, 1]
Я подумал о том, чтобы сначала масштабировать линию, но она не использует центр линии как источник, поэтому бесполезен для моих целей.
источник
Решили это с:
Объяснение:
(2-d) Масштабируйте начальную точку с коэффициентом 1,3333, взяв среднюю точку отрезка в качестве исходной точки для масштабирования.
Убирайся из миллиметровки!
http://en.wikipedia.org/wiki/Affine_transformation
источник
Я написал функцию для этого:
Использование:
Обратите внимание, что это дает более длинную линейную строку, но не конечную точку.
Код на GitHub Gist (если вы проголосуете здесь, я бы тоже оценил звезду)
Описание параметров (если вы пропустили их в комментарии функции sql):
источник
original_length * head_rate + head_constant
. Если вы хотите, чтобы он удвоился, то скорость головы равна 2, константа равна 0. Мы в Венгрии обычно используем проекцию EOV, основанную на метре. Поэтому, если я хочу добавить 2 метра в конец линии, я устанавливаю tail: rate равным 1, а tail_constant равным 2.