gpt4 book ai didi

java - 地理圆到矩形坐标

转载 作者:行者123 更新时间:2023-11-30 06:45:44 25 4
gpt4 key购买 nike

给定输入、中心纬度、中心经度和半径(以公里为单位),我想获取包含该圆的矩形的坐标(东北和西南纬度/经度)。

我应该自己写这个方法吗?尽管我害怕不去解释一些事情,因为我的数学生锈了。或者我可以找到一个现成的java实现吗?我的项目中有谷歌地图 sdk,但我在那里找不到任何有用的东西。

最佳答案

我想你的平方半径比地球半径(6371公里)小得多这样您就可以安全地忽略地球的曲率。

那么数学就很简单了:

// center of square
double latitudeCenter = ...; // in degrees
double longitudeCenter = ...; // in degrees

double radius = ...; // in km
double RADIUS_EARTH = 6371; // in km

// north-east corner of square
double latitudeNE = latitudeCenter + Math.toDegrees(radius / RADIUS_EARTH);
double longitudeNE = longitudeCenter + Math.toDegrees(radius / RADIUS_EARTH / Math.cos(Math.toRadians(latitudeCenter)));

// south-west corner of square
double latitudeSW = latitudeCenter - Math.toDegrees(radius / RADIUS_EARTH);
double longitudeSW = longitudeCenter - Math.toDegrees(radius / RADIUS_EARTH / Math.cos(Math.toRadians(latitudeCenter)));

示例:

中心(纬度,经度)位于48.00,11.00,半径10公里
将给出 48.09,11.13 处的 NE-corner(lat,lon) 和 47.91,10.87 处的 SW-corner(lat,lon)。

这里是如何使用 LatLng 来做到这一点和 Bounds google-maps-services-java API:

public static final double RADIUS_EARTH = 6371;

public static Bounds boundsOfCircle(LatLng center, double radius) {
Bounds bounds = new Bounds();
double deltaLat = Math.toDegrees(radius / RADIUS_EARTH);
double deltaLng = Math.toDegrees(radius / RADIUS_EARTH / Math.cos(Math.toRadians(center.lat)));
bounds.northeast = new LatLng(center.lat + deltaLat, center.lng + deltaLng);
bounds.southwest = new LatLng(center.lat - deltaLat, center.lng - deltaLng);
return bounds;
}

关于java - 地理圆到矩形坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48440092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com