gpt4 book ai didi

c# - Mysql 半正矢过程(半径)使用中心点

转载 作者:行者123 更新时间:2023-11-29 14:48:24 28 4
gpt4 key购买 nike

我对 MySql 相当陌生,我想要创建一个过程,在其中我可以插入任何邮政编码和距离,然后取回该距离内的所有邮政编码。我确实找到了一个公式并尝试根据我的需要 reshape 它,但我无法做到。我所拥有的如下。该示例来自此处 http://code.google.com/apis/maps/articles/phpsqlsearch.html 。但是,我不想使用 37、-122 坐标,我想使用我插入程序的任何邮政编码。如果可以的话我会开始赏金,但我必须等待。这个问题困扰了我一整天,所以非常感谢您的帮助。这个让我很难过,因为我相信它使用两组纬度/经度,而我只想要中心纬度/经度的半径

SELECT state,city,zipcode,
(3959
* acos(
cos(radians(37))
* cos(radians(x(location)))
* cos(radians(y(location)) - radians(-122))
+ sin(radians(37)) * sin(radians(x(location)))))
AS distance
FROM zipcodes
HAVING distance < 25
ORDER BY distance
LIMIT 0, 20;

最佳答案

您可以像处理碰撞检测样式算法一样处理此问题。通过查找某个点的最小和最大纬度/经度(给定半径)来检查坐标是否在边界框内,并确保搜索满足一些快速评估标准(例如 lat <= 1.5 ),然后再运行更多资源密集型操作检查。

这里有一个包含 SQL 和 Java 代码的工作示例:

http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates

总而言之,它的内容如下:

Simply combining the conditions with AND:

SELECT * FROM Places WHERE
(Lat => 1.2393 AND Lat <= 1.5532) AND (Lon >= -1.8184 AND Lon <= 0.4221)
AND
acos(sin(1.3963) * sin(Lat) + cos(1.3963) * cos(Lat) * cos(Lon -

(-0.6981))) <= 0.1570;

Most query optimizers are smart enough to perform an index scan to quickly find places satisfying (Lat >= 1.2393

然后它会继续执行一些额外的检查。下面有一些沿着同一主题的替代方法。

这对你有帮助吗?看来您有能力自己将其写入程序,但如果您愿意,我可以尝试为您编写一个程序。如果是这样,您可以粘贴/发布您的表或 SQL 批处理脚本。

关于c# - Mysql 半正矢过程(半径)使用中心点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6352089/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com