- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么这不返回每个社区(边界框)中的点数?
import geopandas as gpd
def radius(points_neighbour, points_center, new_field_name, r):
"""
:param points_neighbour:
:param points_center:
:param new_field_name: new field_name attached to points_center
:param r: radius around points_center
:return:
"""
sindex = points_neighbour.sindex
pts_in_neighbour = []
for i, pt_center in points_center.iterrows():
nearest_index = list(sindex.intersection((pt_center.LATITUDE-r, pt_center.LONGITUDE-r, pt_center.LATITUDE+r, pt_center.LONGITUDE+r)))
pts_in_this_neighbour = points_neighbour[nearest_index]
pts_in_neighbour.append(len(pts_in_this_neighbour))
points_center[new_field_name] = gpd.GeoSeries(pts_in_neighbour)
@property
def sindex(self):
if not self._sindex_generated:
self._generate_sindex()
return self._sindex
def radius(points_neighbour, points_center, new_field_name, r):
"""
:param points_neighbour:
:param points_center:
:param new_field_name: new field_name attached to points_center
:param r: radius around points_center
:return:
"""
sindex = points_neighbour.sindex
pts_in_neighbour = []
for i, pt_center in points_center.iterrows():
pts_in_this_neighbour = 0
for n in sindex.intersection(((pt_center.LATITUDE-r, pt_center.LONGITUDE-r, pt_center.LATITUDE+r, pt_center.LONGITUDE+r))):
dist = pt_center.distance(points_neighbour['geometry'][n])
if dist < radius:
pts_in_this_neighbour = pts_in_this_neighbour + 1
pts_in_neighbour.append(pts_in_this_neighbour)
points_center[new_field_name] = gpd.GeoSeries(pts_in_neighbour)
最佳答案
我不会直接回答你的问题,而是认为你做错了。在争论完这个之后,我会给出一个更好的答案。
为什么你做错了
r 树非常适合在两个或三个欧几里得维度中进行边界框查询。
您正在在三维空间中弯曲的二维表面上查找经纬度点。结果是您的坐标系将产生奇点和不连续点:180°W 与 180°E 相同,2°E x 90°N 接近 2°W x 90°N。 r 树不会捕获这些类型的东西!
但是,即使它们是一个很好的解决方案,您采用 lat±r 和 lon±r 的想法会产生一个正方形区域;相反,您可能希望在您的点周围有一个圆形区域。
如何正确做
#/usr/bin/env python3
import numpy as np
import scipy as sp
import scipy.spatial
Rearth = 6371
#Generate uniformly-distributed lon-lat points on a sphere
#See: http://mathworld.wolfram.com/SpherePointPicking.html
def GenerateUniformSpherical(num):
#Generate random variates
pts = np.random.uniform(low=0, high=1, size=(num,2))
#Convert to sphere space
pts[:,0] = 2*np.pi*pts[:,0] #0-360 degrees
pts[:,1] = np.arccos(2*pts[:,1]-1) #0-180 degrees
#Convert to degrees
pts = np.degrees(pts)
#Shift ranges to lon-lat
pts[:,0] -= 180
pts[:,1] -= 90
return pts
def ConvertToXYZ(lonlat):
theta = np.radians(lonlat[:,0])+np.pi
phi = np.radians(lonlat[:,1])+np.pi/2
x = Rearth*np.cos(theta)*np.sin(phi)
y = Rearth*np.sin(theta)*np.sin(phi)
z = Rearth*np.cos(phi)
return np.transpose(np.vstack((x,y,z)))
#Get all points which lie with `r_km` Great Circle kilometres of the query
#points `qpts`.
def GetNeighboursWithinR(qpts,kdtree,r_km):
#We need to convert Great Circle kilometres into chord length kilometres in
#order to use the kd-tree
#See: http://mathworld.wolfram.com/CircularSegment.html
angle = r_km/Rearth
chord_length = 2*Rearth*np.sin(angle/2)
pts3d = ConvertToXYZ(qpts)
#See: https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.KDTree.query_ball_point.html#scipy.spatial.KDTree.query_ball_point
#p=2 implies Euclidean distance, eps=0 implies no approximation (slower)
return kdtree.query_ball_point(pts3d,chord_length,p=2,eps=0)
##############################################################################
#WARNING! Do NOT alter pts3d or kdtree will malfunction and need to be rebuilt
##############################################################################
##############################
#Correctness tests on the North, South, East, and West poles, along with Kolkata
ptsll = np.array([[0,90],[0,-90],[0,0],[-180,0],[88.3639,22.5726]])
pts3d = ConvertToXYZ(ptsll)
kdtree = sp.spatial.KDTree(pts3d, leafsize=10) #Stick points in kd-tree for fast look-up
qptsll = np.array([[-3,88],[5,-85],[10,10],[-178,3],[175,4]])
GetNeighboursWithinR(qptsll, kdtree, 2000)
##############################
#Stress tests
ptsll = GenerateUniformSpherical(100000) #Generate uniformly-distributed lon-lat points on a sphere
pts3d = ConvertToXYZ(ptsll) #Convert points to 3d
#See: https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.KDTree.html
kdtree = sp.spatial.KDTree(pts3d, leafsize=10) #Stick points in kd-tree for fast look-up
qptsll = GenerateUniformSpherical(100) #We'll find neighbours near these points
GetNeighboursWithinR(qptsll, kdtree, 500)
关于gis - RTree : Count points in the neighbourhoods within each point of another set of points,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44622233/
我想在自定义格式和 GIS 程序中查看和编辑一些类似 map 的数据(很明显的东西,比如带注释的点/路径/多边形/位图;还有四叉树掩码,但如果需要我可以将它们转换成其他东西)就像 Qgis 一样,它看
我有一张已经数字化并转换为矢量层的 map (仅河流)。 问题在于矢量化为每个河流生成了大量的分段,这些分段显示为不同的特征(每个分段可能具有多个直线分段,但它们不覆盖整个河流)。我正在寻找的是一种工
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
将栅格数据导入到补丁时,有没有办法缩短计算时间? 这是我的代码。这通常需要大约 20 分钟才能完成。我的世界是500x500。我发现,如果只考虑 true 或 false,使用 gis:interse
GPS是GIS的应用之一吗? 是否有任何 sw create gps 用于特定位置(我确定)? 谢谢 最佳答案 您可以将 GPS 视为收集位置数据的工具。然后将“传递”以供进一步使用:通过您的智能手机
我已经搜索过了,相信我,我已经搜索过了! 但我无法确切地找到所有东西是如何粘合在一起的。 有人可以从开发的角度概述一下 GIS 的工作原理吗? 我了解栅格、图层、空间数据、几何等背后的概念,但我完全不
是否有相当于 GIS 应用程序的“Hello World”程序? 我希望更加熟悉 GIS 应用程序的开发。有哪些流行的(免费/低成本)教程和/或示例应用程序可以帮助人们入门?有没有您认为对 GIS 初
我正在使用 GIS 扩展开发 NetLogo 模型以导入道路网络 shapefile。当我在大约 5x5 公里的小区域上工作时,该模型工作正常。但是,我希望允许模型的潜在用户自行确定他们感兴趣的领域/
我想为计算密集型和耗时的矢量 GIS 操作开发并行算法。我之前尝试过进行多边形叠加。也在寻找其他操作。 最佳答案 即使使用相对较小的 shapefile 但包含大量变量,“合并”花费的时间让我感到惊讶
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 7年前关闭。 Improve this qu
是否可以安装用于基于开放式街道地图数据进行地理编码的服务器? 不幸的是,调用Web服务是没有选择的,我们需要一个自己的服务器。 我看到Map Server不提供地理编码。 最佳答案 build you
我正在研究 pyqgis(使用 pyqgis cookbook 并开始加载矢量图层。 到目前为止,我能够打开一个我已经知道存在于 geopackge 中的层。 iface.addVectorLayer
我想学习如何使用 postGIS 构建应用程序。我想知道是否有好的开源示例可供我查看?我对那些不仅使用 postgres 存储 map 数据而且在应用程序代码中广泛使用 postGIS 特殊功能(聚合
GeoJSON中的LineString和MultiPoint有什么区别? 对我来说,给出的例子是相同的。 http://geojson.org/geojson-spec.html#id3。 我正在计划
我想从芬兰的 OSM 中提取特定于城市的数据。我有芬兰的数据,但我只需要 5 个城市的数据:赫尔辛基、埃斯波、万塔、考尼亚宁和休蒂奥。我可以提取赫尔辛基所需的数据,但我需要其他城市的城市边界(这样我可
我对 GIS 了解不多。我需要有关编辑 GeoTiff 文件坐标的帮助。 例如,这些是文件的角坐标: 左上角 ( 62.0000000, 47.0000000) ( 62d 0' 0.00"E, 47
我想知道特定地理坐标与城市列表的距离(“远”是指坐标与城市之间的欧几里德距离,不考虑道路)。为此,我需要为每个城市找到一个边界框 - 都位于以色列。 This post讨论国家边界框,但我在城市级别需
point有什么区别和 multipoint ? linestring和 multilinestring ? polygon和 multipolygon ?在 PostGIS 中 定义“多”形状背后的
我是一名优秀的程序员,十分优秀!