6

我有两个坐标,我想画一条等长的垂直线。是否有一个简单的谷歌地图偏移量或一个干净的javascript方法我可以通过它来完成这个?那会是什么?

这是我到目前为止所拥有的。如您所见,我将这两个点绘制为标记,然后尝试在它们之间画一条线,但我需要让这条线垂直于两个坐标之间的线。

var locations = [
    ['', position.coords.latitude, position.coords.longitude, 1],
    ['', llat, llng, 2]
];

  var marker, i;

  for ( var i = 0; i < locations.length; i++ )
  {
      marker = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i][1], locations[i][2]),
        map: map
      });
  }

    var borderPlanCoordinates = [
        new google.maps.LatLng(llat, position.coords.longitude),
        new google.maps.LatLng(position.coords.latitude,llng)
    ];

    var borderPath = new google.maps.Polyline({
      path: borderPlanCoordinates,
      strokeColor: "#FF0000",
      strokeOpacity: 1.0,
      strokeWeight: 10,
      map: map
    });

   borderPath.setMap(map);
4

2 回答 2

5

因此,您有两个带有坐标的点,(x1,y1)并且(x2, y2)您想绘制一条线段,其长度是它们之间的距离,它是连接它们的线段的垂直平分线,并且被所述线段平分?

可能最简单的方法是设置cx = (x1 + x2)/2, cy = (y1+y2)/2), dx = (x2-x1)/2dy = (y2-y1)/2然后从(cx-dy, cy+dx)to画一条线(cx+dy, cy-dx)

这是有效的,因为(cx, cy)它是您想要的线段的中点,然后您只需将该向量从该中点带到(x2,y2)并将其旋转正负 90 度以找到您要绘制的线段的端点。

于 2011-04-30T06:11:44.757 回答
4

我尝试了这个解决方案,该段的中间还可以,但它在谷歌地图上看起来并不垂直,我怀疑是因为球面投影(不是正交投影)。

这是一个有效的解决方案:

spherical = google.maps.geometry.spherical;
var F = new google.maps.LatLng(latF, longF); 
var T = new google.maps.LatLng(latT, longT); 
// M is the middle of [FT]
var latM = (latF + latT)/2;
var longM = (longF + longT)/2;
var M =  new google.maps.LatLng(latM, longM);
// Get direction of the segment
var heading = spherical.computeHeading(F, T);
var dist = 200; // distance in meters
// Place point A that is oriented at 90° in a distance of dist from M
var A = spherical.computeOffset(M, dist, heading+90);
var perpendicularCoordinates = [M, A ];
var perpendicular = new google.maps.Polyline({
    path: perpendicularCoordinates,
    geodesic: true,
    strokeColor: '#FF0000',
    strokeOpacity: 1.0,
    strokeWeight: 2,
    map: map
  });    

这是相关的小提琴:http: //jsfiddle.net/8m7vm650/15/

Please note that you need to use an optional google maps library called geometry which is done by adding libraries=geometry to query string when loading maps : http://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false

于 2015-03-05T14:44:40.670 回答