C# 使用中心点的Mysql Haversine过程(半径)

C# 使用中心点的Mysql Haversine过程(半径),c#,mysql,C#,Mysql,我是MySql的新手,我想创建一个过程,在这个过程中,我可以插入任何zipcode和一段距离,然后返回该距离内的所有zipcode。我确实找到了一个公式,并试图根据我的需要对其进行重塑,但我无法做到这一点。下面是我所拥有的。下面是一个例子。但是,我不想使用37,-122坐标,我想使用我推到过程中的任何zipcode。如果可以的话,我会开始悬赏,但我不得不等待。这件事一整天都在困扰着我,所以我非常感谢你的帮助。这个问题让我很困惑,因为我相信它使用了两组lat/lon,我只需要一个中心lat/lon

我是MySql的新手,我想创建一个过程,在这个过程中,我可以插入任何zipcode和一段距离,然后返回该距离内的所有zipcode。我确实找到了一个公式,并试图根据我的需要对其进行重塑,但我无法做到这一点。下面是我所拥有的。下面是一个例子。但是,我不想使用37,-122坐标,我想使用我推到过程中的任何zipcode。如果可以的话,我会开始悬赏,但我不得不等待。这件事一整天都在困扰着我,所以我非常感谢你的帮助。这个问题让我很困惑,因为我相信它使用了两组lat/lon,我只需要一个中心lat/lon的半径

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;
选择州、市、zipcode、,
(3959
*acos(
cos(弧度(37))
*cos(弧度(x(位置)))
*cos(弧度(y(位置))-弧度(-122))
+sin(弧度(37))*sin(弧度(x(位置)щщ))
作为距离
从zipcodes
距离小于25的
按距离排序
限值0,20;

您可以采用与碰撞检测式算法相同的方法来处理此问题。通过查找点的最小和最大lat/long(给定半径),检查坐标是否在边界框内,并确保搜索满足一些快速评估标准(例如,
lat 1.2393和lat=-1.8184和Lon我可能也没有抓住你问题的重点。你只是想用你现有的程序搜索只使用一个邮政编码吗?如果是这样,请参阅我上面关于发布你的表格的评论。)。
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 -