计算最近点和最近线段

上次发了一个“已知一点求最近点(问题请教) ”的贴,今天对这个问题做一下补充探讨。上次是基于Mapx控件做的,今天做的是脱离MAPX的,基于文本文件的。
问题回顾:已知点P(经纬度),查找该点最临近的点D(点,线,面),返回D的名称及与P的方向,位置和距离关系,地物总数大于50万个。
现在实现的功能:生成一个点判断离这个点最近的点的坐标、距离和方向;生成一个点,生成一个线段,判断点到直线的最短距离(分垂足是否落在线段上两种情况)。
大体的思路:求最近点,仍然是遍历。求线段上的最近点,先判断垂足,这里用的是两条垂直的直线的斜率之积为-1,然后判断垂足是否落在线段上,即判断垂足是否在线段的最小范围矩形框。如果是垂足落在线段上那么最短距离是点到垂足的距离,如果不是,那么最短距离是点到线段的最近端点的距离。
发现原来算法问题都是数学问题,我数学不好,唉,一个简单的问题搞了我蛮久。上面的都没有做任何优化,并且把大地坐标当成了直角坐标做(有点不妥,但在速度优先的情况下我觉得这点误差也许还能接受),如果觉得有甚么优化的地方欢迎提出,比如,遍历的时候先判断是否落在已知点附近的固定距离的矩形框。

代码下载地址:http://files.cnblogs.com/Tangf/neardis_new.rar

界面图如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值