web获取gps
支持GPS的Web应用程序
根据您的地理位置提供服务的网站在Internet上非常流行。 Foursquare,Yelp和Google Maps等网站都利用您要在的位置为您提供与您相关的信息。 您可以轻松获取某人的位置,并根据该语言环境向他们提供信息。
在本文中,您将构建使用GPS位置向用户提供新闻内容的应用程序的后端和前端。 后端用PHP编写,并使用MySQL来保存文章列表及其相关位置及其坐标。 前端网页使用Webkit浏览器支持的定位服务来获取用户的GPS坐标。 然后,它将这些坐标在Ajax请求中发送到后端。 PHP后端系统以文章的XML列表作为响应,然后由前端动态呈现。
您可以通过两种不同的方式使用位置。 第一种是将新文章添加到数据库时。 您给PHP后端指定一个位置(例如,加利福尼亚州弗里蒙特或华盛顿特区),并且该页面使用Yahoo!提供的地理位置服务。 将该位置转换为GPS坐标。 使用位置的第二种方法是当网页向浏览器发出请求以获取用户位置,然后使用该信息通过Ajax查询数据库。
建立后端
后端代码从数据库开始,在这种情况下为MySQL。 清单1显示了单表数据库的模式。
清单1. db.sql
DROP TABLE IF EXISTS articles;
CREATE TABLE articles(
lon FLOAT,
lat FLOAT,
address TEXT,
title TEXT,
url TEXT,
summary TEXT );
该表有六列,从纬度和经度值以及为文章提供的原始地址(例如,加利福尼亚州弗里蒙特)开始。 然后,有关于该文章的一些传记信息,包括标题,URL和摘要。
要构建数据库,请首先使用mysqladmin创建数据库,然后使用mysql命令运行db.sql脚本:
% mysqladmin --user=root --password=foo create articles
% mysql --user=root --password=foo articles < db.sql
创建数据库后,您可以构建PHP页面,该页面将用于向数据库添加记录。 清单2显示了insert.php页面的代码。 (注意:第5行和第6行中$ url的值应显示为单个字符串。它仅显示为两个较短的字符串,仅用于格式化目的。)
清单2. insert.php
<?php
$dd = new PDO('mysql:host=localhost;dbname=articles', 'root', '');
if ( isset( $_POST['url'] ) ) {
// You need a Yahoo! PlaceFinder application key
// Go to: http://developer.yahoo.com/geo/placefinder/
$url = "http://where.yahooapis.com/geocode?q=".urlencode($_POST['address']).
"&appid=[yourappid] ";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$body = curl_exec($ch);
preg_match( "/\<latitude\>(.*?)\<\/latitude\>/", $body, $lat );
preg_match( "/\<longitude\>(.*?)\<\/longitude\>/", $body, $lon );
$sql = 'INSERT INTO articles VALUES ( ?, ?, ?, ?, ?, ? )';
$sth = $dd->prepare($sql);
$sth->execute( array(
$lon[1],
$lat[1],
$_POST['address'],
$_POST['title'],
$_POST['url'],
$_POST['summary']
) );
}
?>
<html>
<body>
<form method="post">
<table>
<tr><th>Title</td><th><input type="text" name="title" /></td></tr>
<tr><th>Summary</th><td><input type="text" name="summary" /></td></tr>
<tr><th>Address</th><td><input type="text" name="address" /></td></tr>
<tr><th>URL</th><td><input type="text" name="url" /></td></tr>
</table>
<input type=