给出lat / lon折线厚度

时间:2009-09-30 03:09:33

标签: algorithm latitude-longitude

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

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

2 个答案:

答案 0 :(得分: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}
    },
  ];
}

答案 1 :(得分:1)

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