2016-01-23 69 views
1

我有一個問題,在我的單張地圖我從多邊形創建了一個三角繞點多邊形:在單張地圖

var polygon = L.polygon([ 
    [parseFloat(decimal_lat),parseFloat(decimal_lon)], 
    [parseFloat(decimal_lat) + 1, parseFloat(decimal_lon) - 1], 
    [parseFloat(decimal_lat) + 1, parseFloat(decimal_lon) + 1] ],  
    { 
      color:'green' 
    }); 
polygon.addTo(map); 

,我想圍繞Point[decimal_lon, decimal_lat]旋轉此多邊形。但我無法解決它..
我創建了DEMO,我正在旋轉polynom相同我想旋轉我的三角形(多邊形)以顯示我的問題。

+0

你爲什麼問這兩次? http://stackoverflow.com/questions/34965293/moving-with-polygon-around-point-on-leaflet-map – iH8

+0

試圖更好地問 –

回答

4

一種方法是通過矩陣旋轉。 https://en.wikipedia.org/wiki/Rotation_matrix。 您想將點轉換到中心,然後應用旋轉,然後將其翻譯回來。

這就是代碼的結尾。

//changing polyline with slider but I want to change polygon there 
    range_yaw.onchange = function() { 
    var yawAngle = (parseFloat(range_yaw.value)/(819/360) + 90) 
    // line 
    var center = [decimal_lat, decimal_lon] 
    var end = [decimal_lat + 2, decimal_lon + 2] 
    var pointListRotated = rotatePoints(center, [center, end], yawAngle) 
    polyline.setLatLngs(pointListRotated); 
    // polygon 
    var polygonPoints = [ 
     center, 
     [center[0] + 1, center[1] - 1], 
     [center[0] + 1, center[1] + 1] 
    ] 
    polygonRotated = rotatePoints(center, polygonPoints, yawAngle) 
    polygon.setLatLngs(polygonRotated) 
    }; 

    // 
    // rotate a list of points in [lat, lng] format about the center. 
    // 
    function rotatePoints(center, points, yaw) { 
    var res = [] 
    var angle = yaw * (Math.PI/180) 
    for(var i=0; i<points.length; i++) { 
     var p = points[i] 
     // translate to center 
     var p2 = [ p[0]-center[0], p[1]-center[1] ] 
     // rotate using matrix rotation 
     var p3 = [ Math.cos(angle)*p2[0] - Math.sin(angle)*p2[1], Math.sin(angle)*p2[0] + Math.cos(angle)*p2[1]] 
     // translate back to center 
     var p4 = [ p3[0]+center[0], p3[1]+center[1]] 
     // done with that point 
     res.push(p4) 
    } 
    return res 
    } 

這裏是一個DEMO

+0

它是歪曲的恥辱。你知道一個在旋轉時不偏斜多邊形的實現嗎? – jperelli

0

可以接近它的幾種方法。這裏是一個...

第一:計算從錨點到兩個'外'點的方位和距離。這裏有幾個幫手功能: https://github.com/gregallensworth/Leaflet/blob/master/LatLng_Bearings.js

第二:調整那些軸承,但是你想要...保持原來的距離。

第三:使用新的軸承和距離,在這裏使用公認的答案計算新LatLngs:How to calculate the latlng of a point a certain distance away from another?(這裏使用的谷歌地圖,而不是單張,但它很容易移植到單張)

讓我知道如果你有任何問題實施...