最近遇到一个关于经纬度的问题。现在已知两个经纬度坐标 a 、b ,请问怎么判断另外一个经纬度坐标 c 在 ab 连线的上侧还是下侧?
     1 
                    
                    leeyuzhe      2022-09-22 10:07:50 +08:00 
                    
                    一次方程,代入 x ,然后比较 y 不就行了,跟 java 啥关系? 
                 | 
            
     3 
                    
                    hidemyself      2022-09-22 10:17:39 +08:00 
                    
                    不知道怎么定义上下。如果 a,b 经度是一样的,那 c 在 ab 连线的哪个地方呢 
                 | 
            
     4 
                    
                    Jooooooooo      2022-09-22 10:18:10 +08:00 
                    
                    把上下定义出来你的代码就写完了. 
                 | 
            
     5 
                    
                    koela   OP @hidemyself #3 我说的太笼统了,其实就是 a 和 b 连成的线分成两侧( a 和 b 是固定的),该怎么判断 c 点在线的那一侧?至于是上是下,我会自己根据实际情况去定义。 
                 | 
            
     6 
                    
                    xiangyuecn      2022-09-22 10:33:54 +08:00 
                    
                    以为是一段有限长的线,其实应当当做一条无限延长的线😂 平面计算跟球面计算不知道结果会不会有差异,数学基础太差😂 
                 | 
            
     7 
                    
                    xiao109      2022-09-22 10:44:04 +08:00 
                    
                    南极点和北极点的连线可以绕地球一圈吗? 
                 | 
            
     8 
                    
                    dddd1919      2022-09-22 10:50:09 +08:00 
                    
                    利用初中数学知识,如果坐标经纬度不太远可以近似平面,那么连线可以根据 a ,b 坐标求出经纬度连线(x,y)的二元一次方程组 y=Ax+B ,然后比较南北就是比较 y 大小,带入 c 的经度求出连线的 y 值,对比就知道偏南还是偏北 
                x ,y 要注意有正负  | 
            
     9 
                    
                    phplin      2022-09-22 11:04:31 +08:00 
                    
                    给你提供个思路  高德有判断一个经纬度在不在一个圈内的 sdk  是把经纬度转化成墨卡托坐标 
                 | 
            
     10 
                    
                    xiangyuecn      2022-09-22 11:12:27 +08:00 
                    
                    #6 复杂的计算不会算,只会调第三方库🤣 只想到一个简单的解决办法 
                先排除掉 水平或竖直的线,这种好判断。 剩下斜线直接将[-180 -90][180 90]切成左右两个几何图形,判断坐标点在左边还是右边的几何图形里面,就能得出左右,或者既在左又在右的:这个点就是在线上或延长线上。如果要上下关系就直接判断左右两个图形的上下关系,直接两个坐标点经纬度大小比较而已 很容易 这种操作均可以调用几何计算库,一般有提供 Geometry 操作对象,比如 jts https://mvnrepository.com/artifact/org.locationtech.jts/jts-core/1.18.2 Geometry.intersects 方法判断图形是否包含坐标点。 另外推荐一下我开源的 java 版坐标点查询工具,1 秒可查 1 万个以上坐标对应的城市信息,https://github.com/xiangyuecn/AreaCity-Query-Geometry 欢迎围观😁😁  | 
            
     11 
                    
                    Vegetable      2022-09-22 11:15:13 +08:00 
                    
                    这个看似简单,实则是个复杂问题 
                因为地球只有一个面,什么叫上下呢  | 
            
     12 
                    
                    sadfQED2      2022-09-22 11:29:43 +08:00 via Android    1.经纬度坐标系并不是平面直角坐标系,所以数学公式不能直接套用 
                2.我目测其实你的需求就是在平面地图吧。这种情况的话你把你的 a b 点经纬度转换成墨卡托坐标系,然后在墨卡托坐标系里面做计算就行了,墨卡托坐标系是平面直角坐标系。转换代码随便一搜就有  | 
            
     14 
                    
                    MrZhaoyx      2022-09-22 13:02:27 +08:00 
                    
                    尝试下 GDAL ? 
                 | 
            
     16 
                    
                    wangxiaoaer      2022-09-22 13:52:57 +08:00    两个思路: 
                1 转成平面坐标,正如楼上的墨卡托,然后基于平面方式坐标计算。 2 直接基于经纬度计算两两之间的角度,对比判断。具体算法可参考 https://www.movable-type.co.uk/scripts/latlong.html  | 
            
     17 
                    
                    clf      2022-09-22 14:22:19 +08:00 
                    
                    看你对上下的定义。经纬度和平面坐标系的区别就在于是一个环形。 
                假设你对上下的定义是:在两点连线(维度最大值不可跨越,仅可跨越东西经度,那么会有两条连线)分割出来的两片区域,那么就是计算包含 c 经度区域的 ab 连线就行了。  | 
            
     18 
                    
                    trcnkq      2022-09-22 19:57:31 +08:00 
                    
                    记地心为 o ,则判断 (oa x ob) * oc 符号即可(其中 x 为叉乘,* 为点乘)。 
                 |