我必須計算多邊形上的路徑。 多邊形點在gps座標(lat,lng)中是已知的。旋轉多邊形計算
我做的方式: 創建圍繞多邊形的矩形(找分鐘緯度/經度,最大緯度/經度)在這個矩形 然後我開始以分鐘(緯度,經度),並一路到直立的角落。首先在固定的x方向移動,當達到最大x時,移動固定的y並返回。
所以這很好。不過,我希望能夠選擇路徑的(起始)角度。可能我需要旋轉多邊形,計算一個新的矩形並再次計算。但是我沒有設法根據給定的角度進行旋轉。
當前的代碼:
// calculate the rectangle
var bottomLeft =
{
lat: points[0].lat,
lng: points[0].lng
};
var topRight =
{
lat: points[0].lat,
lng: points[0].lng
};
for(var i = 1; i < points.length; i++)
{
if (points[i].lat < bottomLeft.lat)
{
bottomLeft.lat = points[i].lat;
}
else if (points[i].lat > topRight.lat)
{
topRight.lat = points[i].lat;
}
if (points[i].lng < bottomLeft.lng)
{
bottomLeft.lng = points[i].lng;
}
else if (points[i].lng > topRight.lng)
{
topRight.lng = points[i].lng;
}
}
//start position
var currentPosition =
{
lat: bottomLeft.lat,
lng: bottomLeft.lng
}
//calculate points
var outputPoints = [];
var direction = 0;
while (currentPosition.lat <= topRight.lat && currentPosition.lng <= topRight.lng)
{
if(pointInPoly(points, currentPosition))
{
outputPoints.push(copy(currentPosition));
}
if (direction == 0)
{
if(currentPosition.lat + stepX < topRight.lat)
{
currentPosition.lat += stepX;
}
else if(currentPosition.lng + stepY < topRight.lng)
{
currentPosition.lng += stepY;
direction = 1;
}
else
{
break;
}
}
else
{
if(currentPosition.lat - stepX > bottomLeft.lat)
{
currentPosition.lat -= stepX;
}
else if(currentPosition.lng + stepY < topRight.lng)
{
currentPosition.lng += stepY;
direction = 0;
}
else
{
break;
}
}
}
return outputPoints;
}
因此,用戶應該能夠得到的角度,然後將柵格必須計算服用角度考慮。即使多邊形可能需要平移/旋轉以進行計算,顯然多邊形需要與其製作的地點完全相同,並且紅線(路徑)必須適合。
要添加行我使用下面的代碼地圖:
function showLine(polygon) {
if(!isConvex(polygon))
{
console.log("cannot calculate outputPoints, polygon not convex");
return;
}
var outputPoints = calculatePoints(polygon._latlngs, 0.001,0.85,0.85)
var polyline = L.polyline(outputPoints, {color: 'red', opacity: 2, weight: 2});
polyline.addTo(Window.map);
console.log("done");
}
任何想法我怎麼能做到這一點?
隨着親切的問候,
Racusthor
我想過這個,但我不確定那裏的出發點。 (爲了覆蓋整個多邊形) – Racusthor