代码之家  ›  专栏  ›  技术社区  ›  Jeff Storey

给出lat/lon多段线厚度

  •  3
  • Jeff Storey  · 技术社区  · 15 年前

    这更像是一个算法问题,但希望有人能帮我解决这个问题。我有一条由纬度/经度点组成的线,我想用它创建一个具有预定厚度的多边形。所以基本上,多边形的边与原多段线的两边平行。有没有想过最好的方法?

    编辑:我当前的计划是迭代每一个点,找到下一个点的坡度,然后找到两边的平行线,这些平行线组成多边形的边。只是不知道有没有更简单的方法。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Marius    15 年前

    您要做的是创建一对新行,这些新行稍微移到原始行的左右两侧。所以:

    var polygon = [
      {x:0, y:0},
      {x:10, y:0},
      {x:10, y:10},
      {x:0, y:10}
    ];
    var outerPolygon = [];
    var innerPolygon = [];
    for(var i=1; i<polygon.length; i++){
      var ret = newLines(polygon[i-1], polygon[i]);
      outerPolygon.push(ret[0]);
      innerPolygon.push(ret[1]);
    }
    function newLines(start, stop){
      var dx = start.x - stop.x;
      var dy = start.y - stop.y;
      var d = Math.sqrt(dx*dx + dy*dy);
      dx /= d;
      dy /= d;
      var rNormal = {dx: dy, dy:-dx};
      var lNormal = {dx: -dy, dy:dx};
      return [
        {start:{
          x:start.x+rNormal.dx,
          y:start.y+rNormal.dy},
         stop:{
          x:stop.x+rNormal.dx,
          y:stop.y+rNormal.dy}
        },
        {start:{
          x:start.x+lNormal.dx,
          y:start.y+lNormal.dy},
         stop:{
          x:stop.x+lNormal.dx,
          y:stop.y+lNormal.dy}
        },
      ];
    }
    
        2
  •  1
  •   Community CDub    7 年前

    如果我理解你的问题,它与 this 一个,已经有了一些非常详细的答案。