这是我第一次看地理位置.请原谅我的长话题.我希望很清楚.
我有一个数据库,用lat&lng保存记录.我正在尝试编写一个PHP类,它定义了四个十进制坐标,形成一个边界框(然后检索框内的所有记录).
我只需要知道哪些位置在用户位置的n km 范围内.我不需要从用户到位置的距离.
我正在建立这个答案的第一部分.
以上答案的核心是:
直线10公里是:
Run Code Online (Sandbox Code Playgroud)on the latitude is equal to ~1'(minute) on the longitude is equal to ~6'(minutes)以此为基础,进行一些快速数学运算,并在查询中添加WHERE子句,删除通过添加缓冲区创建的"框"之外的任何位置,假设为1'lat和6'long.
嗯,"做一些快速数学"帕特里克说.几天后我没能正确地完成数学计算.
我的班级挂在那里,似乎工作了10公里.但是,我没有让它与任何其他距离一起工作.
首先我移动到秒,所以10km是:
on the latitude is equal to 60 seconds
on the longitude is equal to 360 seconds
Run Code Online (Sandbox Code Playgroud)
这很好.
但是,我接着尝试了5km是:
on the latitude is equal to 30 seconds
on the longitude is equal to 180 seconds
Run Code Online (Sandbox Code Playgroud)
这没用.
你能解释为什么这种方法不适用于5km(以及我尝试的其他距离)吗?
下面是我的班级代码.显然这个开关是垃圾.任何帮助赞赏.
class coords
{
/*
Calculate a bounding box from a decimal coordinate and distance. …Run Code Online (Sandbox Code Playgroud) 我有一个问题让我在某些项目中停滞了一段时间。
我基本上希望使用我编写的某些脚本绘制的 x、y 点来捕获多边形。纬度、经度是多边形的中心 GPS 线,我正在寻找其周围的多边形。
这是我的Python代码的一部分:
def getcords(lat, lon, dr, bearing):
lat2=asin(sin(lat)*cos(dr)+cos(lat)*sin(dr)*cos(bearing))
lon2=lon+atan2(sin(bearing)*sin(dr)*cos(lat),cos(dr)-sin(lat)*sin(lat2))
return [lat2,lon2]
Run Code Online (Sandbox Code Playgroud)
我的输入是这样的:
但是对于输入:
getcorsds1(42.189275, -76.85823, 0.5/3958.82, 30)
Run Code Online (Sandbox Code Playgroud)
我得到输出: [-1.3485899508698462, -76.8576637627568],但是这[42.2516666666667, -76.8097222222222]是正确的答案。
至于角距离,我简单地通过将英里距离除以地球半径(= 3958.82)来计算。
有人吗?
这是我的Java实现:
private static double[] pointRadialDistance(double lat1, double lon1,
double radianBearing, double radialDistance) {
double lat = Math.asin(Math.sin(lat1)*Math.cos(radialDistance)+Math.cos(lat1)
*Math.sin(radialDistance)*Math.cos(radianBearing));
double lon;
if(Math.cos(lat) == 0) { // Endpoint a pole
lon=lon1;
}
else {
lon = ((lon1-Math.asin(Math.sin(radianBearing)*Math.sin(radialDistance)/Math.cos(lat))
+Math.PI) % (2*Math.PI)) - Math.PI;
}
return (new double[]{lat, lon});
}
Run Code Online (Sandbox Code Playgroud)
我将度数轴承转换为弧度,并在调用函数之前将距离(km)转换为弧度距离 - 这不是问题所在.
但是,当我输入坐标时:lat = 49.25705; lon = -123.140259; 轴承225(西南),距离1km
我得到了这个:lat:-1.0085434360125864 lon:-3.7595299668539504
它显然不正确,谁能看到我做错了什么?
谢谢
from geopy.distance import vincenty
Run Code Online (Sandbox Code Playgroud)
我刚刚安装了geopy2.0.0 包,我想像geopy.distance.vincenty()这个文档所说的那样使用。但是,它返回ImportError: cannot import name 'vincenty' from 'geopy.distance'。如果我尝试
from geopy import distance
Run Code Online (Sandbox Code Playgroud)
它变成AttributeError: module 'geopy.distance' has no attribute 'vincenty'。大约两三个月前,我在Google Colab上使用了它,它很好。发生了什么?难道是最新版本放弃了这个属性?
我有一个以十进制度数给出的位置(x.xxxxxxxx 和 y.yyyyyyyy)。我需要在它周围画一个矩形。矩形的中心与位置匹配。矩形的尺寸以米为单位,它的旋转范围为 0-360 度。
问题
如何计算矩形的四个角并将结果返回为四个十进制度值?喜欢arrayOf<LatLon> getRectangle(LatLon position, int rectWidthCm, int rectLengthCm, double rectRotation)。
例子
注意:项目设置是一个支持 Kotlin 和谷歌地图图表的 Android 应用程序。我对解决这个问题的现代方法很感兴趣。关于精度损失,它最多应该在厘米以内。
bearing ×2
coordinates ×2
geolocation ×2
gps ×2
python ×2
algorithm ×1
android ×1
distance ×1
geopy ×1
geospatial ×1
gis ×1
import ×1
java ×1
kotlin ×1
php ×1