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上获取到抓包数据.进而对性能做进一步分析. -- ...
随机推荐
- HTML一(简介)
什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...
- Linux Bash 脚本:自己定义延迟代码块(裸数据保存方案)
结合 alias 和 read 使用方法.能够保存一些将要延迟执行的脚本,或者裸数据(字符串不被扩展)到一个变量中.以备后用. $ alias BEGIN='read -d "" ...
- 如何理解VB窗体中的scale类属性及width height属性之间的关系
如何理解VB窗体中的scale类属性及width height属性之间的关系 VB中的SCALEHIEGT,SCALEWIDTH,与窗体中的WIDTH,HEIGHT的区别及关系是许多VB初学者难以理解 ...
- 算法练习--- DP 求解最长上升子序列(LIS)
问题描写叙述: 对于2,5,3,1,9,4,6,8,7,找出最长上升子序列的个数 最长上升子序列定义: 对于i<j i,j∈a[0...n] 满足a[i]<a[j] 1. 找出DP公式:d ...
- Web服务器(容器)请求常见的错误及其解决方法
首先我们来看看容器如何找到service()方法?(1)当在浏览器中输入 http://localhost:8080/firstweb/sayHi 这个地址后,容器是如何找到 HelloServlet ...
- history设置时间戳
Linux查看历史命令,很关键!history,默认没有时间戳... 01.设置系统环境变量 echo 'export HISTTIMEFORMAT="%F %T `whoami` &qu ...
- redis编译
简介: Redis是Nosql中比较出名的,分布式数据库缓存,提升相应的速度,降低对数据库的访问! Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,(永久 ...
- pat1040:有几个PAT
https://www.patest.cn/contests/pat-b-practise/1040 #include "stdio.h" int main() { int p = ...
- vs2010 javascript代码拓展插件支持代码折叠
参考地址
- 执行存储过程报错——ora-01031:权限不足
1. 执行DDL报错 在oracle存储过程中,默认是可以直接执行DML和DQL的,但是执行CREATE这种的DDL则需要借助EXECUTE IMMEDIATE ···了,如下备份表语句 --抄表表备 ...