感谢: 小慧only http://www.cnblogs.com/zhaohuionly/p/3142623.html  GPS转化坐标方法
   大胡子青松 http://www.cnblogs.com/xianyin05/archive/2013/05/10/3071224.html  获取照片中Exif信息里GPS经纬度数

需求:上传个图片 解释出拍摄地的 GPS 信息,以地图的形式展现出来。GPS 信息的验证,可下载 MagicEXIF 元数据编辑器 查看

不多说,一下为代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="Code.Test.WebForm2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="file" id="file_img" runat="server"/>
<asp:Button runat="server" Text="提取" ID="btn_zh" OnClick="btn_zh_Click"/>
<asp:Image runat="server" ID="Map" />
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Data;
using System.IO;
using System.Drawing.Imaging;
using System.Net;
using Newtonsoft.Json; namespace Code.Test
{
public partial class WebForm2 : System.Web.UI.Page
{
Code.SysManage.Commen.CommonTool commonTool = new SysManage.Commen.CommonTool();
public class MapConvert
{
public string error { get; set; }
public string x { get; set; }
public string y { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{ } #region 读取图片中GPS点 /// <summary>
/// 获取图片中的GPS坐标点
/// </summary>
/// <param name="p_图片路径">图片路径</param>
/// <returns>返回坐标【纬度+经度】用"+"分割 取数组中第0和1个位置的值</returns>
public String fnGPS坐标(String p_图片路径)
{
String s_GPS坐标 = "";
//载入图片
System.Drawing.Image objImage = System.Drawing.Image.FromFile(p_图片路径);
//取得所有的属性(以PropertyId做排序)
var propertyItems = objImage.PropertyItems.OrderBy(x => x.Id);
//暂定纬度N(北纬)
char chrGPSLatitudeRef = 'N';
//暂定经度为E(东经)
char chrGPSLongitudeRef = 'E';
foreach (PropertyItem objItem in propertyItems)
{
//只取Id范围为0x0000到0x001e
if (objItem.Id >= 0x0000 && objItem.Id <= 0x001e)
{
switch (objItem.Id)
{
case 0x0000:
var query = from tmpb in objItem.Value select tmpb.ToString();
string sreVersion = string.Join(".", query.ToArray());
break;
case 0x0001://北纬 N chrGPSLatitudeRef
chrGPSLatitudeRef = BitConverter.ToChar(objItem.Value, );
break;
case 0x0002://维度 strLatitude
if (objItem.Value.Length == )
{
//degrees(将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint)
double d = BitConverter.ToUInt32(objItem.Value, ) * 1.0d / BitConverter.ToUInt32(objItem.Value, );
//minutes(將byte[8]~byte[11]转成uint, 除以byte[12]~byte[15]转成的uint)
double m = BitConverter.ToUInt32(objItem.Value, ) * 1.0d / BitConverter.ToUInt32(objItem.Value, );
//seconds(將byte[16]~byte[19]转成uint, 除以byte[20]~byte[23]转成的uint)
double s = BitConverter.ToUInt32(objItem.Value, ) * 1.0d / BitConverter.ToUInt32(objItem.Value, );
//计算经纬度数值, 如果是南纬, 要乘上(-1)
double dblGPSLatitude = (((s / + m) / ) + d) * (chrGPSLatitudeRef.Equals('N') ? : -);
string strLatitude = string.Format("{0:#}°{1:#}'{2:#.00}\"{3}", d
, m, s, chrGPSLatitudeRef);
//纬度
//s_GPS坐标 += "维度:" + dblGPSLatitude + "," + strLatitude + "|";
s_GPS坐标 += (dblGPSLatitude + "|");
}
break;
case 0x0003: //东经 chrGPSLongitudeRef
//透过BitConverter, 将Value转成Char('E' / 'W')
//此值在后续的Longitude计算上会用到
chrGPSLongitudeRef = BitConverter.ToChar(objItem.Value, );
break;
case 0x0004: //经度
if (objItem.Value.Length == )
{
//degrees(将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint)
double d = BitConverter.ToUInt32(objItem.Value, ) * 1.0d / BitConverter.ToUInt32(objItem.Value, );
//minutes(将byte[8]~byte[11]转成uint, 除以byte[12]~byte[15]转成的uint)
double m = BitConverter.ToUInt32(objItem.Value, ) * 1.0d / BitConverter.ToUInt32(objItem.Value, );
//seconds(将byte[16]~byte[19]转成uint, 除以byte[20]~byte[23]转成的uint)
double s = BitConverter.ToUInt32(objItem.Value, ) * 1.0d / BitConverter.ToUInt32(objItem.Value, );
//计算精度的数值, 如果是西经, 要乘上(-1)
double dblGPSLongitude = (((s / + m) / ) + d) * (chrGPSLongitudeRef.Equals('E') ? : -);
string strLongitude = string.Format("{0:#}°{1:#}'{2:#.00}\"{3}", d
, m, s, chrGPSLongitudeRef); //s_GPS坐标 += "经度:" + dblGPSLongitude + "," + strLongitude + "|";
s_GPS坐标 += (dblGPSLongitude + "|");
}
break;
case 0x0005://海平面
string strAltitude = BitConverter.ToBoolean(objItem.Value, ) ? "" : "";
s_GPS坐标 += "海平面:" + strAltitude + "|";
break;
case 0x0006://高度
if (objItem.Value.Length == )
{
//将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint
double dblAltitude = BitConverter.ToUInt32(objItem.Value, ) * 1.0d / BitConverter.ToUInt32(objItem.Value, ); s_GPS坐标 += "水平高度:" + dblAltitude + "|";
}
break;
}
}
}
return s_GPS坐标;
} #endregion protected void btn_zh_Click(object sender, EventArgs e)
{ string picpath = commonTool.SaveImg(file_img, "News"); /*上传图片的方法,可自己重写*/
picpath = HttpContext.Current.Request.MapPath(picpath);
string Gpslocation = fnGPS坐标(picpath);/*获得GPS 信心,详细信息参考方法*/
Response.Write(Gpslocation);
//获取当前纬度
string Latitude = Gpslocation.Split('|')[];/*上传图片的方法,可自己重写*/ //获取当前经度
string Longitude = Gpslocation.Split('|')[]; //百度坐标转换API
string path = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=" + Longitude + "&y=" + Latitude + "";/*坐标纠正,生成百度地图的坐标*/ //WebClient请求
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(path);
StreamReader sr = new StreamReader(stream);
MapConvert mapConvert = new MapConvert();
string strResult = sr.ReadToEnd();
Response.Write(strResult);
mapConvert = JsonConvert.DeserializeObject<MapConvert>(strResult);
string lon = mapConvert.x;
string lat = mapConvert.y;
//进行Base64解码
byte[] xBuffer = Convert.FromBase64String(lon);
string strX = Encoding.UTF8.GetString(xBuffer, , xBuffer.Length);
byte[] yBuffer = Convert.FromBase64String(lat);
string strY = Encoding.UTF8.GetString(yBuffer, , xBuffer.Length);
Response.Write(strX + ",");
Response.Write(strY);
//生成静态图片
string imgSrc = string.Format("http://api.map.baidu.com/staticimage?center={0},{1}&width=600&height=600&zoom=19&markers={2},{3}&markerStyles=l,A", strX, strY, strX, strY);/*此处生成静态地图,以显示是否正确,可自行修改*/ //显示图片
Map.ImageUrl = imgSrc;
}
} }

照片提取GPS 转成百度地图坐标的更多相关文章

  1. gps数据转百度地图坐标

    昨天大叔问我一个关于gps的问题,一开始我是懵逼的,因为之前我从来没有接触过这玩意儿.稍微查了一下,gps协议包含了$开头和<>结尾,但这并不是重点.大叔告诉我说他们采集了一些位置的经纬度 ...

  2. GPS坐标转百度地图坐标

    百度地图提供了相关API:BMap.Convertor.translate, 但是使用上存在部分限制:1.次数限制:2.异步回调 可以用如下方法: /** * 地图位置计算工具(将GPS坐标转换成百度 ...

  3. 百度和谷歌的逆地址解析及GPS、谷歌地图和百度地图坐标之间的转换(python版)

    #!/usr/bin/env python # coding:utf-8 # @author: KaiVen """ GPS坐标转换: WGS-84:是国际标准,GPS坐 ...

  4. GPS定位为什么要转换处理?高德地图和百度地图坐标处理有什么不一样?

    GPS定位为什么要转换处理?高德地图和百度地图坐标处理有什么不一样? 先了解一下 高德地图 采用: GCJ-02 (不可逆) 百度百科: http://baike.baidu.com/link?url ...

  5. GPS坐标转换为百度地图坐标

    /** * GPS坐标转换为百度地图坐标 * 需要引入javabase64.jar 和json的一些包 * */ public class Gps2BaiDu { public static void ...

  6. 微信JS-SDK坐标位置转换为百度地图坐标

    微信JS-SDK开发过程中,使用getLocation获取坐标位置,如何将微信获取的坐标直接应用到百度地图中,显示以下效果: 说明:红色图标是从微信转换过来的位置,蓝色图标是周边位置.首先从微信开发流 ...

  7. 百度地图坐标纠偏和转换工具和DLL

    百度一直以来都是个即想装出一副拥抱互联网开放的样子,又为了短期商业利益封闭自己的公司,模仿谷歌地图,开放了自己的百度地图 API,为了防止别人盗用其数据和用户自由迁移,地图相比于火星坐标,又更加封闭, ...

  8. 手机端GPS定位结合百度地图实现定位

    html页面: <!DOCTYPE html>  <html>  <head>      <meta http-equiv="Content-Typ ...

  9. 获取ip ,百度地图坐标点 和 在 后台调用 url()

        protected  void getip()         {             string ips = HttpContext.Current.Request.UserHostA ...

随机推荐

  1. cinder /etc/lvm/lvm.conf 注意点

    在cinder节点,cinder-volume使用的磁盘(/dev/sdb),需要在/etc/lvm/lvm.conf中配置: devices {...filter = [ "a/sdb/& ...

  2. 设置gridcontrol的焦点行

    private void gridView1_DoubleClick(object sender, EventArgs e)        {            try            {  ...

  3. 解决airserver在Windows下安装失败的问题

    airserver 可以将iphone 实时投影到mac 和 pc.在mac上安装非常简单.但是在Windows上安装时会有很多问题.之前我电脑安装很快就完成了(因为我之前已经在不知情的前提先事先装过 ...

  4. javascript技巧大全套

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcE ...

  5. hbuilder 手机app开发系列(一)

    最佳答案好水啊,实在看不过眼,首先apicloud是一个框架,hbuidler是ide工具,两者没什么可比性.我来推荐一个国外免费开源的项目吧,Ionic framework,我之所以推荐它是因为它支 ...

  6. 【转】 完美配置Tomcat的HTTPS

    Tomcat配置HTTPS的文章到处都有,过程也比较简单,随后文中会转一段过来. 但对于启用APR情况下报异常“java.lang.Exception: Connector attribute SSL ...

  7. JVM线程安全

    一.线程的调度方式 线程调度分为两种方式: 协同式调度和抢占式调度.协同式调度:线程的执行时间由线程本身控制,线程将工作执行完之后,通知操作系统切换到其他线程上.缺点:时间不可控,就算出问题,也不会通 ...

  8. object - c 在URL中截取特定参数的值

    #pragma mark - 获取url特定的参数 -(NSString *) jiexi:(NSString *)CS webaddress:(NSString *)webaddress { NSE ...

  9. Extjs4新特性

    Extjs 4相对于之前的版本作出了重大的修正.其中包括全新的类系统.新平台的引入.API的修整和加强还有新组件的引入(如新的图表和图形组件).Extjs 4提供更快速.更稳定的用户体验,并且让开发人 ...

  10. jdom.jar导入问题

    一开始,导入jdom-1.1.1.jar无反应,还是缺包状态 =>将jdom-1.1.1.jar解压,在jdom/build/目录下有jdom.jar导入,success!