是否有一个Python模块,我可以创建具有地理位置坐标(纬度和经度)的对象,并查询所有对象是否在给定坐标的5公里距离(即半径)内?
我一直试图将纬度和经度存储为字典中的键(因为它们被键索引)并使用一些距离查找算法来查询它们.但这感觉就像一个可怕的黑客.
基本上就像PostGIS for PostgreSQL,但都在我的Python应用程序的内存中.
python geolocation geospatial coordinates geographic-distance
我有两个数据框,它们都包含纬度和经度坐标。第一个数据帧是对事件的观察,其中记录了位置和时间。第二个数据框是地理要素,其中记录了该要素的位置和信息。
my_df_1 <- structure(list(START_LAT = c(-33.15, -35.6, -34.08333, -34.13333,
-34.31667, -47.38333, -47.53333, -34.08333, -47.38333, -47.15
), START_LONG = c(163, 165.18333, 162.88333, 162.58333, 162.76667,
148.98333, 148.66667, 162.9, 148.98333, 148.71667)), row.names = c(1175L,
528L, 1328L, 870L, 672L, 707L, 506L, 981L, 756L, 210L), class = "data.frame", .Names = c("START_LAT",
"START_LONG"))
my_df_2 <- structure(list(latitude = c(-42.7984, -34.195, -49.81, -35.417,
-28.1487, -44.657, -42.7898, -36.245, -39.1335, -31.8482), longitude = c(179.9874,
179.526, -176.68, 178.765, -168.0314, 174.695, -179.9873, 177.7873,
-170.0583, 173.2424), depth_top = c(935L, 2204L, 869L, 1973L,
4750L, …Run Code Online (Sandbox Code Playgroud) 我没有使用scipy'spdist函数的结果。我对真实的地理距离感兴趣(首选单位:公里)。取以下坐标:
from scipy.spatial.distance import pdist
coordinates = [ (42.057, -71.08), (39.132, -84.5155) ]
distance = pdist(coordinates)
print distance
# [ 13.75021037]
Run Code Online (Sandbox Code Playgroud)
但是单位是什么?谷歌称这两个点之间的距离为 1179 公里。我如何从 13.75021037 到达那里?
我可以使用以下SQL来计算固定位置与数据库中场地的位置之间的距离.
SELECT Location.STDistance(geography::Point(51, -2, 4326)) * 0.00062137119 FROM Venues
Run Code Online (Sandbox Code Playgroud)
请注意,返回的距离以英里为单位,位置字段是地理类型.
我想知道在.NET中它的等价物会返回相同的值.此方法将具有以下签名:
public static double Distance(location1Latitude, location1Longitude, location2Latitude, location2Longitude) {
return ...;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以在.NET中调用数据库方法,但我不希望这样做.我希望有一个计算距离的公式.谢谢
我正在研究选择与给定坐标一定距离内的最近点的性能。
选项是使用两个decimal(8,6)纬度、长列或单列geography并使用它。
我只感兴趣哪个更快?
sql sql-server database-performance sqlgeography geographic-distance
这是一个非常简单的案例,但到目前为止我还没有找到任何简单的方法。这个想法是获得 a 中定义的所有点GeoDataFrame和 another 中定义的点之间的一组距离GeoDataFrame。
import geopandas as gpd
import pandas as pd
# random coordinates
gdf_1 = gpd.GeoDataFrame(geometry=gpd.points_from_xy([0, 0, 0], [0, 90, 120]))
gdf_2 = gpd.GeoDataFrame(geometry=gpd.points_from_xy([0, 0], [0, -90]))
print(gdf_1)
print(gdf_2)
# distances are calculated elementwise
print(gdf_1.distance(gdf_2))
Run Code Online (Sandbox Code Playgroud)
这会产生 ingdf_1和gdf_2共享相同索引的点之间的元素距离(还有一个警告,因为两个 GeoSeries 没有相同的索引,这就是我的情况)。
geometry
0 POINT (0.000 0.000)
1 POINT (0.000 90.000)
2 POINT (0.000 120.000)
geometry
0 POINT (0.00000 0.00000)
1 POINT (0.00000 -90.00000)
/home/seydoux/anaconda3/envs/chelyabinsk/lib/python3.8/site-packages/geopandas/base.py:39: UserWarning: The indices of the two GeoSeries …Run Code Online (Sandbox Code Playgroud) 我看到我可以从设备中检索CMAttitude,从中我可以读取我需要的3个值(俯仰,滚动和偏航).据我了解,这个CMAttitude对象由CoreMotion管理,CoreMotion是一个传感器融合管理器,用于计算罗盘,陀螺仪和加速度计的正确结果(在Android上它是SensorManager类).
所以我的问题是:
那些值(俯仰,滚转和偏航)是相对于磁北和重力吗?
如果以上是正确的,我如何修改它以给我相对于地理北方的结果?
如果设备(例如iPhone 3GS)没有陀螺仪,我是否必须告诉管理员,或者我可以告诉它根据设备的传感器给我设备的态度(acc + gyro + compas OR acc + compas)
我将坐标存储为我的数据库中的纬度经度对.现在,我需要从给定的lat-long坐标中检索给定半径内的所有条目.例如,如果给定坐标48.796777,2.371140和距离20公里,它将检索距离该点20公里内的所有记录.
如果它提供任何简化或导致较少的CPU时间,则足够准确地计算点之间的"直线"距离,即不需要考虑地球的曲率.
如何用Django实现这一目标?更具体地说,如何为这样的查询构建视图(可能还有模型)?
我能够绘制一个特定点的地图和标题:
library(maps)
map("state")
text(-80.83,35.19,"Charlotte",cex=.6)
Run Code Online (Sandbox Code Playgroud)
我还可以绘制一个围绕该点的圆圈:
symbols(-80.83,35.19,circles=2, add=TRUE)
Run Code Online (Sandbox Code Playgroud)
但是,我想控制圆的大小.特别是,我想在data.frame,matrix或list中包含的多个位置周围绘制一个半径为100英里的圆.
假设我每分钟左右记录一下我的汽车的纬度和经度,每次都会在表格中添加一行.
我想拥有一个包含4列的数据库网格
4号,我可以尝试从谷歌地图中检索,我得到一个文本或空白,所以让我们忽略它.
我如何获得#3?我应该在我的应用程序或MySql中计算它(使用存储过程还是只是复杂的SELECT)?
无论哪个答案,有人可以提供一些示例代码或示例链接吗?谷歌今天不是我的朋友:-(
python ×3
coordinates ×2
r ×2
sql-server ×2
sqlgeography ×2
.net ×1
c# ×1
core-motion ×1
delphi ×1
django ×1
geolocation ×1
geometry ×1
geopandas ×1
geospatial ×1
ios ×1
maps ×1
mysql ×1
pandas ×1
pitch ×1
scipy ×1
shapely ×1
spatial ×1
sql ×1
sqlite ×1
tdbgrid ×1