“使用 XSLT、KML 和 Google Maps API 在地图上覆盖数据”系列
2008-11-25 15:22
405 查看
在这个分为两部分的系列文章中,您将为房地产经纪公司开发一个应用程序,将所有的公寓列表显示为 Google Maps 中可点击的
Placemark 对象。在 第 1
部分中,已经创建了应用程序的前半部分,从用户中收集公寓列表信息,使用 Google Geocoder Web
服务将街道地址转换为它的地理坐标(经度/纬度),并将地理坐标和地址信息存储在数据库中。在第 2 部分中,您将使用这些数据生成 KML 覆盖图文档,并在
Google Maps 和 Google Earth 中显示。首先,在 MySQL 中使用存储过程生成 XML 数据,然后利用 XSLT 和一种叫做
Muenchian 分组的技术,将 XML 数据转化为包含覆盖图信息的 KML 文档 —— 一个 Placemark 对象对应一座公寓大楼。每个
Placemark 对象的弹出气球显示那座楼房中的公寓列表。最后,使用 Google Maps API 在 Web 站点嵌套的 Google Map 中显示
KML 覆盖图。
通过 XSLT 获取用于转换的源 XML 数据
前面已经在数据库中存储了所有的地址信息和对应的经度和纬度坐标。首先,可以用 XML 格式表示这些数据,然后使用 XSLT 样式表生成最终的 KML
数据。有多种解决方案可供选择。在本例中,数据库查询只返回单个表的行,您也许要编写一个 PHP 小函数对 XML
标记中的每一列进行打包。对于更复杂的数据,另外一种解决方案是使用 Erik Wetterberg 提出的针对 MySQL 的巧妙存储过程,可以从 Mysql
Forge 下载。它允许直接在 SQL 查询中构造复杂的分级 XML 元素(参阅 参考资料
获得链接)。
使用存储过程从 Mysql 返回 XML
Wetterberg 的解决方案使用 3 种存储过程:
树。
包含四个参数:标记名称、标记值(查询中数据库的列)、标记属性和标记的子元素。标记的属性和子元素都是单个字符串,因此,可以使用
元素字符串,每个字符串包含每列的一个元素。您也可以很轻松地将子元素转换为行的属性。
清单 1. 在 PHP
中使用存储过程以 XML 元素的形式获取 MySQL 结果
SQL 查询使用存储过程为每行返回数据创建一个 XML 列表元素,同时传递 null 作为列以获取值,因为它的值就是它的子元素。通用,也为参数
参数传入一组子元素标记(每个都由进一步调用
作为属性和子元素参数的值。
这样,在结果集中生成每行的 XML 标记,但是没有创建顶层元素。为简化顶层元素的创建过程,
函数接收顶层聚合元素的名称和查询的名称(它可能使用这些存储过程来生成 XML
元素字符串)。然后,在查询结果中,连接这些行中的字符串,以生成包含每行的子元素的聚合 XML 元素。如清单 2 所示。
清单 2. 转换为 XML 的数据库数据
本文转自IBM Developerworks中国
请点击此处查看全文
Placemark 对象。在 第 1
部分中,已经创建了应用程序的前半部分,从用户中收集公寓列表信息,使用 Google Geocoder Web
服务将街道地址转换为它的地理坐标(经度/纬度),并将地理坐标和地址信息存储在数据库中。在第 2 部分中,您将使用这些数据生成 KML 覆盖图文档,并在
Google Maps 和 Google Earth 中显示。首先,在 MySQL 中使用存储过程生成 XML 数据,然后利用 XSLT 和一种叫做
Muenchian 分组的技术,将 XML 数据转化为包含覆盖图信息的 KML 文档 —— 一个 Placemark 对象对应一座公寓大楼。每个
Placemark 对象的弹出气球显示那座楼房中的公寓列表。最后,使用 Google Maps API 在 Web 站点嵌套的 Google Map 中显示
KML 覆盖图。
通过 XSLT 获取用于转换的源 XML 数据
|
数据。有多种解决方案可供选择。在本例中,数据库查询只返回单个表的行,您也许要编写一个 PHP 小函数对 XML
标记中的每一列进行打包。对于更复杂的数据,另外一种解决方案是使用 Erik Wetterberg 提出的针对 MySQL 的巧妙存储过程,可以从 Mysql
Forge 下载。它允许直接在 SQL 查询中构造复杂的分级 XML 元素(参阅 参考资料
获得链接)。
使用存储过程从 Mysql 返回 XML
Wetterberg 的解决方案使用 3 种存储过程:
xml_tag()、
xml_escape()和
xml_attr()。这 3 种存储过程从
select语句的其余列构造一棵 XML
树。
xml_tag()
包含四个参数:标记名称、标记值(查询中数据库的列)、标记属性和标记的子元素。标记的属性和子元素都是单个字符串,因此,可以使用
concat()函数连接它们。清单 1 说明如何使用这些存储过程来生成每行的 XML
元素字符串,每个字符串包含每列的一个元素。您也可以很轻松地将子元素转换为行的属性。
清单 1. 在 PHP
中使用存储过程以 XML 元素的形式获取 MySQL 结果
function fetchListingsAsXml() { $sql = <<<SQL select xml_tag('listing', null, null, concat(xml_tag('id', id, null, null), xml_tag('address', address, null, null), xml_tag('apt_no', apt_no, null, null), xml_tag('city', city, null, null), xml_tag('state', state, null, null), xml_tag('zipcode', zipcode, null, null), xml_tag('longitude', longitude, null, null), xml_tag('latitude', latitude, null, null), xml_tag('apt_type', apt_type, null, null), xml_tag('rent', rent, null, null), xml_tag('notes', xml_escape(notes), null, null))) as xml from listing; SQL; return fetchMysqlXml('listings', $sql); } function fetchMysqlXml($tag, $sql) { if (! $result = mysql_query($sql)) { die (mysql_error()); } $xml = ''; while ($row = mysql_fetch_array($result)) { $xml .= $row[0]; } return "<$tag>$xml</$tag>"; } |
attributes传递 null 值。最后,
subelements
参数传入一组子元素标记(每个都由进一步调用
xml_tag()来生成),其中以一个选定的列作为标记的值,以 null
作为属性和子元素参数的值。
这样,在结果集中生成每行的 XML 标记,但是没有创建顶层元素。为简化顶层元素的创建过程,
fetchMysqlXml()
函数接收顶层聚合元素的名称和查询的名称(它可能使用这些存储过程来生成 XML
元素字符串)。然后,在查询结果中,连接这些行中的字符串,以生成包含每行的子元素的聚合 XML 元素。如清单 2 所示。
清单 2. 转换为 XML 的数据库数据
本文转自IBM Developerworks中国
请点击此处查看全文
相关文章推荐
- 使用 XSLT、KML 和 Google Maps API 在地图上覆盖数据,第 1 部分:利用 Google Geocoder Web 服务
- OpenLayers系列(3)——使用第三方地图API(GoogleMap),聚合多个地图数据
- SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据
- Sqoop-1.4.6 mysql数据导出到HDFS提示;注: java使用或覆盖了已过时的 API。关详细信息, 请使用 -Xlint:deprecation 重新编译。
- SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据
- 使用Google Maps API 在地图上添加线和删除线
- 使用Google Maps API 在地图上添加线和删除线
- SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据
- SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据
- SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据
- 使用Google Maps API 在地图上添加线和删除线
- Vue.js学习系列(四十三)-- 使用props传递数据
- [置顶] Oracle GoldenGate 系列:使用 Oracle ASM API DBLOGREADER 时遇 ora-01031 错误
- 使用Yahoo API获取雅虎的证券股票数据接口(时价 K线等)
- SQL2008如何使用空间工具(Spatial Tools)导入ESRI格式地图数据的示例
- 微软BI 之SSIS 系列 - 使用 Script Component Destination 和 ADO.NET 解析不规则文件并插入数据
- 高德地图的API使用教程
- Drive More Search Traffic to Your Maps API Site by Including KML Files in a Sitemap——Google 地图 API 文档之五
- nw.js node-webkit系列(7)Native UI API Menu的使用
- 使用google map v3 api 开发地图服务