当前位置:编程学习 > C#/ASP.NET >>

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

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

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

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

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



注1:计算必须考虑传入参数是 GIS 经纬度坐标,而不是普通的平面坐标。
注2:需要实现源代码能是 C# 最好,Java、VB、C++ 也行。 --------------------编程问答-------------------- 还是帮你顶下吧。 --------------------编程问答-------------------- arcgis  二次开发 组件 自己调用
自己写算法 要琢磨一阵子了 --------------------编程问答-------------------- 学GIS的飘过,接分 --------------------编程问答-------------------- 貌似arcgis 有这个功能 --------------------编程问答-------------------- gis开发,除了知道经纬度,你需要有对应的地图才可以计算最短距离吧.

因为两点只能有障碍物.例如,建筑物,河流,高山等等.

有地图才能知道,有那些通道,才会有最短距离.

而且早些年,arcgis 超图,灵图的开发平台,都有实现最短路径的方法.你用的是什么开发平台.到他们公司论坛问一下. --------------------编程问答--------------------

    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)); --------------------编程问答--------------------
引用 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 方法定义呢? --------------------编程问答--------------------
引用 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;
    }
--------------------编程问答--------------------
引用 5 楼 unicorn_dsx 的回复:
gis开发,除了知道经纬度,你需要有对应的地图才可以计算最短距离吧.

因为两点只能有障碍物.例如,建筑物,河流,高山等等.

有地图才能知道,有那些通道,才会有最短距离.

而且早些年,arcgis 超图,灵图的开发平台,都有实现最短路径的方法.你用的是什么开发平台.到他们公司论坛问一下.



你说的无需考虑,我没有说要实现逻辑上的最短距离。 --------------------编程问答-------------------- 还有 liuchaolin 的代码,是计算什么东东?说明一下啊。 --------------------编程问答-------------------- 自顶一下,希望达人能看见。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,