
从海外访问网站http://www.google.com时,你也许会惊讶地发现自己被自动转至相关的Google地区域名下。即便你的浏览器不具备地理定位能力,自动转向也会发生作用:Google通过IP地址得到你的位置,
宁波网站制作认为并使用了一个简单技巧进行转向。
通过使用其他技术,GeolocationAPI的精度能显著提升。以下为4种目前使用的方法。
1.对于带Internet连接的PC,其位置由IP地址而定。但你可能会想到,此类定位方法其实相当不精确。
2.在使用无线网络连接的情况下,定位可以变得更加精准。Google从世界范围收集了许多公共和私人WLAN数据。
3.对于带移动式通信芯片的设备(例如智能手机),其位置将通过移动通信网络得到确定。
4.如果硬件带有GPS传感器,在定位时会更加精准。GPS是一个基于卫星定位的系统,在良好工作环境下(室外、无障碍空地等),即便一个粗劣的传感器也可以将位置精确到以米为单位的范围内。
除了GPS传感器能离线使用,方法1~3都需要访问互联网并通过服务器定位服务得到应用。提供此类服务的公司包括Google(GoogleLocationService,可在Firefox、Chrome及Opera下使用)及另一美国公司SkyhookWireless(可在Safari及Opera的早期版本下使用)。
但服务商们是如何从无线及移动网络中得到位置信息的呢?以Google服务StreetView的街景车为例:它不仅拍摄照片,还保存公众及私人WLAN的信息。0年春天,人们发现这些车不仅收集WLAN的MAC地址及SSID,还收集用户信息。这一发现给Google带来了负面影响,并导致一系列公开道歉。
但这还不是全部:若浏览器通过移动网络或无线LAN路由访问互联网,则每次调用相应服务时都会发送位置信息。Google主要针对带Android操作系统的移动通信设备,而Skyhook主要针对的是iPhone用户。这些已描述方法的结合为这两家服务商提供了非常大的地理数据集,并通过众包(crowdsourcing)方式不断获得更新(这些数据确实是用户提供的,即便他们并不知情)。
Firefox插件Geolocater有个非常有用的扩展功能,尤其是在帮助开发应用程序方面。在调用GeolocationAP丨时,用户能自定义Firefox所返回的位置信息。用户可以在不使用Google在线服务的情况下.通过一个下拉菜单来选择位置。你可以通过以下链接下载此插件:,https://addons.mozilla.org/en-US/firefox/addon/OpenStreetMap上显示当前位置在下面的案例中,当前位置被标记在OpenStreetMap的地图上。你可以看见不同的层及OpenStreetMap导航条。图展示了OpenStreetMap的Mapnik层-位于浏览器中央的位置标记。
在节中已经提到过,我们使用OpenLayers库来显示OpenStreetMap项目的数据。在两个必要的JavaScript文件加载完成后,示例中的地图被初始化,并加人所需的控制元素:
//Initializemapandaddnavigation
varmap=newOpenLayers.Map(wmap");
map.addControl(newOpenLayers.Control.NavigationQJ;map.addControl(newOpenLayers.Control.PanZoomBar());除了带4个箭头的导航元素外,我们在地图变量(map)中加人缩放条。之后,我们为各种层创建selection元素(Control.LayerSwitcher),并将这些层添加到地图中。要新创建的地图对象数组位于函数map.addLayers()中:
//Layerselectionwithfourmaptypes
map.addControl^newOpenLayers.Control.LayerSwitcher());map.addLayers([newOpenLayers.LayerOSM.Mapnik("Mapnik"),newOpenLayers.Layer.OSM.Osmarender("Osmarender"),newOpenLayersLayerOSMCycleMap("CycleMap")D;为地图中的标记创建一个层:
varmarkers=newOpenLayers.Layer.Markers("Markers");map.addLayer(markers);成功定位后的回调函数如下:
function(pos){
var11=newOpenLayers.LonLat(pos.coords.longitude,pos.coords.latitude).transform(newOpenLayers.Projection(MEPSG:46"),map.getProjectionObject()^
map.setCenter(11,zoom);markers.addMarker(newOpenLayers.Marker(11,newOpenLayers.Icon(
'http://www.openstreetmap.org/openlayers/img/marker.png')如节中谈到的那样,地理坐标系中的坐标(lat/lon)必须转化成球形墨卡托投影坐标系。最后,标记11被置于判定出的当前地理位置,相应的图标直接从OpenStreetMap加载。地理定位规范中还有一个特别适合用来移动对象的函数:navigator.geolocation.watchPosition()。下面的例子将演示如何使用GoogleMapsAPI来图形化地展示地理位置的改变。
本文由乐华网络编辑,转载请注明出处
宁波网站制作www.leseo.net