感谢: 小慧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. Android学习笔记之Broadcast Receiver

    可程序间通信 注册通信,注销通信,发送消息 package com.jiahemeikang.helloandroid; import com.jiahemikang.service.EchoServ ...

  2. Win7下 IIS+PHP(ZendLoader)+MySQL

    这里使用的是傻瓜式安装方式 下载php-5.3.18-nts-Win32-VC9-x86.msi,Win7下可执行文件.(下载地址 http://pan.baidu.com/s/1qvJCA) 执行到 ...

  3. 数据降维技术(2)—奇异值分解(SVD)

    上一篇文章讲了PCA的数据原理,明白了PCA主要的思想及使用PCA做数据降维的步骤,本文我们详细探讨下另一种数据降维技术—奇异值分解(SVD). 在介绍奇异值分解前,先谈谈这个比较奇怪的名字:奇异值分 ...

  4. Online Schema Change for MySQL

    It is great to be able to build small utilities on top of an excellent RDBMS. Thank you MySQL. This ...

  5. JNI介绍(转)

    源:JNI介绍 JNI是在学习Android HAL时必须要面临一个知识点,如果你不了解它的机制,不了解它的使用方式,你会被本地代码绕的晕头转向,JNI作为一个中间语言的翻译官在运行Java代码的An ...

  6. 【转】int && 非常量右值

    C++ 11中引入的右值引用正好可用于标识一个非常量右值.C++ 11中用&表示左值引用,用&&表示右值引用,如: int &&a = 10 右值引用根据其修饰 ...

  7. 【转】程序员必须知道的几个Git代码托管平台

     一.VS2013中克隆远程Git仓库和SSH的配置 1.VS2013中克隆远程项目  首先感谢园友的评论和补充,今日又仔细看了一下,VS2013中是可以克隆项目的,只是我一直用的GitHub来克隆的 ...

  8. nodejs抓取数据一(列表抓取)

    纯属初学...有很多需要改进的地方,请多多指点... 目标是抓取58同城 这个大分类下的列表数据: http://cd.58.com/caishui/?PGTID=14397169455980.924 ...

  9. Unity3D ——强大的跨平台3D游戏开发工具(三)

    第四章 为地形添加水源.水流以及水下的模糊效果 制作好了地形的各种效果,接下来我们给场景添加一些水效果,使场景更加丰富. 第一步:添加水面 由于我在上一次的地形创作中就已经在山峰之间制作了一块洼地,它 ...

  10. C++中类的大小计算方法总结《网络+总结》

    C++中类的成员函数,静态成员是不占类的大小的.类的大小等于基类的大小+子类个non-static成员变量的大小再+非虚基类大小,如果有多态性还要考虑vptr(可能不止一个)大小,这里成员变量是会被字 ...