2016-09-02 204 views
0

我必須計算多邊形上的路徑。 多邊形點在gps座標(lat,lng)中是已知的。旋轉多邊形計算

我做的方式: 創建圍繞多邊形的矩形(找分鐘緯度/經度,最大緯度/經度)在這個矩形 然後我開始以分鐘(緯度,經度),並一路到直立的角落。首先在固定的x方向移動,當達到最大x時,移動固定的y並返回。

example

所以這很好。不過,我希望能夠選擇路徑的(起始)角度。可能我需要旋轉多邊形,計算一個新的矩形並再次計算。但是我沒有設法根據給定的角度進行旋轉。

當前的代碼:

// 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

回答

0

除了增加X,然後Y的,你有那要看你的角度值遞增兩者。

x += stepX

變得

x += stepX * cos(angle) y += stepX * sin(angle)

y += stepY

變得

x -= stepY * sin(angle) y += stepY * cos(angle)

+0

我想過這個,但我不確定那裏的出發點。 (爲了覆蓋整個多邊形) – Racusthor