Задать вопрос
RomanDillerNsk
@RomanDillerNsk
JavaScript

Как разделить полигон на карте на равные части или продолжение: как собрать массив из координат выделенной области через заданный шаг?

Коллеги, доброго времени суток.

Итак задача: разбить полигон на равные сектора!

В продолжении темы Как собрать массив из координат выделенной области... появился еще один вопрос. Большое спасибо товарищу @serginhold за помощь и мое вразумение))))))))))

Итак! Строим карте на leaflet. На нем же выделяем область, рисуем самое простое прямоугольник - полигон, у нас есть углы его в координатах:

this.rectangle = L.rectangle(bounds, this.options).addTo(this.map); // строим прямоугольник - полигон
let coordsConners = this.rectangle.getLatLngs()[0]; // координаты углов


Далее мы получаем длины горизонтальной и вертикальной линий:

getLines(southWest, southEast, northEast) { // получаем длины вертикальной и горизонтальной линии

    this.points = [
		new L.LatLng(southWest[0], southWest[1]),
		new L.LatLng(southEast[0], southEast[1]),
		new L.LatLng(northEast[0], northEast[1])			

    ];

	this.rectangleData.horizont = +(this.points[0].distanceTo(this.points[1])).toFixed(0);
	this.rectangleData.vertical = +(this.points[1].distanceTo(this.points[2])).toFixed(0);

}


Тут по сути все просто, southWest, southEast, northEast мы берем из coordsConners. this.rectangleData.horizont и this.rectangleData.vertical это собственно длины линий в метрах. Итого, у нас есть координаты углов и длины линий.

Как предложил вчера, товарищ @serginhold (еще раз спасибо), и потом, когда я перестал тупить, я сделал:

let x_min = coordsConners[1].lat;
    let x_max = coordsConners[3].lat;
    let y_min = coordsConners[1].lng;
    let y_max = coordsConners[3].lng;

	let x = 0;
	let y = 0;

		let count = 100;

		for (let i = 0; i < count; i++) {

			x = Math.random() * (x_max - x_min) + x_min;
			y = Math.random() * (y_max - y_min) + y_min;

			new L.marker([x, y]).addTo(this.map);

		}


Просто рандомно ставим маркеры на карту. Это соответственно не верно. Потому что они ставятся рандомно. Необходимо разбить данный прямоугольник на равные части. И тут я прошу помощи, может кто сталкивался или просто подскажет. Есть длины и координаты, как разбить прямоугольник?

p.s. ну не разбить точнее, а просто нарисовать новые, маленькие. что бы высота и ширина у них были не более установленного из config числа метров.
Заранее благодарю.
  • Вопрос задан
  • 749 просмотров
Подписаться 1 Средний 8 комментариев
Пригласить эксперта
Ответы на вопрос 1
AngReload
@AngReload
Кратко о себе
Это надо?
const RECOMMEND_SIZE = 10;
const BIAS_TO_CENTER = 0.5;

let x_min = coordsConners[1].lat;
let x_max = coordsConners[3].lat;
let y_min = coordsConners[1].lng;
let y_max = coordsConners[3].lng;

let x_side_len = x_max - x_min;
let y_side_len = y_max - y_min;

let x_total_count = Math.round(x_len / RECOMMEND_SIZE);
let y_total_count = Math.round(y_len / RECOMMEND_SIZE);

let x_closest_size = x_side_len / x_total_count;
let y_closest_size = y_side_len / y_total_count;


for (let x = 0; x < x_total_count; x++) {
  for (let y = 0; y < y_total_count; y++) {
    let coord_x = x_min + x_closest_size * (x + BIAS_TO_CENTER);
    let coord_y = y_min + y_closest_size * (y + BIAS_TO_CENTER);
    new L.marker([coord_x, coord_y]).addTo(this.map);
  }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы