GeoRSS:RSS提要的地理编码对象
司机简称
地理信息系统
生成依赖项
(读取支持需要libexpat)
GeoRSS是一种在RSS或Atom提要中编码位置的方法。
OGR支持GeoRSS的读写。只有当GDAL与 expat 类库支持
驱动程序支持RSS 2.0或Atom 1.0格式的RSS文档。
它还支持 3 ways of encoding location :GeoRSS simple、GeoRSS GML和W3C Geo(后者已弃用)。
驱动程序也可以在没有位置信息的情况下读写文档。
GeoRSS文档的默认基准是WGS84基准(EPSG:4326)。尽管GeoRSS位置在XML文件中是以经纬度顺序编码的,但是驱动程序报告或预期的所有坐标都是以经纬度顺序编码的。OGR使用的经度/纬度顺序是为了与大多数其他OGR驱动程序和实用程序兼容。对于用GML编码的位置,驱动程序将支持srsName属性来描述其他SRS。
简单和GML编码支持 box 作为一个几何体。在OGR简单特征模型中将其解码为矩形(多边形几何体)。
读取RSS文档时返回单个层。从<item>(RSS文档)或<entry>(Atom文档)元素的内容检索功能。
驱动程序功能
Supports Create()
This driver supports the GDALDriver::Create()
operation
Supports Georeferencing
This driver supports georeferencing
Supports VirtualIO
This driver supports virtual I/O operations (/vsimem/, etc.)
编码问题
Expat库支持读取以下内置编码:
US-ASCII码
UTF-8
UTF-16型
ISO-859-1
Windows-1252
OGR返回的内容将在从文件头中提到的编码转换为后用UTF-8编码。
编写GeoRSS文件时,驱动程序希望传入UTF-8内容。
字段定义
在读取GeoRSS文档时,驱动程序将首先对文档进行全面扫描,以获取字段定义。
驱动程序将返回RSS频道或Atom提要的基本模式中的元素。它还将返回名称空间中允许的扩展元素。
第一级元素的属性将作为字段公开。
复杂内容(第一级元素中的元素)将作为XML blob返回。
当同一个元素重复时,将在重复的属性名末尾追加一个数字。例如,这对于RSS和Atom文档中的<category>元素很有用。
以下内容:
<item>
<title>My tile</title>
<link>http://www.mylink.org</link>
<description>Cool description !</description>
<pubDate>Wed, 11 Jul 2007 15:39:21 GMT</pubDate>
<guid>http://www.mylink.org/2007/07/11</guid>
<category>Computer Science</category>
<category>Open Source Software</category>
<georss:point>49 2</georss:point>
<myns:name type="my_type">My Name</myns:name>
<myns:complexcontent>
<myns:subelement>Subelement</myns:subelement>
</myns:complexcontent>
</item>
将在OGR SF模型中解释为:
title (String) = My title
link (String) = http://www.mylink.org
description (String) = Cool description !
pubDate (DateTime) = 2007/07/11 15:39:21+00
guid (String) = http://www.mylink.org/2007/07/11
category (String) = Computer Science
category2 (String) = Open Source Software
myns_name (String) = My Name
myns_name_type (String) = my_type
myns_complexcontent (String) = <myns:subelement>Subelement</myns:subelement>
POINT (2 49)
创建问题
导出时,所有图层都将写入单个文件。不支持更新现有文件。
如果输出文件已经存在,则不会进行写入。必须先删除现有文件。
如果不关闭并重新打开文件,则无法立即读取创建的图层。也就是说,数据集在同一会话中是只读的或只写的。
支持的几何图形:
wkbPoint/wkbPoint25D类型的特征。
wkbLineString/wkbLineString25D类型的特征。
wkbPolygon/wkbPolygon25D型的特征。
不支持其他类型的几何图形,将被忽略。
数据集创建选项
FORMAT =RSS | ATOM:文档必须是RSS 2.0格式还是ATOM 1.0格式。默认值:RSS
GEOM_DIALECT =简单 |GML| W3CGeo(RSS或ATOM文档):位置信息的编码。默认值:SIMPLE W3C_GEO仅支持点几何图形。SIMPLE或W3C_GEO仅支持地理WGS84坐标中的几何图形。
USE_EXTENSIONS =YES | NO.默认值:NO.如果定义为YES,则写入扩展字段(即不在RSS或Atom文档的基本架构中的字段)。如果在基本模式中找不到与foo_bar模式匹配的字段名,foo将被视为元素的命名空间,并将写入<foo:bar>元素。否则,元素将写入<ogr:>命名空间。
WRITE_HEADER_AND_FOOTER =是|否。默认值:是。如果定义为NO,则只会写入<entry>或<item>元素。用户必须提供文档的适当页眉和页脚。在这种情况下,下列选项不相关。
HEADER (RSS或Atom文档):XML内容,放在RSS文档的<channel>元素和第一个<item>元素之间,或者放在Atom文档的XML标记和第一个<entry>元素之间。如果指定了它,它将重载以下选项。
TITLE (RSS或Atom文档):放在头中<title>元素中的值。如果未提供,则将使用虚拟值,因为该元素是必需的。
DESCRIPTION (RSS文档):放在头中<description>元素中的值。如果未提供,则将使用虚拟值,因为该元素是必需的。
LINK (RSS文档):放在头中<link>元素中的值。如果未提供,则将使用虚拟值,因为该元素是必需的。
UPDATED (Atom文档):放在头中<updated>元素中的值。应格式化为XML日期时间。如果未提供,则将使用虚拟值,因为该元素是必需的。
AUTHOR_NAME (Atom文档):放在头中<author><name>元素中的值。如果未提供,则将使用虚拟值,因为该元素是必需的。
ID (Atom文档):放在头中<id>元素中的值。如果未提供,则将使用虚拟值,因为该元素是必需的。
从源数据集转换时,可能需要将源数据集中的字段名重命名为预期的RSS或ATOM属性名,如<title>、<description>等。。。这可以用 OGR VRT 数据集,或使用ogr2ogr实用程序的“-sql”选项(请参见 RFC 21:OGR SQL类型转换和字段名别名 )
VSI虚拟文件系统API支持
驱动程序支持读取和写入由VSI虚拟文件系统API管理的文件,这些文件包括“常规”文件以及/vsizip/(读写)、/vsigzip/(读写)、/vsicurl/(只读)域中的文件。
还支持写入/dev/stdout或/vsistdout/。
例子
ogrinfo实用程序可用于转储GeoRSS数据文件的内容:
ogrinfo -ro -al input.xml
ogr2ogr实用程序可用于执行GeoRSS到GeoRSS的转换。例如,将Atom文档转换为RSS文档
ogr2ogr -f GeoRSS output.xml input.xml "select link_href as link, title, content as description, author_name as author, id as guid from georss"
下面的Python脚本演示如何读取联机GeoRSS提要的内容
#!/usr/bin/python
import gdal
import ogr
import urllib2
url = 'http://earthquake.usgs.gov/eqcenter/catalogs/eqs7day-M5.xml'
content = None
try:
handle = urllib2.urlopen(url)
content = handle.read()
except urllib2.HTTPError, e:
print 'HTTP service for %s is down (HTTP Error: %d)' % (url, e.code)
except:
print 'HTTP service for %s is down.' %(url)
# Create in-memory file from the downloaded content
gdal.FileFromMemBuffer('/vsimem/temp', content)
ds = ogr.Open('/vsimem/temp')
lyr = ds.GetLayer(0)
feat = lyr.GetNextFeature()
while feat is not None:
print feat.GetFieldAsString('title') + ' ' + feat.GetGeometryRef().ExportToWkt()
feat.Destroy()
feat = lyr.GetNextFeature()
ds.Destroy()
# Free memory associated with the in-memory file
gdal.Unlink('/vsimem/temp')