Javascript – 调整围绕中心点的四个angular的地理坐标点

我有一个区域的中心点坐标(lng,lat),我想计算围绕这个中心点的边界框中四个angular的坐标(lng,lat)。 从中心到每个angular落的距离是10米。

插图:

在这里输入图像描述

我如何在Javascript中做到这一点?

是否有这样一个图书馆,或者我必须把那些花了几年的时间忽略阿拉德太太的三angular课程的脑袋掸掉?

根据Bruno Pinto 在这里给出的答案,我最终创build和使用了这个:

function getBoundingBox(pLatitude, pLongitude, pDistanceInMeters) { var latRadian = pLatitude.toRad(); var degLatKm = 110.574235; var degLongKm = 110.572833 * Math.cos(latRadian); var deltaLat = pDistanceInMeters / 1000.0 / degLatKm; var deltaLong = pDistanceInMeters / 1000.0 / degLongKm; var topLat = pLatitude + deltaLat; var bottomLat = pLatitude - deltaLat; var leftLng = pLongitude - deltaLong; var rightLng = pLongitude + deltaLong; var northWestCoords = topLat + ',' + leftLng; var northEastCoords = topLat + ',' + rightLng; var southWestCoords = bottomLat + ',' + leftLng; var southEastCoords = bottomLat + ',' + rightLng; var boundingBox = [northWestCoords, northEastCoords, southWestCoords, southEastCoords]; return boundingBox; } if (typeof(Number.prototype.toRad) === "undefined") { Number.prototype.toRad = function() { return this * Math.PI / 180; } } 

你可以看看下面的函数:

 /*The getRectCoordinates takes the coordinates of the center point and the radial distance at which you want to find the coordinates*/ function getRectCoordinates (x,y,r) { //theta is the angle hard-coded to 45 degrees to think as the square var theta = Math.PI/4, cos = Math.cos, sin = Math.sin; return { 'topRight' : { 'x' : x + r*cos(theta), 'y' : y + r*sin(theta) }, 'bottomRight' : { 'x' : x + r*cos(theta), 'y' : y - r*sin(theta) }, 'topLeft' : { 'x' : x - r*cos(theta), 'y' : y + r*sin(theta) }, 'bottomLeft' : { 'x' : x + r*cos(theta), 'y' : y - r*sin(theta) } } } //An example for this (Check console for output): console.log(getRectCoordinates(2,3,10)); 

(x, y)为中心的坐标,如下图所示:

在这里输入图像描述

那么你可以用下面的方法实际计算坐标:

 /* Returns an array of arrays, each one corresponding to each point's coordinates (x, y) */ function getCoordinatesSquare (distance_to_center, x, y) { var points = []; var dx = distance_to_center * Math.sin(Math.PI / 4); var dy = distance_to_center * Math.cos(Math.PI / 4); points[0] = [x - dx, y - dy]; // (x1, y1) points[1] = [x - dx, y + dy]; // (x2, y2) points[2] = [x + dx, y + dy]; // (x3, y3) points[3] = [x + dx, y - dy]; // (x4, y4) return points; } /* Set the initial conditions. */ var distance_to_center = 10; var x = 4; var y = 5; /* Calculate. */ var coordinates = getCoordinatesSquare (distance_to_center, x, y); /* Test the results. */ for (var i = 0; i < coordinates.length; i++){ console.log ("(" + coordinates[i][0] + ", " + coordinates[i][1] + ") \n"); } 

在这种情况下,输出将是:

 (-3.0710678118654746, -2.0710678118654755) (-3.0710678118654746, 12.071067811865476) (11.071067811865476, 12.071067811865476) (11.071067811865476, -2.0710678118654755) 

并绘制点:

在这里输入图像描述