Добрый день!
Требуется решить задачу: разбиение полилинии на 1000 м участки в равноугольной конической проекции Ламберта, система координат WGS-84. Задача усложняется тем, что полилиния состоит не только из прямых отрезков, но и из дуг различной длины.
Ни в MapInfo, ни в ArcInfo не смогла найти решение. Быть может, чего-то не знаю? Или есть какое-то другое ПО для решения подобной задачи?
Впоследствии может потребоваться обратная задача - определение дистанции от начала полилинии до перпендикуляра к точке с известными координатами.
Разбивка полилинии через равные промежутки в Ламберте
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 17 авг 2009, 20:36
- Репутация: 0
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Разбивка полилинии через равные промежутки в Ламберте
Прямая задача решается в MapInfo путем среднесложнго программирования. Способ проецирования данных, на мой взгляд, никак не связан с проекцией - данные уже переведены в плоскость. На сколько точно это произошло - это уже вопрос к выбранной проекции (системе координат по MapInfo'шному). Программа для разбивки полилинии приводилась мной на форуме MapInfo. У меня на компьютере она работала, у многих - нет.
Но это не меняет принципа построения алгоритма - получаем отдельные отрезки полилинии и суммируем их пока конец отрезка не даст превышение требуемой длины. После этого рассчитываем точку от начала этого последнего отрезка. Дуги придется превратить в полилинии с выбранным шагом аппроксимации. Кроме того придеться решить задачу, что является линией для полилиии, состоящей из множества простейших полиний - деревьев, кустов, звезд и т.п.
Но это не меняет принципа построения алгоритма - получаем отдельные отрезки полилинии и суммируем их пока конец отрезка не даст превышение требуемой длины. После этого рассчитываем точку от начала этого последнего отрезка. Дуги придется превратить в полилинии с выбранным шагом аппроксимации. Кроме того придеться решить задачу, что является линией для полилиии, состоящей из множества простейших полиний - деревьев, кустов, звезд и т.п.
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 17 авг 2009, 20:36
- Репутация: 0
Re: Разбивка полилинии через равные промежутки в Ламберте
Не совсем верно.
Мне нужна разбивка не через плановые 1000 м (на плоскости), а через географические, то есть на сфероиде. Поэтому критично, что тут Ламберт. Масштабные коэффициенты разнятся и нельзя сказать, что плановые 999.6 м равны 1000 м на сфероиде, как в Меркаторе. Понятно, что можно считать вручную, но хотелось бы автоматизированную разбивку. Плюс еще вопрос к точностям. Ваш вариант алгоритма неизбежно приводит к набегающим погрешностям (из-за расчета от предыдущей точки и разбивке дуги на отрезки). При длине полилинии в 100 км, погрешность может составить более 1 км. Критично.
Подобные алгоритмы реаклизованы где-нибудь?
Мне нужна разбивка не через плановые 1000 м (на плоскости), а через географические, то есть на сфероиде. Поэтому критично, что тут Ламберт. Масштабные коэффициенты разнятся и нельзя сказать, что плановые 999.6 м равны 1000 м на сфероиде, как в Меркаторе. Понятно, что можно считать вручную, но хотелось бы автоматизированную разбивку. Плюс еще вопрос к точностям. Ваш вариант алгоритма неизбежно приводит к набегающим погрешностям (из-за расчета от предыдущей точки и разбивке дуги на отрезки). При длине полилинии в 100 км, погрешность может составить более 1 км. Критично.
Подобные алгоритмы реаклизованы где-нибудь?
-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Разбивка полилинии через равные промежутки в Ламберте
если вам нужно считать по дуге на сфероиде, то подобные алгоритмы пишутся на любом языке любым студентом (используя координаты в градусах). В учебнике геодезии можно найти длину дуги и на эллипсоиде. Отдельные энтузиасты считают на геоиде ("шагами по Земле") или на SRTM/GTOPO, это сложнее.Iren Dagoth писал(а):Не совсем верно.
Мне нужна разбивка не через плановые 1000 м (на плоскости), а через географические, то есть на сфероиде. Поэтому критично, что тут Ламберт. Масштабные коэффициенты разнятся и нельзя сказать, что плановые 999.6 м равны 1000 м на сфероиде, как в Меркаторе. Понятно, что можно считать вручную, но хотелось бы автоматизированную разбивку. Плюс еще вопрос к точностям. Ваш вариант алгоритма неизбежно приводит к набегающим погрешностям (из-за расчета от предыдущей точки и разбивке дуги на отрезки). При длине полилинии в 100 км, погрешность может составить более 1 км. Критично.
Подобные алгоритмы реаклизованы где-нибудь?
Машинная ошибка (даже для float) составляет не более 1е-5 (0.001%), алгоритм просто идет по линии, и ставит точки - они в расчете длины не участвуют, поэтому ничего не набегает (систематической ошибки нет, а случайные взаимно компенсируются). Точки вставляются интерполируя Lat/Lon по "большой дуге" пропорционально нужному расстоянию на сегменте.
для расстояния на эллипсоиде можно использовать что-то типа www.epsg.org/guides/G7-2.html, например
1.3.16.1 Modified Azimuthal Equidistant (EPSG dataset coordinate operation method code 9832)
For various islands in Micronesia the US National Geodetic Survey has developed formulae for the oblique form of the ellipsoidal projection which calculates distance from the origin along a normal section rather than the geodesic. For the distances over which these projections are used (under 800km) this modification introduces no significant error.
достаточный для практических целей вариант вычисления длины есть здесь: ссылка, позволяет учесть и среднюю высоту.
Кто сейчас на конференции
Сейчас этот форум просматривают: Semrush [Bot] и 7 гостей