Как уменьшить точность координат в geojson?

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
aVadim
Новоприбывший
Сообщения: 3
Зарегистрирован: 18 янв 2017, 14:42
Репутация: 0

Как уменьшить точность координат в geojson?

Сообщение aVadim » 25 янв 2017, 13:56

Есть несколько наборов координат в формате geojson, которые задают границы нескольких смежных территорий. Эти наборы выводятся на Гугл-карте. Массивы координат большие, точность излишне высокая для используемого кейса.

Координаты идут в таком виде: [38.7251026,45.0403592],[38.7273894,45.0408335],[38.7304689,45.0418444], т.е. семь знаков после запятой.

Собственно, вопрос: как уменьшить точность координат в geojson, чтобы уменьшить общий размер данных? Наверняка есть какие-то методики, чтобы можно было это сделать программно - на входе 10 тыс координат, на выходе - тысяча.

Тут правда, побочный эффект может возникнуть - т.к. отрисовываются границы смежных территорий, и при огрублении границы могут "расползтись". Поэтому если есть методики "огрубления", при которых можно это учесть - вообще классно будет.

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: Как уменьшить точность координат в geojson?

Сообщение freeExec » 25 янв 2017, 14:55

http://gis-lab.info/qa/ogr2ogr-examples ... 0.B8.D1.8F
Но по моему это экономия на спичках. А в средних широтах четвёртый знак это десяток метров.

aVadim
Новоприбывший
Сообщения: 3
Зарегистрирован: 18 янв 2017, 14:42
Репутация: 0

Re: Как уменьшить точность координат в geojson?

Сообщение aVadim » 25 янв 2017, 16:12

Почему же экономия на спичках? Мож, я чего-то не догоняю, но я так понимаю, что если отбросить некоторое количество знаков, то получится, что некоторые координаты повторяются подряд, и эти повторяющиеся координаты тоже будут отброшены.

Например, если было:
[38.7251026,45.0403592],[38.7251494,45.0403835],[38.7304689,45.0418444]

То будет так:
[38.7251,45.0404],[38.7305,45.0418]

Т.е. две первые координаты будут в одну слиты. Или нет, и число точек останется то же?

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: Как уменьшить точность координат в geojson?

Сообщение freeExec » 25 янв 2017, 16:14

Можно и так, там есть настройка выкинуть точки ближе чем Х от предыдущей.

Аминодов-Борисов
Активный участник
Сообщения: 153
Зарегистрирован: 02 авг 2014, 18:29
Репутация: 24
Откуда: Москва

Re: Как уменьшить точность координат в geojson?

Сообщение Аминодов-Борисов » 26 янв 2017, 09:09

aVadim писал(а):Почему же экономия на спичках? Мож, я чего-то не догоняю, но я так понимаю, что если отбросить некоторое количество знаков, то получится, что некоторые координаты повторяются подряд, и эти повторяющиеся координаты тоже будут отброшены.

Например, если было:
[38.7251026,45.0403592],[38.7251494,45.0403835],[38.7304689,45.0418444]

То будет так:
[38.7251,45.0404],[38.7305,45.0418]

Т.е. две первые координаты будут в одну слиты. Или нет, и число точек останется то же?
Прежде всего, что именно вам нужно? Либо понижение точности координат (то есть, сокращение количества цифр после запятой), либо прореживание массива точек — своего рода генерализация.
Или, может быть, и того, и другого, и можно без хлеба? :)
Последний раз редактировалось Аминодов-Борисов 26 янв 2017, 09:15, всего редактировалось 1 раз.

Аминодов-Борисов
Активный участник
Сообщения: 153
Зарегистрирован: 02 авг 2014, 18:29
Репутация: 24
Откуда: Москва

Re: Как уменьшить точность координат в geojson?

Сообщение Аминодов-Борисов » 26 янв 2017, 09:15

В Питоне, если что, есть функция round(old_number, ndigits), где число old_number округляется до ndigits цифр после запятой. Так что можно какую-то приблуду написать, которая берёт GeoJSON и округляет там все координаты. Они как раз в формате float хранятся.

aVadim
Новоприбывший
Сообщения: 3
Зарегистрирован: 18 янв 2017, 14:42
Репутация: 0

Re: Как уменьшить точность координат в geojson?

Сообщение aVadim » 26 янв 2017, 13:10

Алексей Борисов писал(а):Прежде всего, что именно вам нужно? Либо понижение точности координат (то есть, сокращение количества цифр после запятой), либо прореживание массива точек — своего рода генерализация.
Или, может быть, и того, и другого, и можно без хлеба? :)
Конечная задача - более быстрая загрузка json-файла и более быстрая его отрисовка на карте. Для этого хотелось выполнить генерализацию (ага, щас я уже знаю, что это так называется). Мне почему-то казалось, что это должно по какой-то хитрой методике делаться (там же все эти проекции хитрые и вот это все).

Как оказалось для моих задач вполне подходит такая метода:
1) делается округление координат до нужной точности
2) повторяющиеся подряд одинаковые координаты выбрасываются

И так за счет уменьшения общего числа знаков в координатах и за счет уменьшения числа точек объем файла может быть уменьшен раза в два без потери качества при отрисовке на карте.

Всем спасибо за советы!

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: Как уменьшить точность координат в geojson?

Сообщение freeExec » 26 янв 2017, 14:59

Тогда стоит глянуть в сторону TopoJson

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot] и 32 гостя