【问题标题】:Giving a lat/lon polyline thickness给出纬度/经度折线厚度
【发布时间】:2009-09-30 03:09:32
【问题描述】:

这更像是一个算法问题,但希望有人可以帮助我解决这个问题。我有一条由纬度/经度点组成的线,我想从中创建一个具有一些预定义厚度的多边形。所以基本上多边形的边会与两边的原始折线平行。对为此采取的最佳方法有何想法?

编辑:我目前的计划是遍历每个点,找到下一个点的斜率,然后找到两边的平行线,这些平行线构成多边形的边。只是不知道是否有更简单的方法。

【问题讨论】:

    标签: algorithm latitude-longitude


    【解决方案1】:

    您要做的是创建一对新行,它们在原始行的左侧和右侧略微移动。所以:

    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】:

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

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      相关资源
      最近更新 更多