问题的提出:已知点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方法应该要好一点。
如果有朋友有好的思路请补充,谢谢。
忘了贴代码,补上:https://files.cnblogs.com/Tangf/neardis.rar (VB6+MAPX5.02中文版环境下调试成功,文件中用时的计算是错误的)
优化:
个人思路一:从原始数据着手,分割数据。
应该讲许多公司都是采用这样的方法的,只是,我不明白这个具体如何操作,也只能浅谈下我的思路。
假如已知点在图幅a内,那么首先遍历a到i图幅内的点,如果有则比较计算出最近的点,如果没有则再扩大一圈来计算点。
当然这里可能在原始数据中需要处理,并非完全基于拓扑关系计算。如果紧紧知道点P,则先计算点P所在图幅号,结果是a,则遍历a和a周围的所有图幅。如果不存在最近点则继续遍历b到i的图幅的外围图幅。
图幅建议使用方形,否则范围太大的情况下可能会错误。
RoverTang@罗孚传说
E-mail:65985498[at]qq.com
微博/微信:rovertang