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文件没有在以前的编码中进行编码,GeoRSS驱动程序将不会对其进行解析。您可以使用 iconv公司 例如实用程序,并相应地更改 编码 XML头中的参数值。

编写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')

也见