c********r 发帖数: 92 | 1 请问一下,在SQL中,如何高效查询最近距离内的用户。比如买车的网站,给定一个地
址,就告诉你20mile以内的dealer。
一个一个查肯定不行,不知道有啥高效解决办法。
多谢先。 |
l******t 发帖数: 660 | 2 这个不是靠sql 写的, 一般是用programming langugge实现算法, 然后存在database
, 当初programming版有算法讨论, 你去收一下。 |
s**********o 发帖数: 14359 | 3 不是有SPATIAL DATATYPE了么?
【在 c********r 的大作中提到】 : 请问一下,在SQL中,如何高效查询最近距离内的用户。比如买车的网站,给定一个地 : 址,就告诉你20mile以内的dealer。 : 一个一个查肯定不行,不知道有啥高效解决办法。 : 多谢先。
|
l******t 发帖数: 660 | 4 sql server 2012里有map和spatial database 的function. 不知道能不能用上
database
【在 l******t 的大作中提到】 : 这个不是靠sql 写的, 一般是用programming langugge实现算法, 然后存在database : , 当初programming版有算法讨论, 你去收一下。
|
c********r 发帖数: 92 | 5 网上找了个工具:http://sphinxsearch.com/
但不知道是不是最新的。能否告知一下当初在programming 讨论时的关键词吗,一时没
搜到那个thread.
再次感谢。
【在 l******t 的大作中提到】 : sql server 2012里有map和spatial database 的function. 不知道能不能用上 : : database
|
l******t 发帖数: 660 | 6 不记得了, 是好几年前我搞算法的时候看到的, 还有一个办法, google map和bing
map都有现成的web service, 你看看文档, 直接call应该可以。
【在 c********r 的大作中提到】 : 网上找了个工具:http://sphinxsearch.com/ : 但不知道是不是最新的。能否告知一下当初在programming 讨论时的关键词吗,一时没 : 搜到那个thread. : 再次感谢。
|
c********r 发帖数: 92 | 7 多谢啦。
bing
【在 l******t 的大作中提到】 : 不记得了, 是好几年前我搞算法的时候看到的, 还有一个办法, google map和bing : map都有现成的web service, 你看看文档, 直接call应该可以。
|
s**********o 发帖数: 14359 | 8 GIS软件有专门的数据库支持这些东西的,这种距离,网络是GIS里常见的功能,比如从
一点到另一点距离,最快的,最近的,走高速的 |
w***a 发帖数: 313 | 9 8年以前弄过一个。
要有一个地址坐标数据库。我拿到的是邮编以及对应的经纬度数据库。
步骤是,先把你要找的地址转成经纬度,经纬度可以与距离互相换算,换算出20mile对
应的经纬度分别是多少(不用太精确),再select 邮编 where latitude, longitude
< 20mile对应的经纬度, 然后从dealer数据表里,找出邮编是这些选出的邮编的dealer
,然后再计算复查这些dealer到你要找的地址的精确距离,把20mile以外的去除,剩下
的就可以输出了。
我以前做的,是找一个品牌产品的代销店。按上述算法实现很完美。
【在 c********r 的大作中提到】 : 请问一下,在SQL中,如何高效查询最近距离内的用户。比如买车的网站,给定一个地 : 址,就告诉你20mile以内的dealer。 : 一个一个查肯定不行,不知道有啥高效解决办法。 : 多谢先。
|
s**********o 发帖数: 14359 | 10 还是要分直径20MILES画圆呢,还是网络路程20MILES |
|
|
B*****g 发帖数: 34098 | 11 我觉得地图显示都是方块
【在 s**********o 的大作中提到】 : 还是要分直径20MILES画圆呢,还是网络路程20MILES
|
w***a 发帖数: 313 | 12 看这个图,
1,根据用户输入,选定原点。
2,select 出黄方框中所有的dealer (所有星星),条件是经纬度距离小于20mile.
3,程序计算出所有dealer的具体距离,排除大于20mile的 (绿色的)
4, 输出剩下的(蓝色的)dealer
重点是,经过2的过滤,仅仅需要计算很少的几个dealer距离就可以了。速度很快。
【在 B*****g 的大作中提到】 : 我觉得地图显示都是方块
|
s**********o 发帖数: 14359 | 13 但其实人问的是开车20MILES以内的DEALER,光画圆没有实际意义,去的时候还是要开
车的,常见的是岛上的或者半岛上的DEALER,或者我在岛上,还是要看路程多少吧。 |
w***a 发帖数: 313 | 14 具体路程是要算的。画圆画框的意义在于,排除了99%以上的dealer(就是那些框外的,
你即使按直线开,也大于20mile的距离的dealer),只要算方框内的几个就可以了。计
算量少了几个数量级。
【在 s**********o 的大作中提到】 : 但其实人问的是开车20MILES以内的DEALER,光画圆没有实际意义,去的时候还是要开 : 车的,常见的是岛上的或者半岛上的DEALER,或者我在岛上,还是要看路程多少吧。
|
B*****g 发帖数: 34098 | 15 这个有里
【在 w***a 的大作中提到】 : 具体路程是要算的。画圆画框的意义在于,排除了99%以上的dealer(就是那些框外的, : 你即使按直线开,也大于20mile的距离的dealer),只要算方框内的几个就可以了。计 : 算量少了几个数量级。
|
B*****g 发帖数: 34098 | 16 理论上是这样,实际上呢?
【在 w***a 的大作中提到】 : 看这个图, : 1,根据用户输入,选定原点。 : 2,select 出黄方框中所有的dealer (所有星星),条件是经纬度距离小于20mile. : 3,程序计算出所有dealer的具体距离,排除大于20mile的 (绿色的) : 4, 输出剩下的(蓝色的)dealer : 重点是,经过2的过滤,仅仅需要计算很少的几个dealer距离就可以了。速度很快。
|
s**********o 发帖数: 14359 | 17 方框好做,比圆大,先排除一部分,其实用方框就可以了,多数人不会太在乎,主要还是路
径的20MILES不好算
【在 B*****g 的大作中提到】 : 理论上是这样,实际上呢?
|
B*****g 发帖数: 34098 | 18 同理呀,先拿到直径小于20mile的,再算距离,以前给个小网站干过干过。不过我怀疑
不会给这枚精确,不如找几个网站试试?
【在 s**********o 的大作中提到】 : 方框好做,比圆大,先排除一部分,其实用方框就可以了,多数人不会太在乎,主要还是路 : 径的20MILES不好算
|
w***a 发帖数: 313 | 19 beijing你看贴不仔细啊,我说的就是我做的实际案例。实际效果非常好,从十几万代
销商里找本地代理,输入地址后,一个点击,零点几秒就出来网页了。
【在 B*****g 的大作中提到】 : 理论上是这样,实际上呢?
|
B*****g 发帖数: 34098 | 20 如果用户多了呢?这个计算量能不能减下来?
【在 w***a 的大作中提到】 : beijing你看贴不仔细啊,我说的就是我做的实际案例。实际效果非常好,从十几万代 : 销商里找本地代理,输入地址后,一个点击,零点几秒就出来网页了。
|
|
|
s**********o 发帖数: 14359 | 21 会的,都是实现算好存好的,地图都是矢量的,搞的是点,线和多边形
【在 B*****g 的大作中提到】 : 同理呀,先拿到直径小于20mile的,再算距离,以前给个小网站干过干过。不过我怀疑 : 不会给这枚精确,不如找几个网站试试?
|
B*****g 发帖数: 34098 | 22 我说的距离是drive距离,不是直线距离
【在 s**********o 的大作中提到】 : 会的,都是实现算好存好的,地图都是矢量的,搞的是点,线和多边形
|
B*****g 发帖数: 34098 | 23 我路上想了一下,应该问题不大,一页就显示几个,又不用全显示
万代
【在 B*****g 的大作中提到】 : 如果用户多了呢?这个计算量能不能减下来?
|
s**********o 发帖数: 14359 | 24 只要沿着路走就可以了,路一段一段的线都是算好存好的。
【在 B*****g 的大作中提到】 : 我说的距离是drive距离,不是直线距离
|
B*A 发帖数: 83 | 25 我也弄过一个类似的。监控监外执行犯活动范围的。
当时是买的专业APi 从OracIe里CallOut。
longitude
dealer
★ 发自iPhone App: ChineseWeb - 中文网站浏览器
【在 w***a 的大作中提到】 : 8年以前弄过一个。 : 要有一个地址坐标数据库。我拿到的是邮编以及对应的经纬度数据库。 : 步骤是,先把你要找的地址转成经纬度,经纬度可以与距离互相换算,换算出20mile对 : 应的经纬度分别是多少(不用太精确),再select 邮编 where latitude, longitude : < 20mile对应的经纬度, 然后从dealer数据表里,找出邮编是这些选出的邮编的dealer : ,然后再计算复查这些dealer到你要找的地址的精确距离,把20mile以外的去除,剩下 : 的就可以输出了。 : 我以前做的,是找一个品牌产品的代销店。按上述算法实现很完美。
|