(答案满意加到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++ 也行。
...全文
370 11 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
还是帮你顶下吧。
内容概要:本文介绍了一种基于多目标粒子群算法(MOPSO)的微电网优化调度模型,综合考虑风能、光伏、储能系统、柴油发电机、燃气轮机以及与主电网之间的能量交互等多种布式能源的协同运行。通过构建以运行成本最小化、碳排放最低化和系统可靠性最优化为目标的多目标优化模型,利用Matlab平台实现MOPSO算法求解,完成对微电网在不同运行场景下的能量管理与调度方案优化。该模型能够有效平衡经济性与环保性之间的关系,适用于含多类型布式电源的复杂微电网系统,具有较强的工程应用价值和科研参考意义; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事微电网、智能电网、综合能源系统、可再生能源集成与优化调度等领域研究的专业人士; 使用场景及目标:①用于多能源耦合微电网系统的协同优化调度研究;②支持多目标智能优化算法在能源系统中的建模与求解实践,帮助用户掌握MOPSO在实际工程问题中的应用方法;③为学术论文复现、毕业设计、科研项目开发提供完整的代码实例与技术支撑; 阅读建议:建议读者结合Matlab代码与理论文档,深入理解目标函数构建、约束条件处理及Pareto最优解集生成机制,重点关注算法参数设置、多目标权衡析与结果可视化,并可通过调整能源配置或引入新约束进行二次开发与创新研究。

111,129

社区成员

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

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

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