当前位置:网站首页>C Baidu map, Gaode map, Google map (GPS) longitude and latitude conversion
C Baidu map, Gaode map, Google map (GPS) longitude and latitude conversion
2022-07-02 08:46:00 【Qingshan blog】
using System;
namespace PhotoHelper
{
/// <summary>
/// Position coordinate conversion class
/// WGS-84: It's an international standard ,GPS coordinate (Google Earth Use 、 perhaps GPS modular )
/// GCJ-02: Chinese standard of coordinate migration ,Google Map、 Gao de 、 Tencent uses
/// BD-09: Baidu coordinate offset standard ,Baidu Map Use
/// </summary>
public class LocationUtil
{
public const double Pi = 3.14159265358979324 * 3000.0 / 180.0;
private static readonly double pi = 3.14159265358979324;
private static readonly double a = 6378245.0;
private static readonly double ee = 0.00669342162296594323;
/// <summary>
/// international standard -> Baidu standard (gps Coordinate conversion to Baidu coordinate , Before the decimal point 4 Position is the exact coordinate )
/// </summary>
/// <param name="lat"> latitude </param>
/// <param name="lon"> longitude </param>
/// <returns></returns>
public static double[] Wgs2Bd(double lat, double lon)
{
var wgs2Gcj = Wgs2Gcj(lat, lon);
var gcj2Bd = Gcj2Bd(wgs2Gcj[0], wgs2Gcj[1]);
return gcj2Bd;
}
public static double[] Gcj2Bd(double lat, double lon)
{
double x = lon, y = lat;
var z = Math.Sqrt(x * x + y * y) + 0.00002 * Math.Sin(y * Pi);
var theta = Math.Atan2(y, x) + 0.000003 * Math.Cos(x * Pi);
var cos = z * Math.Cos(theta) + 0.0065;
var sin = z * Math.Sin(theta) + 0.006;
return new[] { sin, cos };
}
public static double[] Bd2Gcj(double lat, double lon)
{
double x = lon - 0.0065, y = lat - 0.006;
var z = Math.Sqrt(x * x + y * y) - 0.00002 * Math.Sin(y * Pi);
var theta = Math.Atan2(y, x) - 0.000003 * Math.Cos(x * Pi);
var cos = z * Math.Cos(theta);
var sin = z * Math.Sin(theta);
return new[] { sin, cos };
}
public static double[] Wgs2Gcj(double lat, double lon)
{
var dLat = TransformLat(lon - 105.0, lat - 35.0);
var dLon = TransformLon(lon - 105.0, lat - 35.0);
var radLat = lat / 180.0 * pi;
var magic = Math.Sin(radLat);
magic = 1 - ee * magic * magic;
var sqrtMagic = Math.Sqrt(magic);
dLat = dLat * 180.0 / (a * (1 - ee) / (magic * sqrtMagic) * pi);
dLon = dLon * 180.0 / (a / sqrtMagic * Math.Cos(radLat) * pi);
var mgLat = lat + dLat;
var mgLon = lon + dLon;
double[] loc = { mgLat, mgLon };
return loc;
}
private static double TransformLat(double lat, double lon)
{
var ret = -100.0 + 2.0 * lat + 3.0 * lon + 0.2 * lon * lon + 0.1 * lat * lon + 0.2 * Math.Sqrt(Math.Abs(lat));
ret += (20.0 * Math.Sin(6.0 * lat * pi) + 20.0 * Math.Sin(2.0 * lat * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.Sin(lon * pi) + 40.0 * Math.Sin(lon / 3.0 * pi)) * 2.0 / 3.0;
ret += (160.0 * Math.Sin(lon / 12.0 * pi) + 320 * Math.Sin(lon * pi / 30.0)) * 2.0 / 3.0;
return ret;
}
private static double TransformLon(double lat, double lon)
{
var ret = 300.0 + lat + 2.0 * lon + 0.1 * lat * lat + 0.1 * lat * lon + 0.1 * Math.Sqrt(Math.Abs(lat));
ret += (20.0 * Math.Sin(6.0 * lat * pi) + 20.0 * Math.Sin(2.0 * lat * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.Sin(lat * pi) + 40.0 * Math.Sin(lat / 3.0 * pi)) * 2.0 / 3.0;
ret += (150.0 * Math.Sin(lat / 12.0 * pi) + 300.0 * Math.Sin(lat / 30.0 * pi)) * 2.0 / 3.0;
return ret;
}
}
}边栏推荐
- Kubedm deploys kubernetes v1.23.5 cluster
- Dip1000 runaway
- STM32 new project (refer to punctual atom)
- Nacos download, start and configure MySQL database
- [blackmail virus data recovery] suffix Hydra blackmail virus
- Installing Oracle database 19C RAC on Linux
- Realization of basic function of sequence table
- 链表经典面试题(反转链表,中间节点,倒数第k个节点,合并分割链表,删除重复节点)
- First week of JS study
- sqli-labs第1关
猜你喜欢
随机推荐
Zipkin is easy to use
sqli-labs第2关
一个经典约瑟夫问题的分析与解答
ICMP Protocol
sqli-labs第8关(布尔盲注)
Concise analysis of redis source code 11 - Main IO threads and redis 6.0 multi IO threads
Openfeign facile à utiliser
整理秒杀系统的面试必备!!!
群辉 NAS 配置 iSCSI 存储
PCL calculates the intersection of three mutually nonparallel planes
[blackmail virus data recovery] suffix Crylock blackmail virus
Pointer initialization
web安全--逻辑越权
Linux二进制安装Oracle Database 19c
Openshift container platform community okd 4.10.0 deployment
Qunhui NAS configuring iSCSI storage
Realize bidirectional linked list (with puppet node)
Qt的connect函数和disconnect函数
Installing Oracle database 19C RAC on Linux
commands out of sync. did you run multiple statements at once






![[untitled]](/img/6c/df2ebb3e39d1e47b8dd74cfdddbb06.gif)


