jquery+asp.net 调用百度geocoder手机浏览器定位--Api介绍及Html定位方法
原文来自:http://suchso.com/projecteactual/jqueryaspnetbaidugeocodermobilebrowserposition.html
在做一个社区项目中,支持移动浏览器进行选择地区和社区,由于地区很多,想在默认的情况下定位手机用户的城市,
方便用户进行配置自己喜欢的社区。
1.选择一个地图服务接口:
Google一下,发现百度提供这样的一个接口:Geocoding API .个人推荐百度,因为Google不知道那天就不能调用了。
首先,要借用别人的服务,通过别人的服务接口获取自己想要的数据。Geocoding API 是百度提供的服务接口,主要是用于提供从地址解析到经纬度坐标或者从经纬度坐标解析到地址的转换服务。
供程序员调用的、http形式的地图服务接口。主要服务那些非网页程序的调用。例如C# 、C++、Java等开发语言都能发送http请求且能接收返回数据。
用户只需在请求的url字串中拼接好关键字或者经纬度信息,即可获取到相应的百度经纬度或者结构化地理信息。

Geocoding API有哪些功能?
Geocoding API包括地址解析和逆地址解析功能。
地址解析是指,由详细到街道的结构化地址得到百度经纬度信息,且支持名胜古迹、标志性建筑名称直接解析返回百度经纬度。例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.31985,lat:39.959836”,“百度大厦”地址解析的结果是“lng:116.30815,lat:40.056885”
逆地址解析是指,由百度经纬度信息得到结构化地址信息。例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。
注意:
1).因为Geocoding和反Geocoding使用的门址数据以及算法都不是一样的,所以会出现不能一一对应的现象。
2).解析过程中可能会出现一对坐标值对应多个地址门牌信息,本接口将返回距离坐标点最近的一个地址门牌信息。
项目地址:http://developer.baidu.com/map/geocoding-api.htm
2.Html5支持获取用户地理位置信息:
|
html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置。 window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置 支持参数://options可以不写,为默认即可 options = {
|
Html 5 geolocation 实例代码如下:
|
$(document).bind("pageinit", function (event, data) { getLocation(); }); function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( showPosition,//成功回调函数 getPositionError,//失败回调函数 {//options参数配置 enableHighAccuracy:true,//boolean 是否要求高精度的地理信息 timeout:2000, maximumAge:36000 } ); } else { //不支持,就拉倒吧。 } } 失败回调函数: function getPositionError(error){ switch(error.code){ case error.TIMEOUT: // alert("连接超时,请重试"); break; case error.PERMISSION_DENIED: //alert("您拒绝了使用位置共享服务,查询已取消"); break; case error.POSITION_UNAVAILABLE: //alert("亲爱的火星网友,非常抱歉,我们暂时无法为您所在的星球提供位置服务"); break; } } 成功回调函数: function showPosition(position) { //内容在下面说。 } |
成功返回的结果说明position:
当成功获取地理位置信息时候,onsuccess方法中会返回position对象,通过这个对象可以获取地理位置的相关信息,包括:
position对象的属性:
latitude,//纬度
longitude,//经度
altitude,//海拔高度
accuracy,//获取纬度或者经度的精度
altitudeAccurancy,//海拔高度的精度
heading,//设备前景方向。正北方向的顺时针旋转角
speed,//设备的前进速度 m/s
timestamp,//获取地理位置信息时候的时间
3.封装对百度Geocoding API的调用
下面是百度给的例子。
|
根据坐标获取它的地址 http://api.map.baidu.com/geocoder?output=json&location=39.983424,%20116.322987&key=37492c0ee6f924cb5e934fa08c6b1676 //解析“lat:39.983424, lng:116.322987”坐标返回“北京市海淀区中关村大街27号1101-08室”,以json格式输出 http://api.map.baidu.com/geocoder?output=xml&location=39.983424,%20116.322987&key=37492c0ee6f924cb5e934fa08c6b1676 //解析“lat:39.983424, lng:116.322987”坐标返回“北京市海淀区中关村大街27号1101-08室”,以xml格式输出 |
我一直想用jquery 的$.getJson方式调用,但是一直不成功。肯定是跨域的问题了,尝试了几次都不成功就换了个思路。
用asp.net做个中介吧,通过后台C#实现api的数据读取和分析,再传给前台。效率上差别不是很大,但是心里还有点郁闷。
下面是具体实现了。
1)、为了方便解析百度返回的json结果,我使用了开源代码: Newtonsoft.Json。大家可以到这里看看 Json.NET http://json.codeplex.com/。
很好用的。解析和烦解析json,可以object to json,也可以反转。
2)、对照百度返回的json结果,我建了一个直接对应的类。
{
|
我的类:
|
public class JsonCity { public JsonCity() { } public string status { get; set; } public Result result { get; set; } } public class Result { public Location location { get; set; } public string formatted_address { get; set; } public AddressComponent addressComponent { get; set; } } public class Location { public string lng { get; set; } public string lat { get; set; } } public class AddressComponent { public string city { get; set; } public string district { get; set; } public string province { get; set; } public string street { get; set; } public string street_number{ get; set; } } |
3)、WebClient 调用百度Api接口,并解析
|
private string GetCityinfo() { WebClient client = new WebClient();//webclient客户端对象 string url = "http://api.map.baidu.com/geocoder?location=" + Jwd + "&output=json&key=c1889c461489a390c023d7e51f23af04"; string cityname = ""; client.Encoding = Encoding.UTF8;//编码格式 string responseTest = client.DownloadString(url);//下载xml响应数据 JsonCity jsonCity = (JsonCity)Newtonsoft.Json.JsonConvert.DeserializeObject(responseTest, typeof(JsonCity)); cityname = jsonCity.result.addressComponent.city; return cityname; } |
4)、在前端中用js调用我写的这个asp.net页面的方法,实现数据的返回。
|
function showPosition(position) { var lat = position.coords.latitude; var lng = position.coords.longitude; var AjaxUrl = "Data/City.aspx?tp=4&Jwd=" + lat+"," +lng; $.ajax({ type: "get", url: AjaxUrl, success: function (data, textStatus) { //成功显示结果。 if (data != null) { alert(data) } }, complete: function (XMLHttpRequest, textStatus) { //HideLoading(); }, error: function (e) { } }); } |
好了,终于是大功告成了。
jquery+asp.net 调用百度geocoder手机浏览器定位--Api介绍及Html定位方法的更多相关文章
- Asp.net调用百度搜索引擎
ASP.NET 调用百度搜索引擎 百度搜索引擎提供了一段嵌入到页面中的代码 <form action="http://www.baidu.com/baidu" target= ...
- Asp.NET调用百度翻译
Asp.NET调用百度翻译,图示: HTML: <%@ Page Language="C#" AutoEventWireup="true" CodeFil ...
- 微信内嵌浏览器打开手机浏览器下载APP(APK)的方法
想必大家会经常碰到网页链接在微信内无法打开和微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下四点 1.网页链接被举报次数 ...
- android 点击桌面图标,打开手机浏览器进入对应的站点
做一个假的adnroid app.要实现点击桌面图标.打开手机浏览器进入对应的站点,实现方法非常easy import android.app.Activity; import android.con ...
- 微信或手机浏览器在线显示office文件(已測试ios、android)
近期开发微信企业号,发现微信andriod版内置浏览器在打开文件方面有问题,可是ios版没有问题.原因是ios版使用的是safari浏览器 支持文档直接打开.可是andriod版使用的是腾讯浏览器x5 ...
- 在XAF(ASP.NET)中以ListEditor的形式调用百度地图API
因为项目需要,在系统中使用地图显示设备的地理位置.考虑过ArgGIS,Bing和Baidu地图.本来想用ArgGIS,看教程嫌麻烦.所以还是用Web地图吧.Bing的话还要申请个key,没心情.百度地 ...
- 微信jsApI及微信分享对应在手机浏览器的调用总结。
摘录自别人的博客: 第一篇:微信内置浏览器的JsAPI(WeixinJSBridge续) 之前有写过几篇关于微信内置浏览器(WebView)中特有的Javascript API(Javascript ...
- Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)
原文:Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇) 老话说的好:好记心不如烂笔头! 本着这原则,我把最近工作中遇到的jquery利用ajax调用web服务的 ...
- 【百度地图API】手机浏览器抓包工具及其使用方法
原文:[百度地图API]手机浏览器抓包工具及其使用方法 摘要:为了测试地图API在手机浏览器上的性能,需要给手机浏览器设置代理.通过代理,我们可以在PC上获取到抓包数据.进而对性能做进一步分析. -- ...
随机推荐
- Mac Oracle SqlDeveloper 快捷输入
用惯了 plsql 的快捷输入,换了 Mac Oracle SqlDeveloper反倒是找不到了,翻出去找了几次终于找到 SqlDeveloper -- preferences -- 数据库(dat ...
- rpx单位与移动设备分辨率
移动设备的分辨率与rpx 不是所有的单位都适合用rpx 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论
- Spring <context:annotation-config/> 说明
在基于主机方式配置Spring的配置文件中,你可能会见到<context:annotation-config/>这样一条配置,他的作用是式地向 Spring 容器注册AutowiredAn ...
- POJ 1579 Function Run Fun 记忆化递归
典型的记忆化递归问题. 这类问题的记忆主要是利用数组记忆.那么已经计算过的值就能够直接返回.不须要进一步递归了. 注意:下标越界.递归顺序不能错,及时推断是否已经计算过值了,不要多递归. 或者直接使用 ...
- Java多线程系列目录(共43篇)(转)
Java多线程系列目录(共43篇) http://www.cnblogs.com/skywang12345/p/java_threads_category.html
- Java实现可视化迷宫
代码地址如下:http://www.demodashi.com/demo/14547.html 需求 使用深度优先算法求解迷宫路径,使用Java实现求解过程的可视化,可单步运行,形象直观. 演示效果 ...
- esp8266烧录Html文件,实现内置网页控制设备!
代码地址如下:http://www.demodashi.com/demo/14321.html 一.前言: 这个月也快结束了,时间真快,我服务器知识自学依然在路途中,这几天听到热点网页配置esp826 ...
- AsyncTask 异步任务基本使用-下载视频
概述 android 提供了一个异步任务类AsyncTask,使创建异步任务.更新UI变得更加简单,不再需要编写任务线程和Handler实例即可完成相同的任务.本例子将演示并实现,使用AsyncTas ...
- IntelliJ IDEA java项目导入jar包,打jar包
一.导入 1.java项目在没有导入该jar包之前,如图: 2.点击 File -> Project Structure(快捷键 Ctrl + Alt + Shift + s),点击Proje ...
- leetcode16 3-Sum
题目链接 给定数组a[](长度不小于3)和一个数字target,要求从a中选取3个数字,让它们的和尽量接近target. 解法:首先对数组a进行排序,其次枚举最外面两层指针,对于第三个指针肯定是从右往 ...