Как разделить неправильный многоугольник на равные области на карте Google V2

Я разрабатываю приложение для отбора проб Glebe для сельскохозяйственных целей. В этом пользователь может выбрать Глиб, нажав на карту, которая создаст многоугольник в соответствии с количеством нажатий. Я могу создать этот многоугольник и получить площадь многоугольника. Но теперь мне нужно разделить его на равные части.

например, если площадь многоугольника составляет 50 м^2, то он будет разделен на 50 областей 1 м^2. Такая же функциональность была сделана в Точность Agri App. Найдите ниже изображение. Мне нужно разделить многоугольник так же, как показано ниже, и показать точки внутри него.

The polygon

для получения области я использую Google Map Utilty Lib он имеет algo также для кластеризации сетки. Я хочу то же самое, что и выше изображения. На приведенном выше изображении они разделили площадь на 5 гектаров. Так как вся площадь составляет 85 га, то общее количество очков должно быть 17. Вот как это работает.

поэтому мой вопрос есть:

как найти эти точки в соответствии с площадью многоугольника на карте, чтобы я мог нарисовать эти точки на карте?

2 ответов


никаких ограничений на форму Глебов не было дано, поэтому вот решение, которое выполнит постановку задачи, построив разложение в форме звезды. Предполагается, что многоугольник выпуклый:

  • произвольно выберите главную вершину.

  • Триангулируйте многоугольник, соединяя главную вершину с каждым ребром по очереди, давая треугольники областей A1, A2, A3...

  • начать путешествие вокруг многоугольника, от главной вершины. Если первый треугольник больше желаемой площади (A1 > A), найдите точку вдоль края так, чтобы она разделила треугольник На под-треугольник желаемой области. Продолжайте путешествие отсюда с оставшимся под-треугольником (имеющим площадь A1-A). В противном случае вычитаем площадь первого треугольника из нужной области и продолжим путешествие (A теперь A-A1).

это очень похоже на разделение последовательность N интервалы на вещественной прямой в K интервалы равной длины.

Я предполагаю, что разложение в форме звезды вам не подойдет.


Если ваш многоугольник выпуклый, решение может быть получено путем решения следующей подзадачи: "учитывая выпуклый многоугольник области A, найдите горизонтальную линию, которая разбивает его на две части соответствующих областей B и A-B."

Это легко сделать, сканируя вершины сверху вниз с движущейся горизонталью и вычисляя покрытую область (это образует разложение многоугольника на трапеции). В какой-то момент Вы превысите область B. путем линейной интерполяции между текущие и предыдущие вершины, вы будете определять точную ординату горизонтали.

вы будете использовать решение подзадачи следующим образом:

1) вычислить целочисленный квадратный корень, пусть N, из числа желаемых плиток, пусть M.

2) срежьте многоугольник N раз, каждый раз получая площадь N плиток. Там будет остаток m-N^2 плитки.

3) срежьте каждый срез, используя вертикали, чтобы выделить окончательные плитки.

плитки будет иметь гораздо более приемлемую форму (прямоугольники, когда они не встречаются с ребром).