ios - 从地图中心计算地图正方形的坐标
问题描述
我想获取矩形角的坐标。或者寻找最西北点的坐标,距离地图中心50公里。
有谁知道我该怎么做?
关键是当我在地图上移动时,我希望总是有一个矩形(矩形不需要绘制,我只需要它的坐标来进行后端请求),它的角总是距离当前中心 50 公里地图。
我正在考虑以某种方式使用distance
from 的函数CLLocation
,但在这种情况下,我有距离,但没有坐标之一。
50km = mapCenterLocation.distance(from: coordinatesUnknown)
解决方案
不太清楚你的意思,但也许这可以帮助
func getNewTargetCoordinate(position: CLLocationCoordinate2D, userBearing: Float, distance: Float)-> CLLocationCoordinate2D{
//haversine formula
//r is earth radius
let r = 6378140.0
let latitude1 = position.latitude * (Double.pi/180);
let longitude1 = position.longitude * (Double.pi/180);
//bearing for user heading in degree
let brng = Double(userBearing) * (Double.pi/180);
//calculating user new position based on user distance and bearing can be seen at haversine formula
var latitude2 = asin(sin(latitude1)*cos(Double(distance)/r) + cos(latitude1)*sin(Double(distance)/r)*cos(brng));
var longitude2 = longitude1 + atan2(sin(brng)*sin(Double(distance)/r)*cos(latitude1),cos(Double(distance)/r)-sin(latitude1)*sin(latitude2));
//converting latitude as degree
latitude2 = latitude2 * (180/Double.pi)
longitude2 = longitude2 * (180/Double.pi)
// return location of user
return CLLocationCoordinate2DMake(latitude2, longitude2)
}
这项工作适用于东北方向,西北方向的距离以米为单位,我认为您可以将度数设置为 135,距离设置为 5000。对于位置,您需要放置地图中心位置。
编辑:对于自定义矩形。,您可以先检查对角线度数
func getDiagonalDegree(x: Float, y:Float) -> Float{
return atan2(y,x)*(180/Double.pi)
}
所以现在你可以得到返回的对角线度数并将其放入 getNewTargetCoordinate。新轴承为 270+diagonalDegree。
推荐阅读
- java - 我如何根据 Java 中的日历周从日历年中明智地获取数据周
- javascript - 春季无法获取keycloak授权令牌
- android - DataBinding:在点击时通过 LiveData 变量调整可见性
- php - php curl获取页面上的img src值
- matlab - MATLAB 通过 UDP 编写混合数据类型
- api - 如何选择保护 Mulesoft API 的方法?
- javascript - Javascript'类型错误未捕获的TypeError:无法设置未定义的属性'backgroundColor'但有效
- javascript - 从字符串 JS / Lodash / TypeScript 中获取数字
- spring-cloud-stream - 设置为 RabbitMQ 生成的消息的属性
- java - Spring AMQP手动容器异常慢