当前位置:编程学习 > wap >>

qgis中的测距

初学qgis,知道两点经纬度坐标,不知道如何计算两点的距离,用QgsDistanceArea类的measureLine方法,得出的好像是度值的差,用QgsPoint类的sqrDist方法,也类似,怎么得到以米表示的距离。
还有在QgsMapCanvas上,如何得到一个像素值长度是多少米? --------------------编程问答-------------------- 如果知道经纬度可以通过了解他的投影方式来计算,你如果通过象素来计算那真是剑走偏峰了。
这是web墨卡托坐标系下的经纬度转平面坐标,直接做加减就是近似距离(纬度越高越不准)

//经纬度转web墨卡托
  MapPoint lonLat2Mercator(MapPoint lonLat)
   {
   MapPoint mercator = new MapPoint();
   double x = lonLat.X * 20037508.34 / 180;
   double y = Math.Log(Math.Tan((90 + lonLat.Y) * Math.PI / 360)) / (Math.PI / 180);
   y = y * 20037508.34 / 180;
   mercator.X = x;
   mercator.Y = y;
   return mercator;
   }
//web墨卡托转经纬度
MapPoint Mercator2lonLat(MapPoint mercator)
   {
   MapPoint lonLat = new MapPoint();
   double x = mercator.X / 20037508.34 * 180;
   double y = mercator.Y / 20037508.34 * 180;
   y = 180 / Math.PI * (2 * Math.Atan(Math.Exp(y * Math.PI / 180)) - Math.PI / 2);
   lonLat.X = x;
   lonLat.Y = y;
   return lonLat;
   } --------------------编程问答-------------------- 楼上说的是坐标变换,在自己实现GIS系统时确实需要,但我这里使用的是qgis,坐标变换都是gis引擎自动处理的,在qgis中QgsMapToPixel都提供了相应的接口,我主要是不太清楚使用qgis如何实现距离计算 --------------------编程问答-------------------- 看来你没有GIS基础,无论qgis,mapinfo,arcgis,supermap还是什么其他的,计算距离的原理都一样。

经纬度是地理坐标,你也可以理解成地心坐标,直接计算两点间的距离是不现实的
通常的做法是将地理坐标转换成平面坐标(笛卡尔坐标,以x,y为轴)再计算两点间的距离

所以,计算经纬度坐标的第一步就是转换坐标,而后在x,y轴上计算两点间距离只需要用初中的数学就能搞定了。

顺便说一下,你提到的QgsMapToPixel的坐标转换是地理坐标到屏幕坐标的转换,实际生活中的距离与屏幕中的距离只存在一个比例尺的关系。 --------------------编程问答-------------------- 谢谢楼上的持续关注!楼上可能误解了我的意思,我是这样认为的
地图引擎既然能将地图显示在平面上,其内部肯定是已经进行了坐标变换,不管是高斯还是墨卡托,还是什么其他的,也应该提供了相应的接口,方便二次开发者进行测距、绘图等。这里不应该还需要开发者自己来实现一个投影算法,再来计算。我主要是对qgis的API还不熟,不知道用什么方法 --------------------编程问答--------------------
引用 4 楼  的回复:
谢谢楼上的持续关注!楼上可能误解了我的意思,我是这样认为的
地图引擎既然能将地图显示在平面上,其内部肯定是已经进行了坐标变换,不管是高斯还是墨卡托,还是什么其他的,也应该提供了相应的接口,方便二次开发者进行测距、绘图等。这里不应该还需要开发者自己来实现一个投影算法,再来计算。我主要是对qgis的API还不熟,不知道用什么方法


我没有专门了解过qgis的api, 但是我猜测他只是组装了gdal/org,proj4而已,也有可能没有封装完整的open api。 --------------------编程问答--------------------
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,