Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5597|回复: 27

[已解决]代码提速问题!麻烦下(过程已详细补充清楚)

[复制链接]
发表于 2014-1-7 16:08 | 显示全部楼层 |阅读模式
本帖最后由 suxiong 于 2014-1-8 09:35 编辑




QQ截图20140108093341.jpg
复件 ne.zip (37.68 KB, 下载次数: 5)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-1-7 16:37 | 显示全部楼层
呵呵,不知道你的代码有什么用处,能否简单介绍一下……


计算的话,规则什么的也应该说一下。

回复

使用道具 举报

发表于 2014-1-7 16:38 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-1-8 09:35 | 显示全部楼层
香川群子 发表于 2014-1-7 16:37
呵呵,不知道你的代码有什么用处,能否简单介绍一下……

已补充了!麻烦看下!
回复

使用道具 举报

 楼主| 发表于 2014-1-8 09:36 | 显示全部楼层
香川群子 发表于 2014-1-7 16:38
看数据像是经纬度距离计算。

嗯,是的!
回复

使用道具 举报

 楼主| 发表于 2014-1-8 09:39 | 显示全部楼层
香川群子 发表于 2014-1-7 16:38
看数据像是经纬度距离计算。

嗯,就是哈!只是计算最有点大。

计算量是     第一列*第三列;后面还要找最小值。
回复

使用道具 举报

发表于 2014-1-8 13:43 | 显示全部楼层
如果只需要最终计算结果,可以忽略中间计算过程的话,算法可以改进:

1. 简化计算得到近似值 (可以大大提高计算速度)
2. 求得对于A点的最短距离(近似值)
3. 对于和近似值接近的小部分B点值进行精度值计算,并从中得到最短距离点

另外,对B列点事先排序,也可大大提高计算效率。
(用二分法逼近中点)

回复

使用道具 举报

发表于 2014-1-8 14:07 | 显示全部楼层
提高效率的具体算法改进:

1. 把经纬度值预处理转为长整型数值以便快速计算(比双精度计算快很多)
2. 仅需计算长整形数值的 经度差、维度差 的平方的和(近似直角斜边)
3. 比较该值的大小,取其中最小的100个或者20个值的位置
4. 对这些筛选过的位置进行精确计算即可。

回复

使用道具 举报

发表于 2014-1-8 14:15 | 显示全部楼层
你再上一个12000行的数据附件吧。

现在的附件只有50多行用不了多少时间没有意义。
回复

使用道具 举报

发表于 2014-1-8 14:54 | 显示全部楼层
已知经纬度两点距离的公式
两点距离=6378137*2*ASIN(SQRT(SUMSQ(SIN((RADIANS(起点纬度) - RADIANS(终点纬度))/2))+ COS(RADIANS(起点纬度))*COS( RADIANS(终点纬度))*SUMSQ(SIN((RADIANS(起点经度)-RADIANS(终点经度))/2))))


或者正确的弧度公式是:
C = sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2-lon1)



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 20:10 , Processed in 0.199715 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表