当前位置:网站首页>C# 百度地图,高德地图,Google地图(GPS) 经纬度转换
C# 百度地图,高德地图,Google地图(GPS) 经纬度转换
2022-07-02 06:32:00 【清山博客】
using System;
namespace PhotoHelper
{
/// <summary>
/// 位置坐标转换类
/// WGS-84:是国际标准,GPS坐标(Google Earth使用、或者GPS模块)
/// GCJ-02:中国坐标偏移标准,Google Map、高德、腾讯使用
/// BD-09:百度坐标偏移标准,Baidu Map使用
/// </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>
/// 国际标准->百度标准(gps坐标转换成百度坐标,小数点前4位为准确坐标)
/// </summary>
/// <param name="lat">纬度</param>
/// <param name="lon">经度</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;
}
}
}边栏推荐
- Installing Oracle database 19C for Linux
- C language custom types - structure, bit segment (anonymous structure, self reference of structure, memory alignment of structure)
- Mutex
- Makefile基本原理
- STM32 new project (refer to punctual atom)
- Sqli labs Level 2
- 什么是SQL注入
- Linux binary installation Oracle database 19C
- OpenFeign 简单使用
- OpenShift 容器平台社区版 OKD 4.10.0部署
猜你喜欢

File upload and download performance test based on the locust framework

Minecraft插件服开服

Gateway is easy to use

Detailed explanation of NIN network

sqli-labs第8关(布尔盲注)

commands out of sync. did you run multiple statements at once

Data asset management function

c语言自定义类型——结构体,位段(匿名结构体,结构体的自引用,结构体的内存对齐)

Sentinel easy to use

Linux安装Oracle Database 19c RAC
随机推荐
2022 Heilongjiang's latest eight member (Safety Officer) simulated test question bank and answers
Minecraft群组服开服
旋转链表(图解说明)
判断是否是数独
Linux binary installation Oracle database 19C
文件上传-upload-labs
Gateway 简单使用
Dip1000 runaway
OpenFeign 简单使用
Minecraft群組服開服
History of Web Technology
CarSim learning experience - rough translation 1
kubeadm部署kubernetes v1.23.5集群
Rotating linked list (illustration)
Finishing the interview essentials of secsha system!!!
选择排序和插入排序
Linked list classic interview questions (reverse the linked list, middle node, penultimate node, merge and split the linked list, and delete duplicate nodes)
Comparable,Comparator,Clonable 接口使用剖析
Web安全--核心防御机制
k8s入门:Helm 构建 MySQL