- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一份事故地点经纬度列表,想了解距离这些事故最近的警察局。目前,事故的经纬度列表位于使用 pandas 的两个单独的列中(抱歉,我对 python 很陌生,所以我可能使用了错误的单词)。警察局的经纬度当前位于单独的 json 文件中。我当前的目标是创建一个新列(或文件),其中显示最近警察局的经纬度。理想情况下,它应该是相应的名称,但这是一座桥梁,当我到达它时我会跨越它。
我已经研究过其他人是如何做到的,但除了询问位置只提供一对拉长鞋之外,我无法更进一步,而且不能同时提供所有拉长鞋。
from math import cos, asin, sqrt
def distance (lat1, lon1, lat2, lon2):
p = 0.017453292519943295
a = 0.5 - cos((lat2-lat1)*p)/2 + cos(lat1*p)*cos(lat2*p) * (1-cos((lon2-lon1)*p)) / 2
return 12742 * asin(sqrt(a))
def closest(data, v):
return min(data, key=lambda p: distance(v['lat'],v['lon'],p['lat'],p['lon']))
#these are the latlons of the police stations
tempDataList = [{"lat": 52.003181, "lon": 4.353068},
{"lat": 52.089416, "lon": 4.377340},
{"lat": 52.019911, "lon": 4.426602},
{"lat": 52.054457, "lon": 4.388764},
{"lat": 52.044536, "lon": 4.332631},
{"lat": 52.072910, "lon": 4.274784},
{"lat": 52.066099, "lon": 4.298664},
{"lat": 52.070030, "lon": 4.317355},
{"lat": 52.052636, "lon": 4.289576},
{"lat": 52.060829, "lon": 4.318683},
{"lat": 52.075680, "lon": 4.306810},
{"lat": 52.040353, "lon": 4.256946},
{"lat": 52.089381, "lon": 4.345599},
{"lat": 52.111719, "lon": 4.283909},
{"lat": 52.055222, "lon": 4.233827},
{"lat": 52.046393, "lon": 4.253105},
{"lat": 52.144177, "lon": 4.405549},
{"lat": 51.987035, "lon": 4.199314},
{"lat": 52.061650, "lon": 4.486572}]
v = {'lat': 52.103167, 'lon': 4.317532}
print(closest(tempDataList, v))
这就是我失败的地方,因为我根本不知道如何使 v
成为两列并将其放入新列中。
我希望有一个列显示最近的警察局的经纬度。有时我会遇到问题TypeError:字符串索引必须是整数
。
最佳答案
下面您可以看到如何将索引列表转换为 numpy 数组,之后您可以对其进行操作,而无需循环遍历每个元素。
import numpy as np
# numpy allows you to work with arrays; math only works with scalars
from numpy import cos, arcsin as asin, sqrt
def distance (lat1, lon1, lat2, lon2):
"""Return the distances between all accidents (lat1,lon1)
and all police stations (lat2,lon2) as a 2-dimensional array
"""
# add dummy dimension to p
lat2 = lat2[:,None]
lon2 = lon2[:,None]
p = 0.017453292519943295
a = 0.5 - cos((lat2-lat1)*p)/2 + cos(lat1*p)*cos(lat2*p) * (1-cos((lon2-lon1)*p)) / 2
return 12742 * asin(sqrt(a))
def closest(*args):
"""Returns the index (counting from zero) of the closest
police station for every accident.
"""
return np.argmin(distance(*args), axis=0)
tempDataList = [{"lat": 52.003181, "lon": 4.353068},
{"lat": 52.089416, "lon": 4.377340},
{"lat": 52.019911, "lon": 4.426602},
{"lat": 52.054457, "lon": 4.388764},
{"lat": 52.044536, "lon": 4.332631},
{"lat": 52.072910, "lon": 4.274784},
{"lat": 52.066099, "lon": 4.298664},
{"lat": 52.070030, "lon": 4.317355},
{"lat": 52.052636, "lon": 4.289576},
{"lat": 52.060829, "lon": 4.318683},
{"lat": 52.075680, "lon": 4.306810},
{"lat": 52.040353, "lon": 4.256946},
{"lat": 52.089381, "lon": 4.345599},
{"lat": 52.111719, "lon": 4.283909},
{"lat": 52.055222, "lon": 4.233827},
{"lat": 52.046393, "lon": 4.253105},
{"lat": 52.144177, "lon": 4.405549},
{"lat": 51.987035, "lon": 4.199314},
{"lat": 52.061650, "lon": 4.486572}]
# first get lat and lon into arrays
lat, lon = np.transpose([[i['lat'],i['lon']] for i in tempDataList])
# I'm making up the police stations here. Say 5 police stations.
# you should load the actual data in your problem. My station locations
# are randomly located near the first 5 accidents
npolice = 5
# for reproducibility
np.random.seed(3)
plat = lat[:npolice] + np.random.normal(0, 0.02, npolice)
plon = lon[:npolice] + np.random.normal(0, 0.02, npolice)
index = closest(lat, lon, plat, plon)
# index = array([3, 1, 2, 0, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 1, 4, 2])
所以最近的警察局位置是
nearest = {'lat': plat[index], 'lon': plon[index]}
并且您可以使用 index
来访问每个警察局的名称或地址(如果您还存储了这些信息)。
希望有帮助。
关于python - 如何计算整列最接近的纬度经度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56463982/
我想创建一个返回值的方法(我们称之为“z”)。它的值由另一个值决定(我们称之为“y”)。基本上我想要的是满足以下条件: 当 x 接近 0 时,z 接近 100。 当 x 接近无穷大时,z 接近 0。
我正在尝试使用 Java 中的PreparedStatement 执行查询。 当我尝试执行查询时,收到错误号 1064(语法错误)。 我已经在 MySQL 查询浏览器中使用替换值对此进行了测试,效果很
我正在开发一个应用程序来解析 Scala 中的命令。命令的一个例子是: todo get milk for friday 所以计划是让一个非常智能的解析器将行分开并识别命令部分以及字符串中有时间引用的
来自 http://directwebremoting.org/dwr/reverse-ajax/index.html ,它表示它支持轮询、 cometd 、搭载。这是否意味着当我们实现这种方法时,我
我开始研究一个概念,该概念要求我找到一种方法,以给定的速度将矩形移向给定的点。我正在为 Android 开发,所以这对速度非常关键(它也将针对可能的数百个对象计算每一帧。) 我能想到的解决方案如下:
我正在处理一个处理“门票”的表(状态=“开放”或状态=“关闭”)。当票证关闭时,相关系统不会更改状态,而是会创建一个具有“已关闭”状态的重复条目。 对于“ticket_number”关键字段,如果存在
我正在尝试在 python 中执行一些 n-gram 计数,我想我可以使用 MySQL(MySQLdb 模块)来组织我的文本数据。 我有一个很大的表,大约有 1000 万条记录,代表由唯一数字 ID(
我正在尝试将数据添加到 mariadb 表中。我想将 val0 到 val5 作为查询的值传递。但我收到错误 OperationalError: close "%": 语法错误代码 list_Valu
我正在使用 (Py)OpenGL 显示 256 色索引图像。我将着色器与包含调色板的一维纹理一起使用。这是片段着色器代码: #version 330 uniform sampler2D texture
对于我的元素 areallybigpage.com (*),我想看看我们能用 CSS 的 transform: scale(...) 走多远。 这有效并以正常大小显示文本: #id1 { positi
我有两列带有数字数据的 Pandas 表(dtype flaot64)。 我将每列四舍五入到小数点后有 2 位数字,然后使用函数将其四舍五入到接近 0.5,但由于某种原因,只有一列四舍五入为 0.05
我正在构建一个由用户登录和注册组成的应用程序,但每次我在模拟器上测试它时,我都会收到强制关闭。以下是我在日志猫中收到的错误: 08-14 14:06:28.853: D/dalvikvm(828):
我正在尝试在 Python 中实现 Strassen 矩阵乘法。我已经让它发挥了一些作用。这是我的代码: a = [[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]] b
为什么这不起作用?这与 = 附近的命令字符串语法有关,但我似乎无法弄清楚,在线示例似乎完全相同。编辑: Activated In 是一列。 示例来自 How to select data from d
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及
我有一个测试区,它是来自数据库的动态文本,可能有数千个单词。我希望它中断并在每段中用句号将近 100 个(任意长度)单词作为一个段落。我能够在 100 个单词后中断,但不能完全停止。为了在 100 个
我是 hadoop 和 hive 的新手。我正在尝试将数据加载到配置单元表中,但遇到以下错误。 另一方面,我尝试使用语句 stmt.execute("INSERT INTO employee VALU
这是来自一个统计项目。我定义了下面的函数,但是当n接近400时,第二个方法很慢。第一个方法很好(这里有人帮助了我in this question) import Math.Combinatorics.
我正在尝试创建一个 css 侧边菜单,但是当我关闭菜单并将 div 容器宽度设置为 0 时,链接仍然可见。 这是 jsfiddle - https://jsfiddle.net/atLvp6k7/ 有
我对 MySQL 还很陌生。我必须使用输出参数调用存储过程。我在互联网上搜索了很多,但没有找到解决我的问题的正确方法。如果我使用 @outputParamName 调用存储过程,它会说我在 NULL
我是一名优秀的程序员,十分优秀!