问题标签 [geospatial]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
7436 浏览

php - 用 SQLite 计算大圆距离

这是我的问题,我有一个包含位置和纬度/经度的 SQLite 表。基本上我需要:

HAVERSINE()是一个 PHP 函数,它应该返回给定一对纬度和经度值的大圆距离(以英里或公里为单位)。其中一对应由 PHP 提供,另一对应由表中可用的每个纬度/经度行提供locations

由于 SQLite 没有任何地理空间扩展(AFAIK SpatiaLite存在,但仍然......)我猜最好的方法是使用带有 PDO 方法之一的自定义函数:

我认为这种情况PDO::sqliteCreateFunction()就足够了,但是我对这个函数的有限经验可以减少到类似于 PHP 手册中提供的用例:

我在弄清楚如何获得 SQLite 用户定义的函数来同时处理来自 PHP 和表数据的数据时遇到了一些麻烦,如果有人可以帮助我解决这个问题,同时也理解 SQLite UDF,我将不胜感激(一个巨大的胜利SQLite IMO) 好一点。

提前致谢!

0 投票
2 回答
26851 浏览

php - 计算地理接近度的公式

我需要在我的应用程序中实现地理邻近搜索,但我对要使用的正确公式感到非常困惑。在 Web 和 StackOverflow 中进行一些搜索后,我发现解决方案是:

  1. 使用Haversine 公式
  2. 使用大圆距离公式
  3. 在数据库中使用空间搜索引擎

选项#3 对我的 ATM 来说真的不是一个选项。现在我有点困惑,因为我一直认为大圆距离公式哈弗辛公式同义词,但显然我错了?

哈弗辛公式

上面的屏幕截图取自很棒的Geo (proximity) Search with MySQL论文,并使用了以下函数:

我还看到了同一个公式余弦球定律的变化,比如这个:

它使用以下功能:

我不是数学专家,但这些公式是否相同?我遇到了更多的变体和公式(例如余弦的球面定律和文森蒂公式 -这似乎是最准确的),这让我更加困惑......

我需要选择一个好的通用公式在 PHP/MySQL 中实现。谁能解释我上面提到的公式之间的区别?

  • 哪个计算速度最快?
  • 哪一个提供最准确的结果?
  • 就结果的速度/准确性而言,哪一个是最好的?

感谢您对这些问题的洞察力。


基于唯一的理论答案,我测试了以下大圆距离公式:

  • 文森提公式
  • 哈弗辛公式
  • 球面余弦定律

Vincenty 公式非常慢,但它非常准确(低至 0.5 毫米)

Haversine 公式比 Vincenty 公式快得多,我能够在大约 6 秒内运行 100 万次计算,这对于我的需求来说几乎是可以接受的。

余弦公式的球面定律显示出几乎是哈弗辛公式的两倍,并且对于大多数用例来说,精度差异是可忽略的。


以下是一些测试地点:

  • 谷歌总部( 37.422045, -122.084347)
  • 加利福尼亚州旧金山( 37.77493, -122.419416)
  • 法国埃菲尔铁塔( 48.8582, 2.294407)
  • 悉尼歌剧院( -33.856553, 151.214696)

Google 总部 - 加利福尼亚州旧金山:

  • 文森特公式:49 087.066 meters
  • 哈弗辛公式:49 103.006 meters
  • 球面余弦定律:49 103.006 meters

Google 总部 - 法国埃菲尔铁塔:

  • 文森特公式:8 989 724.399 meters
  • 哈弗辛公式:8 967 042.917 meters
  • 球面余弦定律:8 967 042.917 meters

Google 总部 - 悉尼歌剧院:

  • 文森特公式:11 939 773.640 meters
  • 哈弗辛公式:11 952 717.240 meters
  • 球面余弦定律:11 952 717.240 meters

正如您所看到的,Haversine 公式和余弦球面定律之间没有明显的区别,但是与 Vincenty 公式相比,两者的距离偏移量高达 22 公里,因为它使用地球的椭球近似而不是球形近似。

0 投票
2 回答
436 浏览

math - 判断球面三角形是否钝角

给定由经度和纬度定义的两点 A 和 B,我想确定另一个点 C 是否在~A 和 B 之间。~对于我来说很难定义。我不是说在线 - 它几乎肯定不会。

几何图 http://www.freeimagehosting.net/uploads/b5c5ebf480.jpg

在此图中,点 C 介于 A 和 B 之间,因为它位于点 A 和 B 的法线与它们之间的线(法线用细线表示)之间。D点不是~在~A和B之间,而是~在~B和F之间。

另一种说法是,我想确定三角形 ABC 和 ABD 是否钝。

请注意,这些点将非常靠近 - 通常在 10 米以内。

我认为haversines定律可能会有所帮助,但我不知道haversine的逆是什么。

非常感谢所有的帮助。

0 投票
1 回答
745 浏览

.net - .Net 库来处理来自 SQL Server 的空间数据

我想创建将在地图上显示空间数据的应用程序。我正在考虑使用 SQL Server 空间功能,但不确定如何在 C# 中处理该数据。有没有我可以使用的好图书馆?

0 投票
1 回答
442 浏览

silverlight - WCF Ria Services 如何制作一个在客户端已知的自定义实体?

我构建了我的实体模型。我的一个业务对象,我们称它为 Store 具有空间数据类型。很快我发现空间字段不是通过 EF4 映射的。但是,我通过编辑定义如下查询的 xml 声明来努力摆脱困境:

此时我决定通过像这样的部分类自定义我的 Store 实体,只是为了进行转换并仍然存储 SQLGeography 数据,在客户端只返回一个 double[](因为我既不能返回 SqlGeography,也不能返回 Location(Bing数据类型)。

}

如何在客户端项目中了解我的小定制的存储数据类型?谢谢!

0 投票
1 回答
209 浏览

sql-server-2008 - SQL2008地理查询转JPG

我想获取 SQL 地理查询的结果,并创建一个 JPG - 类似于您在“空间视图”选项卡中看到的内容。

我正在为 200 多个查询执行此操作,所以我可以自动化的东西可能会很好。是否已经存在应用程序来执行此操作,还是我需要自己编写?

0 投票
2 回答
4386 浏览

maps - 生成像 SpatialKey 这样的密度/热图

SpatialKey生成了一些非常漂亮的热图,我们正在研究为内部项目执行此操作以可视化大量点所涉及的内容。我正在寻找关于从哪里开始的一些想法的反馈(这只是一个非常有趣的问题)。

SpatialKey 热图 http://img697.imageshack.us/img697/7964/resolutiondays508x17550.jpg

我们知道他们使用的是 Flash,据我们所知,热图是交互式的,而不是从图块服务器呈现的。我们对如何实现的第一个猜测是服务器为他们的 Flash 客户端提供了一个网格——每个单元格都有一个由服务器计算的计数。Flash 客户端然后根据网格中的单元格值进行一些插值,以生成您在上面看到的漂亮输出。

在这个阶段,我只是对他们如何在服务器端有效地生成网格感兴趣(如果我们对他们实现的假设是正确的)。似乎它会涉及:

  1. 查询当前地图范围内的内容
  2. 对这些范围内的每个单元格执行聚合子查询(如上例所示进行计数、求和或平均)。

以合理的网格分辨率在多个缩放级别上执行此操作,您似乎需要一个自定义空间索引来提高效率。

任何人解释替代路线?如果重要的话,我们在这里习惯于使用 PostGIS 将数据存储在 PostgreSQL 中作为空间索引,但我愿意尝试任何事情。

0 投票
18 回答
247047 浏览

mysql - 使用 SQL 查询查找最近的纬度/经度

我有纬度和经度,我想从数据库中提取记录,该记录具有距离最近的纬度和经度,如果该距离大于指定的距离,则不要检索它。

表结构:

0 投票
1 回答
4069 浏览

django - GeoDjango,dwithin 和 distance_lt 之间的区别?

使用geoDjango,有什么区别

?
他们是同一件事,还是他们在做微妙不同的事情?

0 投票
2 回答
938 浏览

python - 使用 Google App Engine 的 GeoModel - 查询

我正在尝试使用 GeoModel python 模块快速访问我的 Google App Engine 应用程序的地理空间数据。对于我遇到的问题,我只是有一些一般性的问题。有两个主要方法,proximity_fetch 和 bounding_box_fetch,您可以使用它们来返回查询。它们实际上返回一个结果集,而不是过滤查询,这意味着您需要在传递过滤查询之前完全准备好过滤查询。它还限制了您迭代查询集,因为结果是获取的,而您没有将偏移量输入到提取中的选项。

如果不修改代码,任何人都可以推荐一种解决方案来指定查询的偏移量吗?我的问题是我需要根据变量检查每个结果以查看是否可以使用它,否则将其丢弃并测试下一个。我可能会遇到需要进行额外提取但从偏移量开始的情况。