下文转自:http://www.oncoding.cn/2010/geo-location-frontend
<!-- by j5726 -->
在Smashing Magazine上看到这篇Entering
The Wonderful World of Geo Location
,介绍了获取并处理用户地理位置的应用和方法,
很有意思。结合原文的内容,加上之前的一些应用,整理了几个可以完全在前端实现的地理位置相关小功能。
1.通过IP获取用户位置
很多时候需要通过IP判断用户的位置,通常的办法是通过自己的后台程序查询数据库得到。如果用户位置只是应用在前端,或者有其他的特殊原因(比如,
懒:),也有一些其他办法来快速的获取用户位置。
maxmind.com
提供了一个
服务,通过引入一个js文件(http://j.maxmind.com/app/geoip.js
),
可以把他判断到的用户的国家、城市、经纬度等信息加入到页面中来。下面是从青岛访问这个js文件返回的内容:
1
|
function
geoip_country_code()
{
return
'CN'
; }
function
geoip_country_name()
{
return
'China'
; }
function
geoip_city()
{
return
'Qingdao'
; }
function
geoip_region()
{
return
'25'
; }
function
geoip_region_name()
{
return
'Shandong'
; }
function
geoip_latitude()
{
return
'36.0986'
; }
function
geoip_longitude()
{
return
'120.3719'
; }
function
geoip_postal_code()
{
return
''
; }
|
我们就可以利用这些信息做很多东西了:DEMO
2.W3C共享位置接口
HTML5加入了的贡献地理位置的浏览器API接口,目前firefox3.5等浏览器已经支持这一功能。
用法:
02
|
if
(navigator.geolocation){
|
04
|
navigator.geolocation.getCurrentPosition(
|
08
|
var
lat =
position.coords.latitude;
|
09
|
var
lon =
position.coords.longitude;
|
看 DEMO
3. Google Gears 的 Geolocation API
Google Gears
是主
要提供本地存储功能的浏览器扩展,新版本的Gears中,加入了判断用户地理位置的API,通过IP、WIFI热点等判断位置。不过Gears的使用似乎
并不太广泛(Chrome内置了Gears,其他浏览器需要安装),国内的地理位置信息也不够丰富,所以这个应用目前只可作为参考。
使用Gears的基本方法看这里
,引
入gears_init.js
,使用Geolocation API的程序为:
1
|
var
geo =
factory.create(
'beta.geolocation'
);
|
2
|
var
okCallback =
function
(d){
|
3
|
alert(
'当前位置(纬度,经度): '
+ d.latitude +
','
+ d.longitude);
|
5
|
var
errorCallback =
function
(err){
|
8
|
geo.getCurrentPosition(okCallback
, errorCallback);
|
更多内容参考这篇文章:使用Gears获取当前地理位置
,以及DEMO
。
4.逆经纬度解析
通过浏览器API等方式得到经纬度后,有时需要得到对应的城市名,这就是逆经纬度解析。
google maps api提供了一些经纬度解析方法,如果我们不想引入庞大的api,可以直接使用他的请求地址,通过jsonp
方式得到google的经纬度解析数据
。jsonp请求地址形式为:
http://ditu.google.cn/maps/geo?
output=json&oe=utf-8&q=纬度%2C经度
&key=你申请到的key
&mapclient=jsapi&hl=zh-CN&callback=myfunction
参数q为经纬度,参数callback为回调函数名。
可以看下这
个地址
的返回结果,数据非常丰富,并且还是中文的:
001
|
myfunction && myfunction( {
|
002
|
"name"
:
"36.06023, 120.3024"
,
|
005
|
"request"
:
"geocode"
|
009
|
"address"
:
"中国山东省青岛市市南区台西三路6号-10号"
,
|
013
|
"AdministrativeArea"
: {
|
014
|
"AdministrativeAreaName"
:
"山东省"
,
|
016
|
"DependentLocality"
: {
|
017
|
"DependentLocalityName"
:
"市南区"
,
|
019
|
"ThoroughfareName"
:
"台西三路
6号-10号"
|
022
|
"LocalityName"
:
"青岛市"
|
025
|
"CountryName"
:
"中国"
,
|
026
|
"CountryNameCode"
:
"CN"
|
031
|
"north"
:
36.0633254,
|
032
|
"south"
: 36.0570301,
|
033
|
"east"
:
120.3054361,
|
038
|
"coordinates"
: [ 120.3024027,
36.0602271, 0 ]
|
042
|
"address"
:
"中国山东省青岛市市南区台西三路8号阿双美容美发厅"
,
|
046
|
"AdministrativeArea"
: {
|
047
|
"AdministrativeAreaName"
:
"山东省"
,
|
049
|
"DependentLocality"
: {
|
050
|
"AddressLine"
: [
"阿双
美容美发厅"
],
|
051
|
"DependentLocalityName"
:
"市南区"
,
|
053
|
"ThoroughfareName"
:
"台西三路
8号"
|
056
|
"LocalityName"
:
"青岛市"
|
059
|
"CountryName"
:
"中国"
,
|
060
|
"CountryNameCode"
:
"CN"
|
065
|
"north"
:
36.0632366,
|
066
|
"south"
: 36.0569414,
|
067
|
"east"
:
120.3055696,
|
072
|
"coordinates"
: [ 120.3024220,
36.0600890, 0 ]
|
076
|
"address"
:
"中国青岛市市南区台西四路站"
,
|
079
|
"AddressLine"
: [
"台西四路站"
]
|
083
|
"north"
:
36.0630636,
|
084
|
"south"
: 36.0567684,
|
085
|
"east"
:
120.3063986,
|
090
|
"coordinates"
: [ 120.3032510,
36.0599160, 0 ]
|
094
|
"address"
:
"中国青岛市市南区云南路(台西四路口)站"
,
|
097
|
"AddressLine"
: [
"云南路(台西四路口)站"
]
|
101
|
"north"
:
36.0643586,
|
102
|
"south"
: 36.0580634,
|
103
|
"east"
:
120.3073456,
|
108
|
"coordinates"
: [ 120.3041980,
36.0612110, 0 ]
|
112
|
"address"
:
"中国青岛市市南区贵州路站"
,
|
115
|
"AddressLine"
: [
"贵州路站"
]
|
119
|
"north"
:
36.0614856,
|
120
|
"south"
: 36.0551904,
|
121
|
"east"
:
120.3036956,
|
126
|
"coordinates"
: [ 120.3005480,
36.0583380, 0 ]
|
130
|
"address"
:
"中国青岛市市南区团岛站"
,
|
133
|
"AddressLine"
: [
"团岛站"
]
|
137
|
"north"
:
36.0629146,
|
138
|
"south"
: 36.0566194,
|
139
|
"east"
:
120.3022496,
|
144
|
"coordinates"
: [ 120.2991020,
36.0597670, 0 ]
|
148
|
"address"
:
"中国山东省青岛市市南区团岛四路海湾花园"
,
|
152
|
"AdministrativeArea"
: {
|
153
|
"AdministrativeAreaName"
:
"山东省"
,
|
155
|
"DependentLocality"
: {
|
156
|
"AddressLine"
: [
"海湾
花园"
],
|
157
|
"DependentLocalityName"
:
"市南区"
,
|
159
|
"ThoroughfareName"
:
"团岛四
路"
|
162
|
"LocalityName"
:
"青岛市"
|
165
|
"CountryName"
:
"中国"
,
|
166
|
"CountryNameCode"
:
"CN"
|
171
|
"north"
:
36.0642706,
|
172
|
"south"
: 36.0579754,
|
173
|
"east"
:
120.3006386,
|
178
|
"coordinates"
: [ 120.2974910,
36.0611230, 0 ]
|
180
|
}, {<
分享到:
Global site tag (gtag.js) - Google Analytics
|
相关推荐
在功能模块方面,该平台主要包括以下几个方面: 用户管理:包括用户注册、登录、个人信息管理等功能,方便游客和农家乐业主进行信息登记和管理。 景点推荐:根据游客的兴趣爱好和地理位置,为游客推荐合适的乡村...
在实现 B3log 构思的这几年: 我们见证了 xAE(GAE/BAE/SAE/etc)的兴起与没落。2009 年选择了 GAE 作为服务器,并开始实现 Latke 框架来解决跨云平台,直到告别 GAE,不得不感叹技术更迭之快 感受到了自造轮子...
它在前端使用带有Redux的React.js来生成从后端的PostgreSql数据库异步获取(通过AJAX请求)的动态内容。... 例如,下一部分将详细描述我们的地理位置功能,该功能可帮助客户在现实世界中找到业务。 该数据
1.3 项目意义 换热站的工作环境特殊,其客观条件受到地理位置的限制。因此,要保证它的安全性 和生产人员的安全性,实施实时监控系统是非常必要的。但使用有线传输来架设一个庞 大的通信系统是一个费时耗资金的过程...
Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。主要的工作是发展 Web 规范,...
2.2.2报警功能 报警类别:消防报警、防盗报警、动态检测 系统实现告警录像,同时传送报警信息和相关图像至监控中心,并自动在地理区域图上 或相关表格进行提示,显示报警的内容和具体位置。 系统告警时能联动相关...
前端纳米度图警告该项目需要互联网连接才能工作。跑步在浏览器上打开 index.html 文件以查看地图并与之交互。...参考参考: 搜索栏和样式的基础来自 使用了多个地图标记引用,这些是其中的几个: : 、 : 虽然这在项
这场战斗由下列部分组成:使最终用户的连接自动化而无论其地理位置在何处、优化基础结构性能以及管理和配置最终用户系统。 许多寻求 ISP 技术支持的电话,都源自域名服务 (DNS) 问题。DNS 是一个分布式数据库,...
它是在几个小时内建成的,可以运行一些我通常不使用的技术,并且受到随机用户api和最近的Ashley Madison攻击的启发。 ##数据源生成随机的人来填充站点 -IP地理位置查克·诺里斯(Chuck Norris)的笑话被用于约会...
Web 2.0、云计算发展起来后,为了共享数据,提供更无缝的体验和增值,很多互联网网站和服务开始提供开放API,第三方开发者可以在其上开发软件应用,访问平台的数据或其他功能。这就是我们已经听得耳朵起茧子的开放...
创建一个 Web 应用程序,告诉用户在地图上的特定位置附近可能会找到哪些类型的食品卡车。 解决方案 这个 git 存储库包含一个 web 应用程序原型,用于解决 Food Truck finder 问题。 当客户访问,他们会被要求输入一...
通过选择相交点,用户可以“单击”几个短视频以形成长视频路径,然后转到“远足”。 此外,还整合了一个有趣的元素。执行对于应用程序的服务器后端, 与和一起使用。 前端使用和 。 该应用程序托管在 ,对MongoDB的...