實現思路:1)獲取多邊形矩形框範圍,2)在多邊形矩形框範圍內隨機生成一個任意點;3)判斷生成的點是否在多邊形面內,如果在則結束,否則,重複2 3步驟,支到判斷點在多邊形面內爲真結束。
//獲取樓多邊形的範圍
var bounds = JSON.parse(selects[1].options[selects[1].selectedIndex].getAttribute("data-bounds"));
console.log(bounds);
//適配範圍格式
var arr = [];
for (var i = 0; i < bounds.length; i++) {
console.log(bounds[i]);
arr.push(bounds[i]);
}
console.log(bounds[0]);
//首尾座標串應該一致
arr.push(bounds[0]);
var polygon1 = new AMap.Polygon({
bubble: true,
fillOpacity: 0.4,
strokeWeight: 1,
path: bounds,
map: map,
strokeColor: "#0000ff",
fillColor: "#0000ff"
});
//獲取樓的矩形範圍
var sz = polygon1.getBounds();
console.log(sz)
var sw = sz.getSouthWest();
var ne = sz.getNorthEast();
var minlng = sw.lng;
var minlat = sw.lat;
var maxlng = ne.lng;
var maxlat = ne.lat;
//隨機生成一個矩形範圍內的點;
var points = turf.randomPoint(1, { bbox: [minlng, minlat, maxlng, maxlat] });
console.log(points);
var coordinates = points.features[0].geometry.coordinates;
console.log(coordinates)
var point = turf.point([coordinates[0], coordinates[1]]);
console.log(point)
//樓的多邊形
var py = turf.polygon([arr]);
console.log(py)
//判斷生成的隨機點是否在面內
var ptsIn = turf.booleanPointInPolygon(point, py);
console.log(ptsIn);
//判斷隨機生成的點是否在面內,如果不在繼續生成隨機點並判斷。
//循環次數
var count = 0;
while (!ptsIn) {
points = turf.randomPoint(1, { bbox: [minlng, minlat, maxlng, maxlat] });
console.log(points);
coordinates = points.features[0].geometry.coordinates;
point = turf.point([coordinates[0], coordinates[1]]);
ptsIn = turf.booleanWithin(point, py);
console.log(ptsIn);
count++;
}
console.log(count);
var pos = new AMap.LngLat(coordinates[0], coordinates[1]);
var marker = new AMap.Marker({ map: map, position: pos });