Я считаю, что ваше отношение разумно.
Выберите ячейки, которые находятся в граничных областях между нулями и единицами (каков наилучший критерий для этого?)
Каждая ячейка имеет 8 сорбирующих клеток (3x3) или 24 сорбирующих клетки (5x5).Если хотя бы одна из 9 или 25 ячеек содержит землю, и хотя бы одна из этих ячеек содержит воду - увеличьте точность для всего блока ячеек (3x3 или 5x5) и повторите запрос.
Когда точностьэто достаточно хорошо - вместо разделения, просто добавьте площадь земли к сумме.
Эффективность
Используйте очередь производителей-потребителей.Создайте n потоков, где n равно числу ядер на вашем компьютере.Все потоки должны выполнять одну и ту же работу:
- Извлечь гео-ячейку из очереди
- Если площадь ячейки все еще велика - разделите ее на ячейки 3x3 или 5x5, чтобыкаждая из разделенных ячеек проверяет сушу / море.Если есть смесь - поставьте в очередь все эти ячейки.Если это только земля: просто добавьте область.только море: ничего не делать.
Для начала просто разделите всю область на ячейки разумного размера и присвойте им все.
Вы также можете оптимизировать, не добавляя все 9 или25 ячеек, когда есть микс, но изучите шаблон (только верхняя / нижняя / левая / правая ячейки).
Редактировать:
Существует компромисс между точностьюи производительность: если начальный размер ячейки слишком велик, вы можете пропустить небольшие озера или небольшие острова.поэтому критерии оптимизации должны быть следующими: начать с максимально возможных ячеек, которые обеспечат достаточную точность.