Fortran Coder

求两坐标点距离

查看数: 11559 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
wxy
发布时间: 2017-3-18 21:43

正文摘要:

本帖最后由 wxy 于 2017-3-19 12:41 编辑 我想实现输入一个坐标点跟文件中所有坐标点依次进行距离计算然后输出距离最近点,但是现在的代码出现图中的问题,计算出来全是是第一个坐标的值, 麻烦帮看一下应该怎么改[ ...

回复

wxy 发表于 2017-3-19 15:48:23
Jackdaw 发表于 2017-3-19 15:34
额,这个都找到了,你写到文件里的数据不都是按行,一行一行的排列好的吗,既然找到了想找的行数,直接把 ...

嗯嗯 谢谢
Jackdaw 发表于 2017-3-19 15:34:13
wxy 发表于 2017-3-19 14:57
谢谢 现在已经成功输出最小值的位置了,如果我想直接把最小值那一行输出,在知道行号的情况下,用什麽语句呢 ...

额,这个都找到了,你写到文件里的数据不都是按行,一行一行的排列好的吗,既然找到了想找的行数,直接把相应的数据输出就行
Jackdaw 发表于 2017-3-19 14:28:27
wxy 发表于 2017-3-19 14:12
再请教一下,我把计算出来的距离放入动态数组near,用minval找到距离最小值,如果要把最小值所在的那一行输出 ...

参考这个示例

QQ图片20170319142811.png (22.99 KB, 下载次数: 292)

QQ图片20170319142811.png
Jackdaw 发表于 2017-3-19 12:51:13
[Fortran] 纯文本查看 复制代码
real function distance(lat1, lon1, lat2, lon2)
real , parameter ::  R=6378.137
real lon1 , lat1 , lon2 , lat2
distance = (R*cos(lon1)*cos(lat1)+R*cos(lon2)*cos(lat2))/sqrt(sin(lon1)**2*sin(lon2)**2+sin(lat1)**2*sin(lat2)**2)
end function distance
program none
    implicit none
    integer i,m
    character(len=12):: site
    real :: lat , lon , lat1 , lon1 , distance
    real , allocatable ::  lat2(:) , lon2(:)

    open(7,file="find_close.txt")
    open(10,file="find.txt")
    m=46154 !行数
    allocate(lat2(m),lon2(m))

    Write (*,*) 'lon:'!输入经度
    Read (*, '(f7.3)') lon

    Write (*,*) 'lat:'!输入纬度
    Read (*, '(f6.3)') lat

    do i=1,m
        lon1=lon
        lat1=lat
        read(7,'(a9,2x,f6.3,2x,f7.3)') site , lat2(i) , lon2(i)
        write(10,'(a9,2x,f6.2,2x,f7.2,2x,f9.3)') site , lat2(i) , lon2(i) , distance(lat1, lon1, lat2, lon2)
    end do
end program

QQ图片20170319124945.png (10.12 KB, 下载次数: 269)

QQ图片20170319124945.png

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-6-11 16:37

Powered by Tencent X3.4

© 2013-2024 Tencent

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