2013-01-31 69 views
2

我有一个网站,我已经创建出售本地物品,如果免费供所有人使用。但我现在已经遇到了一个小问题!现在,人们形成了更远的距离,我希望他们能够通过距离他们的距离搜索和点亮所有物品,并且/或者查看他们区域中的所有物品。按距离对结果列表进行排序

我一直在收集每个人的邮政编码并将它们转换为东经和北经的坐标,而不是纬度经度。

创建一个新的recodset在飞行中做最好的方式做距离calc然后按距离排序还是有更好的方式,将使用较少的资源在网站上?

下面是答案

strSQL = "SELECT *, (3959 * acos(cos(radians(" & strMyLat & 
    ")) * cos(radians(Latitude)) * cos(radians(Longitude) - radians(" & strMyLng & 
    ")) + sin(radians(" & strMyLat & 
    ")) * sin(radians(Latitude)))) AS distance FROM TABLE WHERE HAVING distance < 3;" '## 3 Miles 
+0

我一直想知道很长一段时间。好的问题+1 –

+0

就我个人而言,我更喜欢纬度/经度坐标,因为那些通常更“标准”(特别是通过诸如各种基于网络的地图之类的东西进行常见曝光)。另外,根据电网规模,您可能会失真。你的数据库后端是什么?有些RDBMS具有内置的地理类型(或扩展),因此您可以利用数据库的全部功能来执行选择/排序。 –

+0

这是一个使用PHP tho的类似帖子:http://stackoverflow.com/questions/2296087/using-php-and-google-maps-api-to-work-out-distance-between-2-post-codes-英国 – Kaf

回答

-1

东坐标和北是不是要走的路。

您必须首先将坐标(无论它们是东向,北向等) 转换为纬度,经度十进制度WGS84。
这是全世界使用cooridnate系统,现在你可以开始计算:

然后简单地计算两个纬度,经度对,例如,与半正矢,距离公式之间的距离(见谷歌或维基) 。

+0

感谢您的回复,我必须立即执行此操作,以前的评论为我提供了使用MySQL进行调用的思想。 – Hutchyweb

+0

这与MySQl无关:您需要lat纬度坐标WGS84,就像您在谷歌地图或谷歌地图上输入和接收一样。如果您有一个东经北向的数据库,您可以将其转换为经纬度WGS84 – AlexWien

+0

Haversine-Distance公式首先将纬度/经度转换为一个距离单位,然后计算这两个点之间的距离。东方和北方的坐标已经在一个距离单位,所以这是不太需要做的数学。 –

0

要回答你的问题:

我几乎做同样的事情,去年,但随着纬度/长。并且实时计算距离。距离是使用海峡数学计算的,所以速度很快,并且没有使用大量的资源。
对Easting和Northing坐标系不熟悉,所以它可能会或可能不会更快,以便首先将它们永久转换为数据库中的lat/long或其他坐标系。

现在,如果您决定尽可能快地查询查询,并且您正在处理一小部分邮政编码,则可以创建一个查找表,其中包含任意两个邮政编码之间的距离已经计算。
但是,您的列表越大,这变得越笨拙。例如,根据维基百科,英国大约有1,700,000个邮政编码,因此这样的表格需要其平方,即28900000000记录。

祝你好运!

P.s.下面是找到2东距/北距COORDS之间的距离公式:

d = squareroot(square(E1-E2)+square(N1-N2))/1000 

1000是假设你COORDS是米,要在千米答案。否则,请相应地调整此号码。

+0

1,755,212我目前正在将它们导入到我的数据库中。谢谢。正如我上面所说,我要去尝试MySQL地理的东西来做这个工作,我会在完成后发布代码 – Hutchyweb

+0

看起来,它保持在东方和北方的坐标系更快。这样你就不必在数学运算过程中将经纬度转换为径向。 –