(答案满意加到100分)涉及到 GIS 经纬度坐标的几个问题,帮帮忙解决一下,偶不会已经好几天没有弄出来了

Mister 2013-03-20 04:56:56
首先说明一下
1)发计算求两点距离的朋友,就麻烦别发了,我有,网上到处也有。
2)我需要的是代码实现,不要发计算公式,偶看不懂。

问题一:
已知线段(折线) A 的经纬度数组,和某个目标点 B 的经纬度,求 B 到 A 的最短距离。

问题二:
已知多边形 A 的经纬度数组,和某个线段 B 的经纬度集合,判断 B 和 A 之间的关系(1.线段在多边形之内? 2.线段不在多边形之内? 3.线段与多边形相交?)

问题三:
已知多边形 A 的经纬度数组,和某个目标点 B 的经纬度,求 B 到 A 的最短距离。



注1:计算必须考虑传入参数是 GIS 经纬度坐标,而不是普通的平面坐标。
注2:需要实现源代码能是 C# 最好,Java、VB、C++ 也行。
...全文
307 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mister 2013-04-03
  • 打赏
  • 举报
回复
自顶一下,希望达人能看见。
Mister 2013-03-25
  • 打赏
  • 举报
回复
还有 liuchaolin 的代码,是计算什么东东?说明一下啊。
Mister 2013-03-25
  • 打赏
  • 举报
回复
引用 5 楼 unicorn_dsx 的回复:
gis开发,除了知道经纬度,你需要有对应的地图才可以计算最短距离吧. 因为两点只能有障碍物.例如,建筑物,河流,高山等等. 有地图才能知道,有那些通道,才会有最短距离. 而且早些年,arcgis 超图,灵图的开发平台,都有实现最短路径的方法.你用的是什么开发平台.到他们公司论坛问一下.
你说的无需考虑,我没有说要实现逻辑上的最短距离。
md5e 2013-03-22
  • 打赏
  • 举报
回复
引用 7 楼 Mister 的回复:
引用 6 楼 liuchaolin 的回复: C# code?1234567891011121314 protected double distHaversine(double lat1, double lon1, double lat2, double lon2) { Int16 R = 6371; double dLat = toRad(lat2 - ……

    protected string destPoint(double lat, double lon, double brng, double d) 
    {
        Int16 R = 6371; // earth's mean radius in km
        double lat1 = toRad(lat);
        double lon1 = toRad(lon);
        brng = toRad(brng);

        double lat2 = Math.Asin(Math.Sin(lat1) * Math.Cos(d / R) +
                              Math.Cos(lat1) * Math.Sin(d / R) * Math.Cos(brng));
        double lon2 = lon1 + Math.Atan2(Math.Sin(brng) * Math.Sin(d / R) * Math.Cos(lat1),
                                     Math.Cos(d / R) - Math.Sin(lat1) * Math.Sin(lat2));
        lon2 = (lon2 + Math.PI) % (2 * Math.PI) - Math.PI;  // normalise to -180...+180

        //if (isNaN(lat2) || isNaN(lon2)) return null;
        return "<lat>" + toDeg(lat2) + "</lat><lon>" + toDeg(lon2) + "</lon>";
    }
    protected double toRad(double Rad)
    {
        return Rad * Math.PI / 180;
    }

    protected double toDeg(double Deg)
    {  // convert radians to degrees (signed)
        return Deg * 180 / Math.PI;
    }
Mister 2013-03-22
  • 打赏
  • 举报
回复
引用 6 楼 liuchaolin 的回复:
C# code?1234567891011121314 protected double distHaversine(double lat1, double lon1, double lat2, double lon2) { Int16 R = 6371; double dLat = toRad(lat2 - lat1) ; ……
这段代码是计算什么的?toRad 方法定义呢?
a569673493 2013-03-21
  • 打赏
  • 举报
回复
学GIS的飘过,接分
md5e 2013-03-21
  • 打赏
  • 举报
回复

    protected double distHaversine(double lat1, double lon1, double lat2, double lon2)
    {
        Int16 R = 6371;
        double dLat = toRad(lat2 - lat1) ;
        double dLon = toRad(lon2 - lon1) ;
        lat1 = toRad(lat1);
        lat2 = toRad(lat2);
        double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
        Math.Cos(lat1) * Math.Cos(lat2) *
        Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
        double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
        double d = R * c;
        return d;
    }
一个点一个点去比较吧 Response.Write("<br>" +distHaversine(24.316029, 109.366053, 40.7118740691058, -74.0005159378052));
老董杂货铺 2013-03-21
  • 打赏
  • 举报
回复
gis开发,除了知道经纬度,你需要有对应的地图才可以计算最短距离吧. 因为两点只能有障碍物.例如,建筑物,河流,高山等等. 有地图才能知道,有那些通道,才会有最短距离. 而且早些年,arcgis 超图,灵图的开发平台,都有实现最短路径的方法.你用的是什么开发平台.到他们公司论坛问一下.
木头小菜 2013-03-21
  • 打赏
  • 举报
回复
貌似arcgis 有这个功能
yanasdf789 2013-03-20
  • 打赏
  • 举报
回复
arcgis 二次开发 组件 自己调用 自己写算法 要琢磨一阵子了
言多必失 2013-03-20
  • 打赏
  • 举报
回复
还是帮你顶下吧。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧