(答案满意加到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)); --------------------编程问答--------------------
这段代码是计算什么的?toRad 方法定义呢? --------------------编程问答--------------------
--------------------编程问答--------------------
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;
}
你说的无需考虑,我没有说要实现逻辑上的最短距离。 --------------------编程问答-------------------- 还有 liuchaolin 的代码,是计算什么东东?说明一下啊。 --------------------编程问答-------------------- 自顶一下,希望达人能看见。
补充:.NET技术 , C#