- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题:什么算法/或算法s 使用spatial databases检查地理点(纬度和经度)是否属于“geo rect”(4 个由经线和平行线连接的地理点)?
一开始以为是简单的投影加算法二维平面索引,如 r-tree,但是那么这些数据库如何处理南/北极和/或 -180 和 180 经度附近的点。
例如让我们的点是(0, E 180)
,矩形是(N 1, W 179), (N 1, E 179), (S 1, E 179), (S 1, E 179)
,
其中 N = 北,E = 东,W = 西,S = 南。
如果将矩形映射到Mercator然后我们得到:
(-126799830, 5434036),(139214148, 6832332),
(-126799830, -16488164)(139214148, -17886459),
我们的点是 (142452996, -5527064)。
并且在这样的投影点不属于矩形,而它实际上属于。
实际上没有任何投影可以帮助解决这种情况,因为它应该将地理点映射到几个不同的位置,以处理以下情况矩形跨越 E 180、W 180、N 90、S 90 以及矩形不跨越这些边界。
那么空间数据库如何检查地理点是否属于地理矩形?
最佳答案
查看postgis源代码,地理类型的“within”计算完成计算对象之间的距离。
这是 geography_dwtithin 函数,由 st_dwithin https://github.com/gravitystorm/postgis/blob/master/postgis/geography_measurement.c#L107 调用
然后 lwgeom_distance_spheroid http://postgis.net/docs/doxygen/2.1/da/de7/liblwgeom_8h_a2aac0f91b6dfd27873ab828a1874805b.html在测量距离之前比较 bboxes。
在第 1756 - 1764 行,您可以找到最简单情况(点对点)的计算。其他情况使用相同的逻辑,但寻找最近的点。
然后你可以在这里找到sphere_distance的计算 http://postgis.net/docs/doxygen/2.1/d2/ddd/lwgeodetic_8c_ab9f003c831c66b723beca7103e811785.html#ab9f003c831c66b723beca7103e811785
和此处的 spheroid_distance 计算 http://postgis.net/docs/doxygen/2.1/d0/d7a/lwgeodetic_8h_a5c2565cd7f88783c32b777ca58d4dbcc.html#a5c2565cd7f88783c32b777ca58d4dbcc
关于algorithm - ST_Within/ST_Contains 如何处理地理数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44801911/
我正在尝试使用以下查询将纬度/经度与特定的相邻位置相匹配 create table address_classification as ( select distinct buildingid,str
我有两张 table 。首先是点,其次是多边形。我需要根据属性 gid 找出哪些点在所需的多边形中。 使用查询:SELECT table1.* FROM table1, table2 WHERE ta
我有一个简单的带有 JOIN 的 sql 查询,如果点在多边形中则连接: SELECT `oktmo_geometry`.`oktmo` FROM `place` INNER JOIN `oktmo_
我正在使用 MySQL ST_Contains 来查明一个区域是否包含在另一个区域中。因此我有一个这样的表: CREATE TABLE tablex (id int, geoPoly MULTIPOL
我已经使用 QGIS 将两个形状文件导入到 pgAdmin 4 (PostgreSQL) 中,我使用 PostGIS 扩展来访问空间命令。 我想检查 Gemeinden(多边形)表中包含的所有 POI
我在使用 PostGIS 2.1.7 和 PostgreSQL 9.4 时遇到了一个奇怪的情况。 我正在尝试将位于加利福尼亚州(纬度:36.671112,经度:-121.662636,正如我们在这张
UPDATE tbl SET city=s.city_name FROM shp AS s WHERE ST_CONTAINS(s.city_geom,geom); 使用上面的代码,我可以将确切的城市
我一直在尝试以下但总是失败, roomTypeSQL = "SELECT spftype FROM cameron_toll_spatialfeatures WHERE ST_Contains(ST_
问题:什么算法/或算法s 使用spatial databases检查地理点(纬度和经度)是否属于“geo rect”(4 个由经线和平行线连接的地理点)? 一开始以为是简单的投影加算法二维平面索引,如
我使用 mysql 空间函数。 我必须了解点是否位于多边形中。 最初我使用 MBRContains 但它以一种奇怪的方式工作,所以我遇到了以下错误:Mysql function MBRContains
我有一个 BigQuery 表,其中包含地址,包括 Lat/Lng 和其他 BQ 表,其中包含从人口普查 shapefile 导入的工作几何定义。对于地址表中的每一行,我试图查找包含它的几何行。 以下
我正在努力让一个简单的 Postgresql/Postgis 语句起作用,我需要一个多边形(在本例中是一个矩形)内的所有点 SELECT * FROM points_table WHERE ST_Co
尝试使用我能找到的 JAR(不确定它们是否是最佳选择,我需要使用 ESRI 并在 Hive 中执行): ADD JAR /home/user/lib/esri-geometry-api-1.2.1.j
我正在使用 postgis 的 ST_LineLocatePoint 找出 LineString 上最接近给定 Point 的点>,并使用 ST_LineInterpolatePoint 从返回的 f
Contains 与 ST_Contains 之间有什么区别以及使用哪一个? Contains(region_data," +"GeomFromText('Point(" + latitude + "
我在使用 mysql 的 st_contains 时遇到了差异。我有一个区域表,其中包含纬度和经度列,我只想查询位于多边形内的所有记录。 当我这样做时,mysql返回多边形之外的记录,并且错过了肯定在
SELECT ST_Contains ( GEOMFROMTEXT( 'POLYGON(18.4560233 73.8691627, 18.456333 73.869013,
MySQL 5.1 是否包含任何 ST_CONTAINS() 等效函数? 我有一些以几何格式存储的多边形数据,我想检查它是否包含一个点查询就像 select * from table_name WHE
我正在尝试连接两个相对较大的几何表。几何体 A 由大的多边形组成。几何 B 由较小的多边形组成。我想左连接几何 A 包含几何 B 的行。几何 B 的多边形可能在几何 A 的边缘,但不在几何 A 的外部
我有一个存储在几何数组中的边界。 (喜欢 {...,...,...})我的目标是执行 ST_Contains 查询。我想看看一个节点是否在该边界内。 我试过类似的东西 SELECT ST_Contai
我是一名优秀的程序员,十分优秀!