У меня есть большой набор точек данных, которые по существу представляют береговую линию мира. Я не знаю точное разрешение, но я бы сказал, что оно находится в районе 5-10 метров.
Представьте себе набор точек, представляющих зубчатую береговую линию. При разрешении 1 м мы видим все детали и нуждаемся в 50 точках данных для правильного представления побережья, однако при разрешении в 10 км берег выглядит как прямая линия, и нам нужны только 2 точки.
Я пишу картографическое приложение, которое потребует масштабирования данных от разрешений "полной планеты" до разрешений "улиц". Мне нужна помощь в уменьшении разрешения моих точек данных и, следовательно, объема данных для более широкого разрешения.
Я читал о Vector-Tiling и думаю, что это будет лучшим решением (я уже делаю что-то подобное), однако при низких разрешениях мой набор данных по-прежнему огромен, что означает, что его повторная обработка занимает [относительно] длительное время время, когда высокие разрешения бывают быстрыми, потому что «эффективный» набор данных мал (подмножество целого).
Я пытаюсь определить, как взять мой большой набор данных и уменьшить его масштаб, чтобы данные тайлов моего представления «полной планеты» имели приемлемый размер. Как мне создать поднаборы плиток из большего полного набора данных?
Я счастлив использовать инструмент, но я бы предпочел сделать это сам, чтобы узнать, как это делается.
Ответы:
То, как вы решите эту проблему, зависит от конкретного случая и от того, насколько важна для вас реальная топология (а не только время визуализации / рендеринга). Поскольку вашей конечной целью является обобщение береговых линий, вам могут пригодиться некоторые идеи по обобщению.
Один подход использует буферизацию, как показано здесь . У меня тоже была похожая проблема, и я подробно изложил свое решение здесь .
Короче говоря, вы можете использовать отдельные наборы векторных данных (или, по крайней мере, отдельные геометрии), обобщенные для разных уровней. Это решает вашу основную проблему, хотя и не использует плитки, но, конечно, вы можете использовать их, если хотите. Конечно, если вы собираетесь разбить свой набор данных на листы на основе сетки, убедитесь, что сначала обобщили, иначе вы получите пробелы между листами.
источник
Вы должны подготовить различные обобщенные версии вашего набора данных для уровней масштабирования "полная планета" до масштабирования крупным планом.
Классическим алгоритмом обобщения является алгоритм Дугласа-Пекера . Сначала вам нужно будет соединить точки с береговыми линиями, если вы этого еще не сделали.
источник
Вы исследовали Tilemill для производства ваших наборов плиток? Это автоматически уменьшит количество узлов при разных уровнях масштабирования. https://github.com/mapbox/tilemill
источник
Вероятно, не отвечает на ваш вопрос, но он довольно связан - вот как Google кодирует полилинии, включая информацию об обобщении: http://code.google.com/apis/maps/documentation/utilities/polylinealgorithm.html
источник