MS RFC 75:Inspire View服务支持¶
- 日期
2011/07/01
- 作者
斯特凡·利奥波德(stefan.leopold at reflex.at)
- 作者
stephan meisl(在eox.at时stephan.meisl)
- 最后编辑
2012年3月9日
- 状态
2012/03/08通过
- 版本
MapServer 6.2
1。概述¶
为了实现Inspire View服务合规性,需要在MapServer中实现一些增强功能,以支持规范
激活激励支持(两种情况)
对某些功能字段的多语言支持
提供inspire特定元数据
命名组层
根层和可能存在的组层的样式部分
这个RFC聚合并扩展了已经提供的关于Inspire View服务支持的想法/解决方案。
2。激励支持的激活¶
inspire特定的元数据可以在外部inspire服务元数据文档(场景1)中引用,也可以直接嵌入到功能文档(场景2)中。MapServer需要支持这两种方案。
正如票据3608_uu中所建议的那样,通过“WMS_Inspire_Capabilities”在mapfile的web.metadata部分激活相应的inspire支持场景。如果激活,相应的inspire名称空间以及相应的验证警告将在功能文档中生成。
场景1-使用对外部服务元数据的引用激活Inspire支持:
WEB
METADATA
"wms_inspire_capabilities" "url"
...
END
END
场景2-使用嵌入式服务元数据激活Inspire支持:
WEB
METADATA
"wms_inspire_capabilities" "embed"
...
END
END
三。对某些功能字段的多语言支持¶
Inspire需要多语言支持,并请求功能文档中所有支持语言以及默认语言的列表。根据getCapabilities请求中的语言参数,特定的元数据值,即
"wms_title"
"wms_abstract"
"wms_rootlayer_title"
"wms_rootlayer_abstract"
"wms_group_title"
"wms_group_abstract"
"wms_style_title"
"wms_style_<name>_title"
- 以及与语言相关的参考数据,如
数据“公路”
连接“DB-GER”
需要以要求的语言提供。如果不支持该语言(或不存在语言参数),则必须使用默认语言。
如票据3608_uuu中建议的那样,所有支持的语言通过mapfile的web.metadata部分的“wms_languages”指定为逗号分隔列表(默认为第一语言)。此语言参数还添加到getCapabilities输出中的onlineresource。::
WEB
METADATA
...
"wms_languages" "eng,ger" #first default, values according ISO 639-2/B
...
END
END
为了解决第二个问题,评估了不同的实施方案。
对于特定于语言的元数据值,将应用键扩展方法。::
WEB
METADATA
...
"wms_title.eng" "myservicetitle"
"wms_title.ger" "myservicetitleger"
"wms_abstract" "mylayerabstract" #fallback
"wms_abstract.ger" "mylayerabstractger"
...
END
END
对于依赖于语言的引用数据,采用了类似的方法,如mapserver的runtime-substitution_uu功能(仅替换具有%language%的数据和连接值)。::
...
LAYER
NAME TN.RoadTransportNetwork.RoadLink
DATA "road_%language%"
...
END
...
如果不支持该语言(或不存在语言参数),则将替换默认语言。
4。提供inspire特定元数据¶
根据场景的不同,需要额外的元数据信息来支持规范。Inspire相关字段如下:
场景1-使用引用的外部服务元数据激发相关字段:
WEB
METADATA
"wms_inspire_capabilities" "url"
"wms_languages" "eng,ger" #first default, values according ISO 639-2/B
"wms_inspire_metadataurl_href" "http://INSPIRE.service/metadata"
"wms_inspire_metadataurl_format" "application/vnd.ogc.csw.capabilities.response_xml"
"wms_keywordlist_ISO_items" "infoMapAccessService" #value according "classification of spatial data services"
"wms_keywordlist_vocabulary" "ISO"
"wms_title" "myservicetitle"
"wms_abstract" "myabstract"
"wms_fees" "conditions unknown" #value either "no conditions apply"|default "conditions unknown"|<specific conditions>
"wms_accessconstraints" "None" #value according ISO 19115 (MD_RestrictionCode codelist) or default "None"
"wms_contactorganization" "MapServer" #responsible organization
"wms_contactposition" "owner" #responsible organization, value according "INSPIRE Metadata Regulation" (part D6)
...
END
END
场景2-使用嵌入式服务元数据激发相关字段:
WEB
METADATA
"wms_inspire_capabilities" "embed"
"wms_languages" "eng,ger" #first default, values according ISO 639-2/B
"wms_inspire_temporal_reference" "2011-09-19" #date of last revision, value according YYYY-MM-DD
"wms_inspire_mpoc_name" "mympocname" #point of contact
"wms_inspire_mpoc_email" "mympoc@e.mail" #point of contact
"wms_inspire_metadatadate" "2011-09-19" #value according YYYY-MM-DD
"wms_inspire_resourcelocator" "http://myinspireresource" #URL for ResourceLocator
"wms_inspire_keyword" "infoMapAccessService" #value according "classification of spatial data services"
"wms_keywordlist_ISO_items" "infoMapAccessService"
"wms_keywordlist_vocabulary" "ISO"
"wms_title" "myservicetitle"
"wms_abstract" "myabstract"
"wms_fees" "conditions unknown" #value either "no conditions apply"|default "conditions unknown"|<specific conditions>
"wms_accessconstraints" "None" #value according ISO 19115 (MD_RestrictionCode codelist) or default "None"
"wms_contactorganization" "MapServer" #responsible organization
"wms_contactposition" "owner" #responsible organization, value according "INSPIRE Metadata Regulation" (part D6)
...
END
END
笔记:
几个字段需要某些值,这些值不是由MapServer本身验证的,而是针对 INSPIRE schemas 或 WMS INSPIRE tester 推荐
如本文档中关于场景2的建议,<inspire-common:resourcetype>始终设置为service,<inspire-common:spacedataservicetype>始终设置为view,这两个值不能通过mapfile进行更改
一致性总是设置为不评估,基于最新的 INSPIRE Metadata Implementing Rules (第7页)、规范文件、规范日期和规范URI或URL需要为符合/不符合度提供,目前尚未实现
5。命名组层¶
激励指定组层的使用。因此 wms_layer_group
扩展以支持命名的组层。如果与中使用的层同名 wms_layer_group
如果没有像以前一样找到具有此名称的层作为未命名组,则它将被视为命名组。
要提供此功能,变量 isUsedInNestedGroup
在“mswmspreparenestedgroups()”和“mswmssprintnestedgroups()”方法中引入,这些方法用于准备WMS响应的各种方法,例如“mswmsgetcapabilities()”。
只要这种能力,任何层次的层次都可以实现。例如,请参见MSAutoTest中的“wms_inspire.map” Mapfile 。
TN
+--- TN.CommonTransportElements
+--- TN.CommonTransportElements.TransportArea
+--- TN.CommonTransportElements.TransportLink
+--- TN.CommonTransportElements.TransportNode
+--- TN.RoadTransportNetwork
+--- TN.RoadTransportNetwork
+--- TN.RoadTransportNetwork.VehicleTrafficArea
+--- TN.RoadTransportNetwork.RoadServiceArea
+--- TN.RoadTransportNetwork.RoadArea
+--- TN.RailTransportNetwork
+--- TN.RailTransportNetwork.RailwayLink
+--- TN.RailTransportNetwork.RailwayStationArea
+--- TN.RailTransportNetwork.RailwayYardArea
+--- TN.RailTransportNetwork.RailwayArea
6。根层和可能存在的组层的样式部分¶
对于常规层, concept of GROUP and CLASSGROUP 可用于将图层样式名称设置为相应的值。另外-如票据3850中建议的,层样式标题可以通过WMS样式标题和层样式标题通过WMS样式标题覆盖(需要提供宽度、高度、格式和href)。
...
LAYER
NAME TN.RoadTransportNetwork.RoadLink
DATA "road"
METADATA
"wms_title.eng" "Transport networks: Road Link"
"wms_title.ger" "Verkehrsnetze: Strassensegment"
...
"wms_style_inspire_common:DEFAULT_title" "mylayerstyletitle" #style title
"wms_style_inspire_common:DEFAULT_legendurl_width" "85" #override style legendurl (mandatory: width, height, format, href)
"wms_style_inspire_common:DEFAULT_legendurl_height" "40"
"wms_style_inspire_common:DEFAULT_legendurl_format" "image/png"
"wms_style_inspire_common:DEFAULT_legendurl_href" "http://path/to/onlineresource...roadlink"
END
...
END
...
CLASSGROUP "inspire_common:DEFAULT"
CLASSITEM "NAME_E"
CLASS
NAME "myclass1"
GROUP "inspire_common:DEFAULT"
EXPRESSION "Trans-Canada Highway"
COLOR 255 0 0
END
CLASS
NAME "myclass2"
GROUP "inspire_common:DEFAULT"
COLOR 0 255 0
END
...
建议使用以下方法来支持根层中的(可自定义)样式部分
在web.metadata节中使用wms-style-name将样式节添加到根层
使用wms-style-title覆盖样式标题(可选)
使用wms样式的legendrl*覆盖legendrl的宽度、高度、格式和Href(可选)
以及可能存在的群层
在第一个对应层中使用wms-group-style-name.metadata节将样式节添加到组层
使用wms-group-style-title覆盖样式标题(可选)
使用wms_group_-style_-legendrl_ux*覆盖legendrl的宽度、高度、格式和Href(可选)
...
WEB
METADATA
...
"wms_style_name" "inspire_common:DEFAULT" #style name
"wms_style_title" "myroadarealayerstyletitle" #style title
"wms_style_legendurl_width" "85" #override style legendurl (mandatory: width, height, format, href)
"wms_style_legendurl_height" "40"
"wms_style_legendurl_format" "image/png"
"wms_style_legendurl_href" "http://path/to/onlineresource...roadarea"
END
END
LAYER
NAME TN.RailTransportNetwork.RailwayLink
GROUP TN.CommonTransportElements.TransportLink
DATA "road"
METADATA
"wms_group_title.eng" "Transport networks: Generic Transport Link"
"wms_group_title.ger" "Verkehrsnetze: Generisches Verkehrssegment"
"wms_group_abstract" "mygenerictransportlinklayerabstract" #fallback
"wms_group_abstract.ger" "mygenerictransportlinklayerabstract"
"wms_group_style_name" "inspire_common:DEFAULT" #style name
"wms_group_style_title" "mygenerictransportlinklayerstyletitle" #style title
"wms_group_style_legendurl_width" "85" #override style legendurl (mandatory: width, height, format, href)
"wms_group_style_legendurl_height" "40"
"wms_group_style_legendurl_format" "image/png"
"wms_group_style_legendurl_href" "http://path/to/onlineresource...generictransportlink"
"wms_title.eng" "Transport networks: Railway Link"
"wms_title.ger" "Verkehrsnetze: Eisenbahnverbindung"
"wms_abstract" "myrailwaylinklayerabstract" #fallback
"wms_abstract.ger" "myrailwaylinklayerabstractger"
...
END
...
END
...
如果这种能力,可以实现3个层次,如MSAutoTest中的示例mapfiles“wms-inpire-scneario1.map”和“wms-inpire-scneario2.map”所示。
TN.RoadTransportNetwork.RoadArea
+--- TN.RoadTransportNetwork.RoadLink
+--- TN.CommonTransportElements.TransportLink
+--- TN.RailTransportNetwork.RailwayLink
+--- TN.AirTransportNetwork.AirLink
7。实施细节¶
为了实现这些增强,需要在MapServer代码库中实现以下更改:
从请求中获取语言并验证它
检测是否激活了Inspire支持,如果激活,则添加相应的命名空间
使用语言列表输出扩展的功能并激发特定的元数据(取决于场景1或场景2)
在输出中将语言参数添加到OnlineResource
在从MapObject派生元数据时,考虑基于语言的键扩展(例如“wms-title.eng”),使用不带扩展名的回退(例如“wms-title”)。
根据“wms_layer_group”对层进行分组
如果在mapfile中指定,则覆盖样式标题和legendrls(例如“wms-style”<stylename>“title”)。
为缺少但必需的inspire特定元数据添加警告
包括来自各种请求类型中任何嵌套层的信息
7.1受影响的文件¶
以下文件受此RFC影响:
mapows.c/mapows.h
[N] MS_DLL_EXPORT const char *msOWSLookupMetadataWithLanguage(.., const char *validated_language)
[N] MS_DLL_EXPORT char *msOWSGetOnlineResource2(.., const char *validated_language)
[N] MS_DLL_EXPORT char **msOWSGetInspireLanguageList(..)
[N] MS_DLL_EXPORT char *msOWSGetInspireLanguage(.., const char *requested_language)
[N] MS_DLL_EXPORT int msOWSPrintInspireCommonExtendedCapabilities(..)
[N] int msOWSPrintInspireCommonMetadata(..)
[N] int msOWSPrintInspireCommonLanguages(..)
[C] int msOWSPrintEncodeMetadata(..)
[N] int msOWSPrintEncodeMetadata2(.., const char *validated_language)
[C] int msOWSPrintGroupMetadata(..)
[N] int msOWSPrintGroupMetadata2(.., const char *validated_language)
[C] int msOWSPrintMetadataList(..)
[C] int msOWSPrintEncodeMetadataList(..)
mapwms.c
[S] int msDumpLayer(.., const char *validated_language, int grouplayer)
[S] void msWMSPrepareNestedGroups(.., int* isUsedInNestedGroup)
[S] void msWMSPrintNestedGroups(.., int* isUsedInNestedGroup, const char *validated_language)
[S] int msWMSGetCapabilities(.., const char *requested_language)
[C] int msWMSLoadGetMapParams(..)
[C] int msWMSFeatureInfo(..)
[C] int msWMSDescribeLayer(..)
[C] int msWMSGetLegendGraphic(..)
[C] int msWMSGetStyles(..)
[C] int msWMSDispatch(..)
[N] void msWMSPrintAuthorityURL(..)
[N] void msWMSPrintIdentifier(..)
[N] void msWMSPrintKeywordlist(..)
mapdraw.c
[C] int msLayerIsVisible(..)
maputil.c
[C] int msExtentsOverlap(..)
[C]功能已更改
[n]新功能
[s]函数的签名也已更改
7.2MapScript问题¶
这些更改提供了新的功能,没有考虑到mapscript问题。
7.3向后兼容性问题¶
此更改提供了新的功能,没有考虑向后兼容性问题。
8。解决方案¶
此RFC的代码可以在Inspire_Soc2011_USandbox中找到。
- 合并票据:
门票3608:激励相关支持
票据3850_uu:允许为样式定义标题,并可以覆盖自动生成的legendrl href
票据1632_uu:支持使用
wms_layer_group
票据4129_uux:根层元数据
票据4148_u:wms getfeatureinfo的内容类型错误
票据4149_uux:错误的默认WMS legendrl图像格式
票据4151_uu:在功能文档中为关键字添加词汇属性
票据4144:GetLegendgraphic应在不编译OGR的情况下工作
Ticket 4126_uuu:版权(注释)层仅在数据范围内
9。测验¶
- 为测试目的创建了3个 Mapfile 示例:
wms_Inspire.map_uInspire场景1使用
wms_layer_group
这些 Mapfile 的getCapabilities响应根据 INSPIRE schemas 以及 WMS INSPIRE tester 没有任何严重警告或错误。
10。投票历史¶
2012/03/08通过,法兰克、史蒂文和丹尼尔姆的+1和史蒂文的+0。