Как разделить неправильный многоугольник на равные области на карте Google V2
Я разрабатываю приложение для отбора проб Glebe для сельскохозяйственных целей. В этом пользователь может выбрать Глиб, нажав на карту, которая создаст многоугольник в соответствии с количеством нажатий. Я могу создать этот многоугольник и получить площадь многоугольника. Но теперь мне нужно разделить его на равные части.
например, если площадь многоугольника составляет 50 м^2, то он будет разделен на 50 областей 1 м^2. Такая же функциональность была сделана в Точность Agri App. Найдите ниже изображение. Мне нужно разделить многоугольник так же, как показано ниже, и показать точки внутри него.
для получения области я использую 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) срежьте каждый срез, используя вертикали, чтобы выделить окончательные плитки.
плитки будет иметь гораздо более приемлемую форму (прямоугольники, когда они не встречаются с ребром).