24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1501  |  回复: 19
【奖励】 本帖被评价5次,作者3s_studio增加金币 4.5
当前主题已经存档。

3s_studio

金虫 (小有名气)


[资源] 【分享】由经纬度坐标求距离的VB程序(附源代码)

经纬度坐标的地图中求距离的VB6.0程序,距离单位为M,利用大地正反算白塞尔公式编制而成。

下载:

程序及源代码下载

[ Last edited by 3s_studio on 2008-12-13 at 09:38 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cherishing

金虫 (著名写手)


★★★★★ 五星级,优秀推荐

谢谢共享,收藏!
2楼2008-06-24 09:53:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cherishing

金虫 (著名写手)


但是楼主是否测试程序?你的内容是否不全?里面怎么是空的??请解释一下好不?
3楼2008-06-24 09:59:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

3s_studio

金虫 (小有名气)


cherishing,不好意思,我看了,这个文件确实不正确。我已经修改完毕,测试可以用,请到http://www.sciencenet.cn/blog/user_content.aspx?id=30185免费下载,谢谢。

[ Last edited by 3s_studio on 2008-6-24 at 12:31 ]
4楼2008-06-24 10:50:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cherishing

金虫 (著名写手)


好的,已经下载,测试可用!谢谢楼主分享!
5楼2008-06-24 13:47:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

3s_studio

金虫 (小有名气)


呵呵,不用客气。谢谢大家关注!
6楼2008-06-24 20:57:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yangchunyan


★★★★★ 五星级,优秀推荐

лл
7楼2008-06-25 09:00:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

serena84


谢谢楼主哈
8楼2008-06-25 17:05:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

3s_studio

金虫 (小有名气)


光说不练,呵呵。
9楼2008-06-25 18:10:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

moonlight3988

木虫 (正式写手)


★★★ 三星级,支持鼓励

我有C#版的源码,谁需要?
10楼2008-06-25 22:59:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

3s_studio

金虫 (小有名气)


哦,发我一份吧,我也看看你的算法。
邮箱 zjwang2008@gmail.com
谢谢。
11楼2008-06-26 10:34:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

moonlight3988

木虫 (正式写手)


更详细源码请看http://bbs.i-location.org/thread-294-1-1.html

        ///
        /// 贝赛尔大地问题正解
        ///

        /// 已知点纬度
        /// 已知点经度
        /// 大地线长
        /// 大地方位角
        /// 待求点纬度
        /// 待求点经度
        /// 大地反方位角
        /// 参考椭球长半轴
        /// 参考椭球扁率倒数
        public static void Bessel_PntSA_Pnt(double B1, double L1, double S, double A1, out double B2, out double L2, out double A2, double a, double f)
        {
            double ee = (2 * f - 1) / f / f;       //第一偏心率的平方
            double ee2 = ee / (1 - ee);            //第二偏心率的平方

            double u1 = Math.Atan(Math.Sqrt(1 - ee) * Math.Tan(B1 * Math.PI / 180));
            double m = Math.Cos(u1) * Math.Sin(A1);
            m = Math.Atan(m / Math.Sqrt(1 - m * m));

            double M_ = Math.Atan(Math.Tan(u1) / Math.Cos(A1));
            if (M_ < 0) M_ += Math.PI;

            double KK = ee2 * Math.Pow(Math.Cos(m), 2);
            double alpha = Math.Sqrt(1 + ee2) * (1 - KK / 4 + 7 * KK * KK / 64 - 15 * Math.Pow(KK, 3) / 256) / a;
            double beta = KK / 4 - KK * KK / 8 + 37 * Math.Pow(KK, 3) / 512;
            double gama = KK * KK * (1 - KK) / 128;

            double sigma, temp;
            sigma = alpha * S;
            temp = 0;
            while (Math.Abs(temp - sigma) > 0.0000000001)
            {
                temp = sigma;
                sigma = alpha * S + beta * Math.Sin(sigma) * Math.Cos(2 * M_ + sigma) + gama * Math.Sin(2 * sigma) * Math.Cos(4 * M_ + 2 * sigma);
            }

            A2 = Math.Atan(Math.Tan(m) / Math.Cos(M_ + sigma));
            if (Math.Cos(M_) > 0) A2 += Math.PI;
            if (m < 0 && Math.Cos(M_) < 0) A2 += 2 * Math.PI;

            double u2 = Math.Atan(-Math.Cos(A2) * Math.Tan(M_ + sigma));

            double lamda1;
            lamda1 = Math.Atan(Math.Sin(u2) * Math.Tan(A2));
            if (Math.Cos(M_) < 0) lamda1 += Math.PI;
            if (m < 0 && Math.Cos(M_) > 0) lamda1 += 2 * Math.PI;

            double lamda2;
            lamda2 = Math.Atan(Math.Sin(u1) * Math.Tan(A1));
            if (m > 0)
            {
                if (Math.Cos(M_ + sigma) < 0)
                    lamda2 += Math.PI;
                else if (Math.Sin(M_ + sigma) < 0)
                    lamda2 += 2 * Math.PI;
            }
            else
            {
                if (Math.Cos(2 * Math.PI - M_ - sigma) < 0)
                    lamda2 += Math.PI;
                else if (Math.Sin(M_ + sigma) < 0)
                    lamda2 += 2 * Math.PI;
            }

            B2 = Math.Atan(Math.Sqrt(1 + ee2) * Math.Tan(u2)) * 180 / Math.PI;

            KK = ee * Math.Pow(Math.Cos(m), 2);
            alpha = ee / 2 + ee * ee / 8 + Math.Pow(ee, 3) / 16 - ee * (1 + ee) * KK / 16 + 3 * ee * KK * KK / 128;
            gama = ee * KK * KK / 256;

            L2 = lamda1 + lamda2 - Math.Sin(m) * (alpha * sigma + beta * Math.Sin(sigma) * Math.Cos(2 * M_ + sigma) + gama * Math.Sin(2 * sigma) * Math.Cos(4 * M_ + 2 * sigma));
            L2 = L1 + L2 * 180 / Math.PI;
        }

        ///
        /// 由两点大地坐标求解大地方位角
        ///

        /// 起点纬度
        /// 起点经度
        /// 末点纬度
        /// 末点经度
        /// 参考椭球长半轴
        /// 参考椭球扁率倒数
        /// 两点间的大地方位角
        public static double Bessel_BL_A(double B1, double L1, double B2, double L2, double a, double f)
        {
            if (L1 == L2) return 0;

            double ee = (2 * f - 1) / f / f;       //第一偏心率的平方

            double u1 = Math.Atan(Math.Sqrt(1 - ee) * Math.Tan(B1 * Math.PI / 180));
            double u2 = Math.Atan(Math.Sqrt(1 - ee) * Math.Tan(B2 * Math.PI / 180));
            double dL = (L2 - L1) * Math.PI / 180;

            double sigma = Math.Sin(u1) * Math.Sin(u2) + Math.Cos(u1) * Math.Cos(u2) * Math.Cos(dL);
            sigma = Math.Atan(Math.Sqrt(1 - sigma * sigma) / sigma);
            if (sigma <= 0) sigma += Math.PI;

            double m = Math.Cos(u1) * Math.Cos(u2) * Math.Sin(dL) / Math.Sin(sigma);
            m = Math.Atan(m / Math.Sqrt(1 - m * m));

            double KK = ee * Math.Pow(Math.Cos(m), 2);
            double alpha = ee / 2 + ee * ee / 8 + Math.Pow(ee, 3) / 16 - ee * (1 + ee) * KK / 16 + 3 * ee * KK * KK / 128;
            double lamda = dL + alpha * sigma * Math.Sin(m);

            sigma += Math.Sin(m) * (alpha * sigma * Math.Sin(m));

            m = Math.Cos(u1) * Math.Cos(u2) * Math.Sin(lamda) / Math.Sin(sigma);
            m = Math.Atan(m / Math.Sqrt(1 - m * m));

            double A = Math.Atan(Math.Sin(lamda) / (Math.Cos(u1) * Math.Tan(u2) - Math.Sin(u1) * Math.Cos(lamda)));
            if (A <= 0) A += Math.PI;
            if (m <= 0) A += Math.PI;

            double M_ = Math.Atan(Math.Sin(u1) * Math.Tan(A) / Math.Sin(m));
            if (M_ <= 0) M_ += Math.PI;

            KK = ee * Math.Pow(Math.Cos(m), 2);
            alpha = ee / 2 + ee * ee / 8 + Math.Pow(ee, 3) / 16 - ee * (1 + ee) * KK / 16 + 3 * ee * KK * KK / 128;
            double beta = ee * (1 + ee) * KK / 16 - ee * KK * KK / 32;
            lamda = dL + Math.Sin(m) * (alpha * sigma + beta * Math.Sin(sigma) * Math.Cos(2 * M_ + sigma));

            A = Math.Atan(Math.Sin(lamda) / (Math.Cos(u1) * Math.Tan(u2) - Math.Sin(u1) * Math.Cos(lamda)));
            if (A <= 0) A += Math.PI;
            if (m <= 0) A += Math.PI;

            return A * 180 / Math.PI;
        }

        ///
        /// 由大地坐标计算大地线长
        ///

        /// 起点纬度
        /// 起点经度
        /// 末点纬度
        /// 末点经度
        /// 参考椭球长半轴
        /// 参考椭球扁率倒数
        /// 两点间的大地线长
        public static double Bessel_BL_S(double B1, double L1, double B2, double L2, double a, double f)
        {
            if (L1 == L2) return Math.Abs(MeridianLength(B1, a, f) - MeridianLength(B2, a, f));

            double ee = (2 * f - 1) / f / f;       //第一偏心率的平方
            double ee2 = ee / (1 - ee);            //第二偏心率的平方

            double u1 = Math.Atan(Math.Sqrt(1 - ee) * Math.Tan(B1 * Math.PI / 180));
            double u2 = Math.Atan(Math.Sqrt(1 - ee) * Math.Tan(B2 * Math.PI / 180));
            double dL = (L2 - L1) * Math.PI / 180;

            double sigma = Math.Sin(u1) * Math.Sin(u2) + Math.Cos(u1) * Math.Cos(u2) * Math.Cos(dL);
            sigma = Math.Atan(Math.Sqrt(1 - sigma * sigma) / sigma);
            if (sigma <= 0) sigma += Math.PI;

            double m = Math.Cos(u1) * Math.Cos(u2) * Math.Sin(dL) / Math.Sin(sigma);
            m = Math.Atan(m / Math.Sqrt(1 - m * m));

            double KK = ee * Math.Pow(Math.Cos(m), 2);
            double alpha = ee / 2 + ee * ee / 8 + Math.Pow(ee, 3) / 16 - ee * (1 + ee) * KK / 16 + 3 * ee * KK * KK / 128;
            double lamda = dL + alpha * sigma * Math.Sin(m);

            sigma += Math.Sin(m) * (alpha * sigma * Math.Sin(m));

            m = Math.Cos(u1) * Math.Cos(u2) * Math.Sin(lamda) / Math.Sin(sigma);
            m = Math.Atan(m / Math.Sqrt(1 - m * m));

            double A = Math.Atan(Math.Sin(lamda) / (Math.Cos(u1) * Math.Tan(u2) - Math.Sin(u1) * Math.Cos(lamda)));
            if (A <= 0) A += Math.PI;
            if (m <= 0) A += Math.PI;

            double M_ = Math.Atan(Math.Sin(u1) * Math.Tan(A) / Math.Sin(m));
            if (M_ <= 0) M_ += Math.PI;

            KK = ee * Math.Pow(Math.Cos(m), 2);
            alpha = ee / 2 + ee * ee / 8 + Math.Pow(ee, 3) / 16 - ee * (1 + ee) * KK / 16 + 3 * ee * KK * KK / 128;
            double beta = ee * (1 + ee) * KK / 16 - ee * KK * KK / 32;

            lamda = dL + Math.Sin(m) * (alpha * sigma + beta * Math.Sin(sigma) * Math.Cos(2 * M_ + sigma));
            sigma = Math.Sin(u1) * Math.Sin(u2) + Math.Cos(u1) * Math.Cos(u2) * Math.Cos(lamda);
            sigma = Math.Atan(Math.Sqrt(1 - sigma * sigma) / sigma);
            if (sigma < 0) sigma += Math.PI;

            KK = ee2 * Math.Pow(Math.Cos(m), 2);
            alpha = Math.Sqrt(1 + ee2) / a * (1 - KK / 4 + 7 * KK * KK / 64 - 15 * Math.Pow(KK, 3) / 256);
            beta = KK / 4 - KK * KK / 8 + 37 * Math.Pow(KK, 3) / 512;
            double gama = KK * KK * (1 - KK) / 128;

            double S = (sigma - beta * Math.Sin(sigma) * Math.Cos(2 * M_ + sigma) - gama * Math.Sin(2 * gama) * Math.Cos(4 * M_ + 2 * sigma)) / alpha;

            return S;
        }

[ Last edited by moonlight3988 on 2008-7-29 at 21:06 ]
12楼2008-06-26 12:49:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

3s_studio

金虫 (小有名气)


非常感谢 moonlight3988  的共享,学习学习。
也是白塞尔公式啊

还要谢谢告诉我一个好论坛。

[ Last edited by 3s_studio on 2008-6-26 at 13:35 ]
13楼2008-06-26 13:31:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

moonlight3988

木虫 (正式写手)


不客气
共同学习
我这个算法来自郑州测绘学院的教材
14楼2008-06-29 16:22:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

云那边的山

木虫 (正式写手)


★★★★★ 五星级,优秀推荐

楼主好厉害呀
15楼2008-07-02 16:16:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ynbszhy

铜虫 (小有名气)


谢谢!有这工具可以方便地检查图幅质量了
16楼2008-07-07 17:47:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

3s_studio

金虫 (小有名气)


呵呵,谢谢大家的错爱,继续为3S朋友服务。
17楼2008-07-26 18:05:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzh_my

铁虫 (小有名气)


动手很重要哦。只有你亲自做了之后,才能明白的透彻!!
19楼2008-09-13 21:06:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
tanyujuan18楼
2008-08-04 07:37   回复  
谢谢分享!!
相关版块跳转 我要订阅楼主 3s_studio 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 070300化学279求调剂 +4 哈哈哈^_^ 2026-03-31 6/300 2026-03-31 06:53 by userper
[考研] 材料与化工调剂一志愿大连海事085600,349 +6 吃的不少 2026-03-30 6/300 2026-03-31 04:17 by fmesaito
[考研] 学硕274求调剂 +12 Li李鱼 2026-03-26 12/600 2026-03-31 03:56 by fmesaito
[考研] 材料求调剂 一志愿哈工大总分298分,前三科223分 +10 dongfang59 2026-03-27 10/500 2026-03-30 23:42 by 果果妈咪
[考研] 合肥区域性重点一本招收调剂 +4 6266jl 2026-03-30 4/200 2026-03-30 21:48 by zhuangyan123
[考研] 22408 359分调剂 +4 Qshers 2026-03-27 7/350 2026-03-30 21:30 by Qshers
[考研] 309求调剂 +15 谁不是少年 2026-03-29 15/750 2026-03-30 19:28 by 2026材料调剂
[考研] 071010 323 分求调剂 +3 Baekzhy 2026-03-27 3/150 2026-03-30 14:24 by andresqi
[考研] 求化学调剂 +11 wulanna 2026-03-28 11/550 2026-03-30 10:59 by 探123
[考研] 311求调剂 +6 冬十三 2026-03-24 6/300 2026-03-29 20:45 by 无际的草原
[考研] 299求调剂 +10 15188958825 2026-03-25 10/500 2026-03-29 17:51 by 王亮_大连医科大
[考研] 356求调剂 +4 gysy?s?a 2026-03-28 4/200 2026-03-29 10:32 by 唐沐儿
[考研] 347求调剂 +3 山顶见α 2026-03-25 3/150 2026-03-28 14:13 by 唐沐儿
[考研] 283求调剂 +7 A child 2026-03-28 7/350 2026-03-28 12:05 by zllcz
[考研] 308求调剂 +7 墨墨漠 2026-03-27 7/350 2026-03-28 07:43 by 热情沙漠
[考研] 求调剂推荐 材料 304 +15 荷包蛋hyj 2026-03-26 15/750 2026-03-28 04:13 by fmesaito
[考研] 274求调剂 +17 顾九笙要谦虚 2026-03-24 23/1150 2026-03-27 15:16 by caszguilin
[考研] 085600,材料与化工321分,求调剂 +9 大馋小子 2026-03-27 9/450 2026-03-27 14:30 by mmm just
[论文投稿] Journal of Mechanical Science and Technology +3 Russ_ss 2026-03-25 5/250 2026-03-27 10:49 by 陆小果画大饼
[考研] 296求调剂 +4 汪!?! 2026-03-25 7/350 2026-03-25 16:41 by 汪!?!
信息提示
请填处理意见