搜索
bottom↓
回复: 6

万能的坛,WGS84坐标系如何转为百度或者谷歌地图坐标

[复制链接]

出0入0汤圆

发表于 2015-4-29 10:18:00 | 显示全部楼层 |阅读模式
做个设备主要功能就是用GPS定位,然后把坐标传到服务器,客户在手机上可以看到设备的位置路径等。

现在基本功能都可以了,就是这个坐标上报后对应到地图有偏差,查资料发现GPS输出是用的WGS84坐标系,百度和谷歌地图就不知道是什么火星坐标了,反正是对不上。

后来找到一个网站http://minigps.net/convert.html,用这个手工转换了一些坐标发现和实际位置符合,但是不知道这个转换的算法是怎样的。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-4-29 10:45:34 | 显示全部楼层
  1. //
  2. // Copyright (C) 1000 - 9999 Somebody Anonymous
  3. // NO WARRANTY OR GUARANTEE
  4. //

  5. using System;

  6. namespace Navi
  7. {
  8.     class EvilTransform
  9.     {
  10.         const double pi = 3.14159265358979324;

  11.         //
  12.         // Krasovsky 1940
  13.         //
  14.         // a = 6378245.0, 1/f = 298.3
  15.         // b = a * (1 - f)
  16.         // ee = (a^2 - b^2) / a^2;
  17.         const double a = 6378245.0;
  18.         const double ee = 0.00669342162296594323;

  19.         //
  20.         // World Geodetic System ==> Mars Geodetic System
  21.         public static void transform(double wgLat, double wgLon, out double mgLat, out double mgLon)
  22.         {
  23.             if (outOfChina(wgLat, wgLon))
  24.             {
  25.                 mgLat = wgLat;
  26.                 mgLon = wgLon;
  27.                 return;
  28.             }
  29.             double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
  30.             double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);
  31.             double radLat = wgLat / 180.0 * pi;
  32.             double magic = Math.Sin(radLat);
  33.             magic = 1 - ee * magic * magic;
  34.             double sqrtMagic = Math.Sqrt(magic);
  35.             dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
  36.             dLon = (dLon * 180.0) / (a / sqrtMagic * Math.Cos(radLat) * pi);
  37.             mgLat = wgLat + dLat;
  38.             mgLon = wgLon + dLon;
  39.         }

  40.         static bool outOfChina(double lat, double lon)
  41.         {
  42.             if (lon < 72.004 || lon > 137.8347)
  43.                 return true;
  44.             if (lat < 0.8293 || lat > 55.8271)
  45.                 return true;
  46.             return false;
  47.         }

  48.         static double transformLat(double x, double y)
  49.         {
  50.             double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.Sqrt(Math.Abs(x));
  51.             ret += (20.0 * Math.Sin(6.0 * x * pi) + 20.0 * Math.Sin(2.0 * x * pi)) * 2.0 / 3.0;
  52.             ret += (20.0 * Math.Sin(y * pi) + 40.0 * Math.Sin(y / 3.0 * pi)) * 2.0 / 3.0;
  53.             ret += (160.0 * Math.Sin(y / 12.0 * pi) + 320 * Math.Sin(y * pi / 30.0)) * 2.0 / 3.0;
  54.             return ret;
  55.         }

  56.         static double transformLon(double x, double y)
  57.         {
  58.             double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.Sqrt(Math.Abs(x));
  59.             ret += (20.0 * Math.Sin(6.0 * x * pi) + 20.0 * Math.Sin(2.0 * x * pi)) * 2.0 / 3.0;
  60.             ret += (20.0 * Math.Sin(x * pi) + 40.0 * Math.Sin(x / 3.0 * pi)) * 2.0 / 3.0;
  61.             ret += (150.0 * Math.Sin(x / 12.0 * pi) + 300.0 * Math.Sin(x / 30.0 * pi)) * 2.0 / 3.0;
  62.             return ret;
  63.         }
  64.     }
  65. }
复制代码


出处:https://on4wp7.codeplex.com/Sour ... 83#EvilTransform.cs

出0入0汤圆

发表于 2015-7-16 06:51:29 | 显示全部楼层
好东西 一定要顶   

出0入8汤圆

发表于 2015-7-16 08:12:03 来自手机 | 显示全部楼层
这个是进制转换的问题。一个用60进制,一个是100进制的,将gps的数据转换下就可以了。

出0入0汤圆

发表于 2015-7-16 10:12:47 来自手机 | 显示全部楼层
查一查各自的坐标系定义应该就懂了吧

出0入0汤圆

发表于 2015-7-16 10:53:23 | 显示全部楼层
好东西啊,收藏

出0入0汤圆

发表于 2015-11-19 16:44:36 | 显示全部楼层
学习了  
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 23:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表