快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰平台app_龟发之家论坛



本文示例源代码或素材下载

创建舆图

当前的信息爆炸已经匆匆使许多新技巧孕育发生了,以赞助消化所有这些上千兆字节的数据。当要尽力接受太多的信息时,多半人们对图形要领表示的数据处置惩罚得很好。地舆数据(在本例中是来自 US Census)能够借助于 Google Maps 代替传统的地舆信息系统(GIS)而被可视化地表示出来。搜索 “google maps” 时,会呈现 6900 万多条搜索记录,为什么还要应用这篇文章呢?这篇文章专注于应用 PHP、Informix、DB2 和 Linux。此外,这里供给的代码很清晰,是由年仅 14 岁的法度榜样员供给的。(请参阅 “参考资料”,得到更多由该作者撰写的文章。)

文章中的示例基于人口普查的数据。搜索屏幕供给了一个表单用以输入邮政编码。结果页面显示了所选择的邮政编码以及相邻邮政编码地区的人口密度,这个相邻邮政编码带有有颜色的 “push pins”。经由过程左键单击、拖动鼠标动作可以移动舆图,经由过程舆图左上角的缩放控件能够改变舆图的比例。

清单 1 显示了进行一些清理和数据清除之后的一些示例。数据库模式显示在 清单 2 中。

清单 1. 示例数据

state     AL

zip      35004

longitude   -86.502492000000

latitude   33.6063790000000

population  6998

housingunits 2815

sqmeters   49387881

state     ME

zip      03901

longitude   -70.845590000000

latitude   43.2901600000000

population  6338

housingunits 2406

sqmeters   96091016

state     WA

zip      98001

longitude   -122.26608100000

latitude   47.3037220000000

population  25771

housingunits 9158

sqmeters   46475168

清单 2. 数据库模式

Column name     Type

state        char(2)

zip         char(5)

longitude      decimal(16)

latitude       decimal(16)

po澳门新葡亰平台apppulation      integer

housingunits     integer

sqmeters       int8

图 1 展示了搜索页,它是用户碰着的第一个页面。

图 1. 首先加载的页面

用户输入一个邮政编码,就会显示出结果,如 图 2 所示。这副舆图上,不合的人口密度具有不合的有色唆使符。右边显示的文本表示舆图上显示的邮政编码。左上角的缩放控件能够改变舆图的比例。信息窗口显示了 02222 邮政编码的具体信息。

图 2.针对邮政编码 02222 的搜索结果页面

架构概述

是以,您若何根据搜索前提从数据库表中获得结果记录,并获得图 1 和图 2 那样的显示屏幕呢?数据源和 Google Map API 结合在一路被称做一个 “mashup”(Wikipedia.org) 或者 Web 利用法度榜样的混杂。图 3 展示了办事器架构。

这里真正有趣的观点便是不合数据源在浏览器上的集成。在客户浏览器上能承载的数据大年夜小的限定对付这种措施的成功至关紧张。一旦客户很想获得大年夜量的数据,收集限定和客户处置惩罚器的速率就会很大年夜地挫伤用户的积极性。

只管并非所有的浏览器都邑支持 JavaScript 和 Google API,然则,绝大年夜多半都邑支持,包括 Mozilla Firefox 和 Internet Explorer 6。此外,一些老的浏览器可能不会支持当前应用的一些 CSS。

Apache、PHP 和 ODBC

中心层办事器供给 Web 页面、运行时情况和数据库造访。Apache 办事器对照着名,根据最新统计数字,有 70% 的 Internet 站点选用 Apache 办事器。Apache 支持插件模块,我们的办事器也应用 mod_php 来供给 PHP 运行时情况。您能够经由过程在敕令行中应用 php 敕令来履澳门新葡亰平台app行 php 脚本的一些简单测试。当 php 代码必要履行并被发送到哀求浏览器时,就有了 Apache 和 mod_php 的用武之地。

数据库造访组件 ODBC 已经遭受到机能上的为难。早期宣布的 ODBC 对照慢。澳门新葡亰平台app现在的实现已经大年夜大年夜改良,供给了较好的机能。应用 ODBC 使系统间的可移植性获得大年夜大年夜前进。有许多库文件能够支持对 DB2 或 Informix 的本地造访,而这是特定于数据库客户机 API 的。

Informix/DB2

从 IBM Web 站点:

DB2 家族:数据库治理系统,能够供给机动并且有资源效益的数据库平台,以构建壮实的随需应变的营业利用法度榜样。

Informix 家族:针对事务集中的情况供给高档利用法度榜样机能。

(我应用 Informix 已经多年了,我可以证实它在数据仓库/决策支持系统方面做得很好。)

文章 “DB2 和 开放源代码:用 DB2、PHP 和 Linux 进行 Web 投票” 从 DB2 引用了大年夜量的示例,以是,这里是来自 Informix 的示例。假如您在用 DB2 完成这个示例时有任何艰苦,请参考由该作者所写的其他文章(参阅 “参考资料”)。

代码

我们的代码包孕 3 个页面:

您大概留意到到了,这段代码连接到一个名为 census 的 ODBC 数据源。该系统是应用 Informix 和 unixODBC 设置设置设备摆设摆设的。有关若何设置系统的一个较好的教程能够在 unixODBC Web 站点上找到(请参阅 “参考资料”)。然则,这个脚本能够很轻易地转换成 DB2。“Connecting PHP applications to IBM DB2 Universal Database”(developerWorks,2001 年 7 月)评论争论了若何设置 DB2 与 PHP 交互。

清单 3 中的代码的输出将会返回一段款式柔美的 XML 源代码,这段代码在 Zip 标记中有 Latitude 和 Longitude 标记,这些标记都在 Results 标记中。它会根据 URL 中的值搜索数据库。假如没有找到任何结果,Results 标记内就不会有 Zip 标记。您还将会在第二段 PHP 脚本中看到更具有实际感化的 Results 标记。

清单 4 是该脚本的示例输出,应用 02222(Boston,MA)作为邮政编码。

清单 4. longitude/latitude 脚本的示例输出

42.367797

-71.062829澳门新葡亰平台app

这段脚本只会被主页面的 JavaScript 调用一次。由于它以 XML 说话返回精确的标题(由 header() 函数输出),这段 XML 代码能够被内置在 Google Maps API 中的 XML 解析器所澳门新葡亰平台app解析。(您将会在后面的 清单 6 中看到这些。)

清单 5. PHP 代码,检索关于用户屏幕中的邮政编码的数据

";

//$newloc=$_GET[location];

//connect to db2/informix database

//connect vars

$dbname="census";

$username="informix";

$password="useyourown";

//odbc_pconnect returns 0 if the connection attempt fails

// otherwise it returns a connection ID used by other ODBC functions

//        echo ( "attempt connect.....n " );

$conn = odbc_pconnect ( $dbname, $username, $password );

if ( $conn == 0 ) {

echo ( "Connection to database failed." );

//If connection failed, show what the error message was:

$sqlerror = odbc_errormsg ( $conn );

die($sqlerror);

}

$sql = "select * from census_data where longitude > '$_POST[left]'

and longitude'$_POST[bottom]'

and latitude ";

while($locData=odbc_fetch_object($locResult))

{

echo "nt";

echo "ntt$locData->zip";

echo "ntt$locData->state";

echo "ntt$locData->latitude";

echo "ntt$locData->longitude";

echo "ntt

$locData->population";

echo "ntt$locData->housingunits";

echo "ntt$locData->sqmeters";

echo "nt";

}

echo "n";

?>

您可能还会对下面的文章感兴趣: