首页 理论教育 地理编码函数使用实例

地理编码函数使用实例

时间:2023-08-29 理论教育 版权反馈
【摘要】:地理编码API主要由PL/SQL程序包SDO_GCDR中的一些相关函数构成。如果地理编码表所在的模式与调用函数所在的模式相同,也可以使用SQL内置的USER。该地理编码函数总是尽量返回一个地理位置信息。REVERSE_GEOCODE是最常用的反地理编码函数,下列代码展示了如何使用该函数:

地理编码函数使用实例

地理编码API主要由PL/SQL程序包SDO_GCDR中的一些相关函数构成。该包的定义如下:

这些函数的输入参数都是一个地址,其返回值地理坐标信息。它们之间的不同在于返回信息的量和输入地址的格式。下面对这些函数进行一一说明。

1.GEOCODE_AS_GEOMETRY

该函数将输入的地址转换成一个SDO_GEOMETRY对象返回。

username是包含特定国家地理编码表的Oracle模式(Schema)名称(一般与用户名相同)。这是一个必须输入的参数。如果地理编码表所在的模式与调用函数所在的模式相同,也可以使用SQL内置的USER。如果地理编码表所在的模式与调用函数所在的模式不同,则需要具有对地理编码表的查询权限。

addr_lines是一个SDO_KEYWORDARRAY类型的输入参数,是一个简单的字符串数组,用来向地理编码函数传递地址。每行的地址必须根据GC_PARSER_PROFILEAFS的结构,按照合适的顺序和格式书写。一般而言,街道放一行,城市放一行,州或省和邮编放一行。这里需要注意的是,街道与门牌号一般只能单独成行,城市、州或省、邮编可以放在一行,也可以分别单独成行。例如,下面三种格式都是有效的。

这里“1250Clay Street”是街道和名牌号码,“San Francisco”是城市,“CA”是一个国家的州或省名,“94108”是邮编。

country是一个国家的ISO编码。例如,美国为US,中国为CN。

该地理编码函数总是尽量返回一个地理位置信息。如果门牌号码不存在,则会返回街道上的某个门牌号对应的几何体。如果街道不存在,则会返回邮政区域的中心或城市中心。下面的例子演示了如何在程序中使用该函数:

返回的结果为:

MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(-122.413561836735,37.793287755102,null),null,null)

也可以采用下列代码调用该函数:

2.GEOCODE

GEOCODE是一个主要的地理编码函数。与GEOCODE_AS_GEOMETRY不同之处在于这个函数返回的是一个完全格式化的地址和编码,根据返回的值可以准确地知道地址的匹配度。(www.xing528.com)

username是包含特定国家地理编码表的Oracle模式名称(一般与用户名相同)。这是一个必须输入的参数。如果地理编码表所在的模式与调用函数所在的模式相同,也可以使用SQL内置的USER。如果地理编码表所在的模式与调用函数所在的模式不同,则需要具有对地理编码表的查询权限。

addr_lines是一个与GEOCODE_AS_GEOMETRY函数的addr_lines输入参数含义相同的SDO_KEYWORDARRAY类型的输入参数。

country是一个国家的ISO编码。例如,美国为US,中国为CN。

match_mode主要用于决定输入地址与地理编码目录中数据的匹配程度,如果没有指定这个参数,则将采取默认模式。如表4-1所示。

表4-1 匹配模式参数表

续表4-1

函数执行后返回一个SDO_GEO_ADDR类型的对象,包含了地理编码操作的详细结果。SDO_GEO_ADDR在MDSYS方案中的定义如下:

从上面可以看出,这个结构体含有非常全面的地理编码信息。其中几个主要信息条目包括经纬度坐标、定居点、城市名称、地区名称、邮政编码、街道名称、名牌号等。GEOCODE函数很强大,但是也有局限性——它仅返回一个匹配结果。当输入的地址有多个匹配结果的时候,则只会返回它们中的第一个。而后面要介绍的GEOCODE_ALL则能返回所有的匹配结果。

3.GEOCODE_ALL

有些地址比较模糊,则可能会导致多个匹配结果。GEOCODE_ALL函数与GEOCODE函数类似。它们接受的参数完全相同,只不过GEOCODE_ALL返回的是一个数组对象。

4.其他常见函数

除了上面几个函数外,地理编码还有一些其他的函数,如用于结构化的地理编码的函数GEOCODE_ADDR、GEOCODE_ADDR_ALL;还有用于反地理编码的一些函数,如REVERSE_GEOCODE等。REVERSE_GEOCODE是最常用的反地理编码函数,下列代码展示了如何使用该函数:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈