Rover's Official Blog

Map/GPS/GIS/WebMap

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  47 随笔 :: 0 文章 :: 437 评论 :: 41 引用

问题的提出:已知点P(经纬度),查找该点最临近的点D(点,线,面),返回D的名称及与P的方向,位置和距离关系,地物总数大于50万个
问题的问题:
一:是否基于控件?基于控件和非基于控件应该怎么做?
二:坐标系统是什么系统?(一般是WGS84的坐标系统)
三:最临近的点D(点,线,面),这里线和面对象的点是中心还是节点?(这里可能只讨论中心点,节点略微复杂)

可能是很简单的问题,可惜我不会,特向大家讨教。
思路:遍历。那么如何优化?

自己用MAPX傻傻的做了下。先简单的介绍下我的思路。
使用的是MAPX的SearchWithinDistance方法,只是做了下权衡,设置了一个搜索半径距离和一个搜索最大数量。
虽然简单的看是可以做成,但问题很多。一是MAPX的SearchWithinDistance方法是否也是遍历实现?二是距离和数量之间如何权衡?
如果对于情况一,那么我就不需要使用SearchWithinDistance方法,直接遍历各个点来求距离。对于情况二,对于最近地物的距离为1米和1000米肯定是不一样的,那么如何设置距离,控制数量又该如何设置?
还有一个问题:如何确定方向。
本来想用个反正弦函数,结果实在想不起来这个函数。对于直角坐标系那么用求出角度即可确定方向,那么对于球面体也用直角坐标系?至少应该经过投影。所以我想知道问题的问题二的原因。
请大家把这个方向问题补充完整,谢谢。给个参考网址:http://www.pep.com.cn/200503/ca688391.htm,我是没有看懂。
个人感觉SearchWithinDistance方法也用了遍历,所以直接自行遍历比加这个SearchWithinDistance方法应该要好一点。
如果有朋友有好的思路请补充,谢谢。

忘了贴代码,补上:http://files.cnblogs.com/Tangf/neardis.rar (VB6+MAPX5.02中文版环境下调试成功,文件中用时的计算是错误的)

优化:
个人思路一:从原始数据着手,分割数据。
应该讲许多公司都是采用这样的方法的,只是,我不明白这个具体如何操作,也只能浅谈下我的思路。
假如已知点在图幅a内,那么首先遍历a到i图幅内的点,如果有则比较计算出最近的点,如果没有则再扩大一圈来计算点。
当然这里可能在原始数据中需要处理,并非完全基于拓扑关系计算。如果紧紧知道点P,则先计算点P所在图幅号,结果是a,则遍历a和a周围的所有图幅。如果不存在最近点则继续遍历b到i的图幅的外围图幅。
图幅建议使用方形,否则范围太大的情况下可能会错误。

posted on 2006-05-28 11:32 Rover.Tang 阅读(1193) 评论(5)  编辑 收藏 网摘 所属分类: GIS

评论

#1楼  2006-05-28 13:41 马维峰      
使用SearchWithinDistance应该比较好,因为不管那个主流GIS平台,都会基于空间索引,SearchWithinDistance是先建立一个缓冲区,然后在这个区域内搜索。

使用数据分割为不同的区域,是简单的网格索引,需要先建立索引,在使用已有平台的情况下不是很好,也基本没有必要。

至于SearchWithinDistance的距离设置,可以根据需要设置一个中等的数值,如果失败,在放大测试。
  回复  引用  查看    

#2楼 [楼主] 2006-05-28 15:18 浪人|努力      
@马维峰
HOHO,非常感谢马兄
马兄我的留言你看什么时候给我答复那
我GT上找不到你
  回复  引用  查看    

#3楼  2006-05-28 17:00 马维峰      
@浪人|努力
已回复了,呵呵。

  回复  引用  查看    

#4楼  2008-09-19 19:17 刘燊 [未注册用户]
这是KNN问题,主流的空间数据库里一般用R树解决。
  回复  引用    





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

相关文章:

相关链接: