精华内容
下载资源
问答
  • WMS、WFS、WMTS服务接口说明

    千次阅读 2020-09-23 11:42:46
    DR3 内容3.1 WMSWMS服务简介服务操作列表服务操作的参数列表GetCapabilities操作请求方法实现参数GetMap操作请求方法实现参数GetFeatureInfo操作...接口调用示例3.3 WFSWFS服务简介服务操作列表服务操作的参数列表GetCa

    1 需求

    最近在作一个地方标准时涉及到一些OGC的服务调用和具体传参问题,以此作为记录方便查阅。

    2 TL;DR

    可以直接查看福州天地图的文档
    WMS: http://tdt.fuzhou.gov.cn/help/APIPfs/2.htm
    WMTS: http://tdt.fuzhou.gov.cn/help/APIPfs/3.htm
    WFS: http://tdt.fuzhou.gov.cn/help/APIPfs/4.htm

    3 内容

    3.1 WMS

    WMS服务简介

    Web Map Service(网络地图服务),简称WMS,由开放地理信息联盟(Open GeoSpatial Consortium,OGC)制定。该规范定义了Web客户端从网络地图服务器获取地图的接口标准。一个WMS可以动态地生成具有地理参考数据的地图,这些地图通常用GIF、JPEG或PNG等图像格式,或者SVG、KML、VML和WebCGM等矢量图形格式来表现。使用者通过指定的参数获取相应的地图图片。

    服务操作列表

    WMS实现规范由三个基础性操作协议(GetCapabilities,GetMap和GetFeatureInfo)组成,这些协议共同构成了利用WMS创建和叠加显示不同来源的远程异构地图服务的基础。WMS服务操作列表见下表所示。

    操作实现要求描述
    GetCapabilities强制实现获取WMS的能力文档(即元数据文档),里面包含服务的所有信息
    GetMap强制实现获取地图图片。该操作根据客户端发出的请求参数在服务端进行检索,服务器端返回一个地图图像,其地理空间参数和大小参数是已经明确定义的,返回的地图图像可以是GIF、JPEG、PNG或SVG格式。
    GetFeatureInfo选择实现该操作根据用户所请求的X、Y坐标或感兴趣的图层,返回地图上某些特殊要素的信息,信息以HTML,GML或ASCII的格式表示。
    服务操作的参数列表

    GetCapabilities操作请求方法实现参数

    参数名称参数个数参数类型和值
    service1个(必选)字符类型,服务类型值为“WMS”
    request1个(必选)字符类型,请求的操作名称,值为“GetCapabilities”
    version0或1个(可选)字符类型,值为请求的WMS的版本号
    format0或1个(可选)MIME类型,值为服务元数据的输出格式
    updateSequence0或1个(可选)字符类型,可取的值有none、any、equal、lower、higher,用来表示缓存数据更新的方式

    GetMap操作请求方法实现参数

    参数名称参数个数参数类型和值
    service1个(必选)字符类型,服务类型标识值为“WMS”
    request1个(必选)字符类型,值为“GetMap”
    version1个(必选)字符类型,值为请求的WMS的版本号
    layers1个(必选)字符类型,值为一个或多个地图图层列表,多个图层之间用”,”隔开
    styles1个(必选)字符类型,值为请求图层的地图渲染样式
    CRS1个(必选)字符类型,值为坐标参照系统
    BBOX1个(必选)Wkt格式,值为某个CRS下的地图边界范围的坐标序列
    width1个(必选)整型类型,值为地图图片的像素宽度
    height1个(必选)整型类型,值为地图图片的像素高度
    format1个(必选)字符类型,值为地图的输出格式
    transparent0或1个(可选)字符类型,值为true或者false,用来表示地图图层是否透明(默认情况下是不透明的)
    bgcolor0或1个(可选)值为十六进制的RGB值,表示地图的背景颜色
    exceptions0或1个(可选)值为WMS的异常信息报告的格式(默认情况下是XML格式)
    time0或1个(可选)时间类型,值为时间值,表示需要在图层中有时间信息
    elevation0或1个(可选)数字类型,值为高程值,表示需要在图层中有高程信息

    GetFeatureInfo操作请求方法实现参数

    参数名称参数个数参数类型和值
    service1个(必选)字符类型,服务类型标识值为“WMS”
    request1个(必选)字符类型,值为“GetFeatureInfo”
    version1个(必选)字符类型,值为请求的WMS的版本号
    map request part1个(必选)字符类型,值为获得地图的部分操作参数
    query_layers1个(必选)字符类型,值为查询的一个或多个地图图层列表,多个图层之间用”,”隔开
    info_format1个(必选)MIME类型,值为请求信息的返回类型
    I1个(必选)整型类型,值为待查询点的在地图图片上的像素列号
    J1个(必选)整型类型,值为待查询点的在地图图片上的像素行号
    feature_count0或1个(可选)整型类型,值为返回信息中的要素的个数(默认是1)
    exceptions0或1个(可选)值为WMS的异常信息报告的格式(默认情况下是XML格式)

    接口调用示例

    操作调用示例
    GetCapabilitieshttp://tdt.fuzhou.gov.cn/serviceaccess/WMS/DMDZ?version=1.1.1&request=GetCapabilities&service=WMS
    GetMaphttp://tdt.fuzhou.gov.cn/serviceaccess/WMS/DMDZ?version=1.1.1&request=GetMap&service=WMS&mapservice=DMDZ&layers=1&styles=default&width=1164&height=371&format=png&transparent=true&srs=EPSG%3A4490&bbox=119.28758165903027,26.090243729688037,119.28914270467693,26.0907412794603

    3.2 WMTS

    WMTS服务简介

    Web Map Tile Service(网络地图瓦片服务),简称WMTS,由开放地理信息联盟(Open GeoSpatial Consortium,OGC)制定,是和WMS并列的重要OGC规范之一。WMTS不同于WMS,它最重要的特征是采用缓存技术能够缓解WebGIS服务器端数据处理的压力,提高交互响应速度,大幅改善在线地图应用客户端的用户体验。WMTS是OGC主推的缓存技术规范,是目前各种缓存技术相互兼容的一种方法。

    服务操作列表

    WMTS服务支持RESTful访问,其接口包括GetCapabilities、GetTile和GetFeatureInfo3个操作,这些操作允许用户访问切片地图。

    操作操作描述
    GetCapabilities强制实现获取WMTS的能力文档(即元数据文档),里面包含服务的所有信息
    GetTile强制实现获取地图瓦片。该操作根据客户端发出的请求参数在服务端进行检索,服务器端返回地图瓦片图像。
    GetFeatureInfo选择实现通过在WMTS图层上指定一定的条件,返回指定的地图瓦片内容对应的要素信息
    服务操作的参数列表

    GetCapabilities操作请求方法实现参数

    参数名称参数个数参数类型和值
    service1个(必选)字符类型,服务类型值为“WMTS”
    request1个(必选)字符类型,请求的操作名称,值为“GetCapabilities”
    acceptVersions0或1个(可选)字符类型,值为请求的WMTS的版本号
    sections0或1个(可选)字符类型,请求元数据文档0或多个节的名称,多个名称之间用“,”隔开,不须按顺序排列。值为空默认返回整个元数据文档
    updateSequence0或1个(可选)字符类型,值为increased,为空时默认返回最新的元数据文档
    acceptFormat0或1个(可选)MIME类型,值为服务元数据的输出格式

    GetTile操作请求方法实现参数

    参数名称参数个数参数类型和值
    service1个(必选)字符类型,服务类型标识值为“WMTS”
    request1个(必选)字符类型,请求的操作值为“GetTile”
    version1个(必选)字符类型,值为请求的WMTS的版本号
    layer1个(必选)字符类型,值为请求的图层名称
    style1个(必选)字符类型,值为请求图层的渲染样式
    format1个(必选)字符类型,值为瓦片地图的输出格式
    tileMatrixSet1个(必选)字符类型,瓦片矩阵数据集,其值在服务的元数据文档中指定
    tileMatrix1个(必选)字符类型,瓦片矩阵,其值在服务的元数据文档中指定
    tileRow1个(必选)整型类型,值为大于0的整数,表示瓦片矩阵的行号
    tileCol1个(必选)整型类型,值为大于0的整数,表示瓦片矩阵的列号
    Other sample dimensions0或1个(可选)字符类型,其他允许的参数

    GetFeatureInfo操作请求方法实现参数

    参数名称参数个数参数类型和值
    service1个(必选)字符类型,服务类型值为“WMTS”
    request1个(必选)字符类型,请求的操作值为“GetFeatureInfo”
    version1个(必选)字符类型,值为请求的WMTS的版本号
    J1个(必选)整型类型,值为大于0的整数,表示瓦片上一指定像素点的行号
    I1个(必选)整型类型,值为大于0的整数,表示瓦片上一指定像素点的列号
    info_format1个(必选)MIME类型,值为请求信息的返回类型
    layer, style, format, Sample dimension, tileMatrixSet, tileMatrix, tileRow, tileCol1个(必选)这些参数的值应与请求GetTile的相应参数保持一致

    接口调用示例

    实例名称调用实例
    GetCapabilities操作http://tdt.fuzhou.gov.cn/serviceaccess/wmts/Vector2012CGCS2000?service=WMTS&request=GetCapabilities
    GetTile操作http://tdt.fuzhou.gov.cn/serviceaccess/wmts/Vector2012CGCS2000?service=WMTS&request=GetTile&layer=0&style=default&tileMatrixSet=sss&tileMatrix=10&tileRow=93074&tileCol=435872&format=image/png

    3.3 WFS

    WFS服务简介

    Web Feature Service(网络要素服务),简称WFS,由开放地理信息联盟(Open GeoSpatial Consortium,OGC)制定。该规范主要对OpenGIS简单要素的数据编辑操作进行规范,从而使服务器端和客户端能够在要素层面进行“通讯”。其返回结果的是XML格式的WFS服务元数据文档,通过该文档用户能够了解:WFS服务器支持的所有操作操作列表,GetFeature操作返回的数据格式,可用的坐标参照系统列表,操作异常信息的列表,WFS服务提供商的相关信息,WFS服务器的可用要素类列表等。

    服务操作列表

    WFS服务接口规范定义了GetCapabilities,DescribeFeatureType、GetFeature、Transaction、GetGmlObject和LockFeature一共6种操作。其中,前三个GetCapabilities,DescribeFeatureType和GetFeature为必须实现的操作,也即只要实现了这三个操作的服务均可称为WFS服务。WFS的操作见下表所示。

    操作实现要求描述
    GetCapabilities强制实现GetCapabilities请求用于查询WFS服务的能力信息,包括支持的操作、支持的格式、空间坐标、包含的资源等。它主要的目的是使客户端在使用GetFeature请求前可以对WFS服务有一个基本的了解,从而可以设置正确的参数。
    DescribeFeatureType强制实现用于生成一个 Schema 描述,该 Schema 描述了 WFS 服务提供的要素类型(Feature Type),以及要素类型的结构信息。该 Schema 还定义了 WFS 服务所期望的要素实例在输入时如何编码以及输出时如何生成要素实例。
    GetFeature强制实现GetFeature用于向WFS的客户端程序提供查询特定地理信息的能力,通过GetFeature操作可以由指定的属性条件、空间条件或者两者叠加的条件进行空间查询。
    Transaction选择实现允许Transaction操作,使客户端可对服务器端所提供的地图要素类执插入,更新,删除等命令
    GetGmlObject选择实现通过XLink获取GML对象
    LockFeature选择实现在事务过程中锁定要素
    服务操作的参数列表

    GetCapabilities操作请求方法实现参数

    参数名称参数个数参数类型和值
    service1个(必选)字符类型,服务类型值为“WFS”
    request1个(必选)字符类型,请求的操作名称,值为“GetCapabilities”
    versions0或1个(可选)字符类型,值为请求的WFS的版本号

    DescribeFeatureType操作请求方法实现参数

    参数名称参数个数参数类型和值
    service1个(必选)字符类型,服务类型值为“WFS”
    request1个(必选)字符类型,请求的操作名称,值为“DescribeFeatureType”
    typeName0或1个(可选)字符类型,值为要素类型的列表,多个值之间用“,”隔开,默认解析包括的全部要素类型
    outputFormat0或1个(可选)MIME类型,值为输出格式

    GetFeature操作请求方法实现参数

    参数名称参数个数参数类型和值
    service1个(必选)字符类型,服务类型标识值为“WFS”
    request1个(必选)字符类型,请求的操作值为“GetFeature”
    typeName1个(必选)字符类型,值为请求的要素类型的名称,多个名称之间用“,”隔开
    version0或1个(可选)字符类型,值为请求的WFS的版本号
    outputFormat0或1个(可选)MIME类型,值为输出格式
    resultType0或1个(可选)字符类型,值为请求的结果类型
    propertyName0或1个(可选)字符类型,值为请求要素的属性名,多个值之间用“,”隔开
    featureVersion0或1个(可选)字符类型,值为要素的版本,值为ALL返回请求的要素的所有版本,没有值默认为返回请求要素的最新版本
    maxFeature0或1个(可选)整型类型,值为请求要素的最大数,默认值为满足查询的所有结果集
    expiry0或1个(可选)数字类型,要素被锁定的时间
    SRSName0或1个(可选)字符类型,值为坐标系统名
    featureID0或1个(可选)字符类型,值为要素的ID,多个ID之间用“,”隔开
    filter0或1个(可选)请求要素的过滤条件
    bBox0或1个(可选)Wkt格式,请求指定要素查询范围,可以替代featureId和filter参数
    sortby0或1个(可选)字符类型,查询结果属性值的排序依据

    接口调用示例

    操作调用示例
    GetCapabilitieshttp://tdt.fuzhou.gov.cn/serviceaccess/WFS/DMDZ_WFS-G?service=WFS&request=GetCapabilities&version=1.0.0
    DescribeFeatureTypehttp://tdt.fuzhou.gov.cn/serviceaccess/WFS/DMDZ_WFS-G?service=WFS&request=DescribeFeatureType&typename=DMDZ:地名&version=1.0.0
    GetFeaturehttp://tdt.fuzhou.gov.cn/serviceaccess/WFS/DMDZ_WFS-G?service=WFS&request=GetFeature&typename=DMDZ:地名&version=1.0.0&maxFeature=20
    展开全文
  • 采用数据库中间库(表)方式交换数据。中间库存放在MSCP数据库服务器上。ERP数据库为Oracle10G。北起表示可以技术上实现
  • wms接口开发说明

    千次阅读 2017-03-09 17:24:41
    基于sealink wms定义的接口实现。 接口技术要求简述如下: l http协议 l 消息body采用json格式 l 通过url传递系统参数   zdb端实现上行部分的接口(WTE),2个平台之间彼此调用,实现业务流程的衔接。   本文用...

      

    1   概述

    zdb平台与第三方平台对接的一个范例。

    基于sealink wms定义的接口实现。

    接口技术要求简述如下:

    l  http协议

    l  消息body采用json格式

    l  通过url传递系统参数

     

    zdb端实现上行部分的接口(WTE),2个平台之间彼此调用,实现业务流程的衔接。

     

    本文用采购进货和验收确认为例描述具体的代码实现。

     

    2   接口

    作为开发示例的2个接口定义如下。

    2.1    进货通知(ETW_PURCHASE)

    zdb在采购订单审核后调用。

     

    请求参数

    名称

    类型

    是否必须

    示例值

    更多限制

    描述

    sheetid

    String

     

     

     

    warehouse_no

    String

     

     

    仓库编码

    owner_no

    String

    123

     

    货主编码

    org_no

    String

     

     

    机构代码

    venderid

    String

     

     

    进货供货商编码

    purchase_no

    String

     

     

    采购单号

    sdate

    Date

     

     

    采购单审核日期

    checker

    String

     

     

    制单员姓名

    class_type

    String

     

     

    类型

    purdate

    Date

     

     

    送货日期

    validdate

    Date

     

     

    有效日期

    notes

    String

     

     

    订单说明

    orderlist

    Purchase[]

     

     

     

    serialid

    Number

     

     

    单内序号

    owner_article_no

    String

     

     

    商品编码

    pkcount

    Number

     

     

    订货规格

    qty

    Number

     

     

    进货总量

    owner_cust_no

    String

     

     

    客户代码

    cust_qty

    Number

     

     

    客户要货量

    cust_po_no

    String

     

     

    客户订单号

    cust_note

    String

     

     

    客户备注

     

    响应参数

    名称

    类型

    示例值

    描述

    flag

    String

    success

     

    code

    String

    000

    返回状态码

    message

    String

     

    返回状态描述

     

     

    2.2    验收确认(WTE_IM_CHECK)

    wms调用。

    请求参数

    名称

    类型

    是否必须

    示例值

    更多限制

    描述

    sheetid

    String

     

     

    传单单据编号

    warehouse_no

    String

     

     

    仓库编码

    owner_no

    String

    123

     

    货主编码

    po_no

    String

     

     

    进货通知单号

    checkno

    String

     

     

    验收单号

    supplier_no

    String

     

     

    供货商编码

    sdate

    Date

     

     

    验收时间

    orderlist

    Purchase[]

     

     

     

    serialid

    Number

     

     

    单内序号

    owner_article_no

    String

     

     

    商品编码

    prodate

    Date

     

     

    生产日期

    qty

    Number

     

     

    验收总量

     

    响应参数

    名称

    类型

    示例值

    描述

    flag

    String

    success

     

    code

    String

    000

    返回状态码

    message

    String

     

    返回状态描述

     

    3   实现

    ETW接口实现在client,WTE接口实现在server模块中。

    3.1    进货通知(ETW_PURCHASE)

    3.1.1    请求定义

    根据接口定义文档定义请求业务对象和请求传输请求体对象。

     

    请求业务对象类型:

    ///< 进货通知单

    struct CPurchase {

           string sheetid_;/// 传单单据编号   

           string warehouse_no_;/// 仓库编码

           string owner_no_;/// 货主编码     

           string org_no_; /// 机构代码

           string venderid_; /// 进货供货商编码

           string purchase_no_;/// 采购单号 

           string sdate_; /// 采购单审核日期 

           string checker_;/// 制单员姓名     

           string class_type_;/// 类型    

           string purdate_; /// 送货日期

           string validdate_;///有效日期

           string notes_;/// 订单说明    

           struct CItem { ///< 商品明细

                  int serialid_;///单内序号

                  string owner_article_no_;

                 int pkcount_; ///< 订货规格

                  double qty_; ///     进货总量

                  string owner_cust_no_;/// 客户代码     

                  double cust_qty_;///客户要货量    

                  string cust_po_no_;/// 客户订单号

                  string cust_note_; /// 客户备注    

                  CItem():serialid_(0),qty_(0),cust_qty_(0),pkcount_(1) {

                  }

                  MEMBER_DEFINE(CItem);

                  int Load(mpm_ns::CPurchase::CPurchaseDetail &item);

           };

           CAutoVector<CItem*> items_; ///< 商品明细

     

           CPurchase() {

                  org_no_ = ORG_NO;

                  class_type_ = "0";

           }

     

           MEMBER_DEFINE(CPurchase);

           int Load(mpm_ns::CPurchase &purchase);

    };

     

    请求体类型:

    ///< 进货通知单请求体

    struct CPurchaseRequestBody : public CMasterSlaveRequestBody<CPurchase,CPurchase::CItem> {

           MEMBER_DEFINE(CPurchaseRequestBody);

     

           CPurchaseRequestBody():CMasterSlaveRequestBody("orderlist") {

                  method_ = "ETW_PURCHASE";

           }

    };

     

    CMasterSlaveRequestBody为主从结构类型的请求体,模板参数CPurchase为请求业务对象类型,CPurchase::CItem为明细类型。

    orderlist为明细数组名称。

    ETW_PURCHASE为方法名称。

     

    3.1.2    请求与消息绑定

    绑定建立json消息与对象成员之间的映射。

    SET_MEMBER_BEGIN(CPurchase)

           SET_MEMBER2(CPurchase,sheetid_,"sheetid",false),

           SET_MEMBER2(CPurchase,warehouse_no_,"warehouse_no",false),

           SET_MEMBER2(CPurchase,owner_no_,"owner_no",false),

           SET_MEMBER2(CPurchase,org_no_,"org_no",false),

           SET_MEMBER2(CPurchase,venderid_,"venderid",false),

           SET_MEMBER2(CPurchase,purchase_no_,"purchase_no",false),

           SET_MEMBER2(CPurchase,sdate_,"sdate",false),

           SET_MEMBER2(CPurchase,checker_,"checker",true),

           SET_MEMBER2(CPurchase,class_type_,"class_type",false),

           SET_MEMBER2(CPurchase,purdate_,"purdate",false),

           SET_MEMBER2(CPurchase,validdate_,"validdate",true),

           SET_MEMBER2(CPurchase,notes_,"notes",true),

           SET_MEMBER2(CPurchase,purdate_,"purdate",false),

           SET_MEMBER2(CPurchase,validdate_,"validdate",true),

    SET_MEMBER_END(CPurchase)

     

    SET_MEMBER_BEGIN(CPurchase::CItem)

           SET_MEMBER2(CPurchase::CItem,serialid_,"serialid",false),

           SET_MEMBER2(CPurchase::CItem,owner_article_no_,"owner_article_no",false),

           SET_MEMBER2(CPurchase::CItem,pkcount_,"pkcount",true),

           SET_MEMBER2(CPurchase::CItem,qty_,"qty",false),

           SET_MEMBER2(CPurchase::CItem,owner_cust_no_,"owner_cust_no",true),

           SET_MEMBER2(CPurchase::CItem,cust_qty_,"cust_qty",true),

           SET_MEMBER2(CPurchase::CItem,cust_po_no_,"cust_po_no",true),

           SET_MEMBER2(CPurchase::CItem,cust_note_,"cust_note",true),

    SET_MEMBER_END(CPurchase::CItem)

     

    SET_MEMBER2的3个参数含义分别如下:成员变量名称,接口参数名称,是否允许空。

     

    3.1.3    接口转换

    接口转换把业务对象转换为请求对象。

    本步骤基于业务相关设计人员对接口转换规则明确描述后进行。

    业务对象是zdb系统内部描述业务的对象,请求对象为接口定义的用于接口之间的调用的对象。

    本接口的业务对象类型为mpm_ns::CPurchase,转换为上面定义的CPurchase类型,包括明细类型转换。

    下行转换方法为Load,上行转换方法为Output。

     

    业务对象转换为请求对象

    int CPurchase::Load(mpm_ns::CPurchase &purchase) {

           GET_SHARDINGID(purchase.eid_,_inner_env_->sharding_id_,-1);

           this->sheetid_ = GetSheetId();

           this->warehouse_no_ = LogMsg("%d",purchase.stock_id_);

           this->owner_no_ = LogMsg("%d",purchase.eid_);

           this->org_no_ = ORG_NO;

           this->venderid_ = LogMsg("%d",purchase.co_eid_);

           this->purchase_no_ = GET_UNIQUE_SHEETID(_inner_env_->sharding_id_,purchase.sheet_id_);

           this->sdate_ = purchase.check_date_;

           this->checker_ = purchase.checker_;

           this->class_type_ = "0";

           this->purdate_ = purchase.delivery_date_;

           this->notes_ = purchase.notes_;

     

           if (purchase.details_.size()==0)

                  return 0;

           vector<CSheetDetail*>::iterator iter = purchase.details_[0]->begin();

           while(iter!=purchase.details_[0]->end()) {

                  mpm_ns::CPurchase::CPurchaseDetail *detail = (mpm_ns::CPurchase::CPurchaseDetail*)*iter;

                  CPurchase::CItem *item = new CPurchase::CItem;

                  item->Load(*detail);

                  this->items_.push_back(item);

                  iter++;

           }

     

           return 0;

    }

     

    此方法从业务对象(mpm_ns::CPurchase类型)生成对应的请求对象数据。

    GET_UNIQUE_SHEETID用于生成唯一单据编号,由于单据编号在zdb各分区主站内唯一,但全局不唯一,因此由分区id和原始单据编号拼接而成,分区id占起始4个字符。

    上行确认时需要反向操作,拆分出分区id和原始单据编号。

     

    明细类型转换

    int CPurchase::CItem::Load(mpm_ns::CPurchase::CPurchaseDetail &item) {

           this->serialid_ = item.line_num_;

           this->owner_article_no_ = LogMsg("%lu",item.goods_id_);

           this->pkcount_ = item.pack_unit_qty_;

           this->qty_ = item.bulk_qty_ + item.pack_qty_*item.pack_unit_qty_;

           this->cust_note_ = item.notes_;

     

           return 0;

    }

     

    3.1.4    增加事件处理函数

    在插件头文件中声明采购订单审核事件函数,并实现。

    int CSealinkWMS::OnNewPurchase(CEvent *e) {

           return HandleMasterSlave<mpm_ns::CPurchase,CPurchaseRequestBody>(e,"OnNewPurchase");

    }

     

    3.1.5    登记事件

    在event_handle_map中增加事件响应函数项。

    CEventHandleMapItem event_handle_map[] = {

           {EVENT_NEW_PURCHASE,(EventHandleFunc)&CSealinkWMS::OnNewPurchase},///<进货通知

    };

     

    EVENT_NEW_PURCHASE是在采购订单审核后由业务系统激发,由wms接口的事件代理捕获,执行上面注册的函数CSealinkWMS::OnNewPurchase。

     

    3.2    验收确认(WTE_IM_CHECK)

    3.2.1    请求定义

    根据接口定义文档定义请求业务对象和请求传输请求体对象。

     

    请求业务对象类型:

    ///< 验收(进货)确认单

    struct CPurchaseAck : public CAckBase {

        string sheetid_;/// 传单单据编号 STRING(20) 不允许 

        string warehouse_no_;/// 仓库编码    STRING(3)  不允许 仓库编码

        string po_no_; /// 进货通知单号  STRING(20) 不允许 进货通知单号

        string checkno_; /// 验收单号    STRING(20) 不允许 WMS验收单单号)

        string supplier_no_; /// 供货商编码  STRING(10) 不允许 进货供货商编码

        string sdate_;/// 验收时间   date       日期格式:2008-10-11

     

        struct CItem {

            int serialid_;///单内序号    NUMBER 不允许 采购单内序号

            string owner_article_no_;/// 商品编码    STRING(20) 不允许 

            double qty_; /// 验收总量    Decimal(12,3)

            string prodate_;/// 生产日期 date   允许

            CItem():qty_(0),serialid_(1) {

            }

            MEMBER_DEFINE(CItem);

            int Output(gsm_ns::CStorage::CStorageDetail &item);

        };

     

        CAutoVector<CItem*> items_;

     

        CPurchaseAck() {

        }

        MEMBER_DEFINE(CPurchaseAck);

        int Output(gsm_ns::CStorage &storage);

    };

     

    这里只实现Output方法,把请求业务对象转换为系统业务对象。

     

    请求体类型:

    ///< 进货确认单请求体

    struct CPurchaseAckRequestBody : public CMasterSlaveRequestBody<CPurchaseAck,CPurchaseAck::CItem> {

        MEMBER_DEFINE(CPurchaseAckRequestBody);

     

        CPurchaseAckRequestBody():CMasterSlaveRequestBody("orderlist") {

            method_ = "WTE_IM_CHECK";

        }

    };

    CMasterSlaveRequestBody为主从结构类型的请求体,模板参数CPurchaseAck为请求业务对象类型,CPurchaseAck::CItem为明细类型。

    orderlist为明细数组名称。

    WTE_IM_CHECK为方法名称。

     

    3.2.2    请求与消息绑定

    绑定建立json消息与对象成员之间的映射。

    SET_MEMBER_BEGIN(CPurchaseAck)

        SET_MEMBER2(CPurchaseAck,sheetid_,"sheetid",false),

        SET_MEMBER2(CPurchaseAck,warehouse_no_,"warehouse_no",false),

        SET_MEMBER2(CPurchaseAck,owner_no_,"owner_no",false),

        SET_MEMBER2(CPurchaseAck,po_no_,"po_no",false),

        SET_MEMBER2(CPurchaseAck,checkno_,"checkno",false),

        SET_MEMBER2(CPurchaseAck,supplier_no_,"supplier_no",false),

        SET_MEMBER2(CPurchaseAck,sdate_,"sdate",true),

    SET_MEMBER_END(CPurchaseAck)

     

    SET_MEMBER_BEGIN(CPurchaseAck::CItem)

        SET_MEMBER2(CPurchaseAck::CItem,owner_article_no_,"owner_article_no",false),

        SET_MEMBER2(CPurchaseAck::CItem,prodate_,"prodate_",true),

        SET_MEMBER2(CPurchaseAck::CItem,qty_,"qty",false),

        SET_MEMBER2(CPurchaseAck::CItem,serialid_,"serialid",false),

    SET_MEMBER_END(CPurchaseAck::CItem)

     

    3.2.3    接口转换

    把请求对象转换为业务对象。

    int CPurchaseAck::Output(gsm_ns::CStorage &storage) {

        storage.eid_ = atoi(this->owner_no_.c_str());

        string dbc_name;

        if (PinDB(dbc_name))

            return -1;

        storage.dbc_name_ = dbc_name;

     

        storage.stock_id_ = atoi(this->warehouse_no_.c_str());

        SEPARATE_SHEETID(this->po_no_,storage.ref_sheet_id_,-1);

        storage.co_eid_ = atoi(this->supplier_no_.c_str());

        storage.check_date_ = this->sdate_;

        storage.notes_ = ACK_NOTES_TEXT;

        storage.creator_ = ACK_USER;

        storage.oper_date_ = CDateTime::Now().GetDateTime();

     

        if (this->items_.size()==0)

            return 0;

     

        vector<CPurchaseAck::CItem*>::iterator iter = items_.begin();

        while(iter!=items_.end()) {

            CPurchaseAck::CItem *item = *iter;

            gsm_ns::CStorage::CStorageDetail *detail =  new gsm_ns::CStorage::CStorageDetail;

            if (item->Output(*detail))

                return -1;

            storage.details_[0]->push_back(detail);

            iter++;

        }

     

        return 0;

    }

     

    PinDB根据请求对象内容的货主,确定数据库分区并存储在TLS中,获取数据库连接名。

    SEPARATE_SHEETID从请求对象的单据编号,分离出原始单据编号。

    3.2.4    增加响应函数

    int CSealinkWMS::OnPurchaseAck(string &request,CResponseBodyBase **response) {

           CPurchaseAckRequestBody req;

           return req.Handle<gsm_ns::CStorage >(request, SDT_PURCHASE,6049);

    }

     

    request为请求的消息体(json)内容.

    这里Handle调用的含义是对采购确认生成入库单(gsm_ns::CStorage类型),SDT_PURCHASE为入库类型,入库后自动审核,审核采用6049协议。

     

    3.2.5    登记接口

    在GetHandleFunc函数的func_maps中增加响应函数入口项:

    HandleRequestFuncPtr GetHandleFunc(string &method) {

           static struct CFuncMap {

                  string method_;

                  HandleRequestFuncPtr func_ptr_;

           } func_maps[] = {

                  {"WTE_IM_CHECK",&CSealinkWMS::OnPurchaseAck},///<验收(进货)确认

           };

           for (unsignedint i=0;i<sizeof(func_maps)/sizeof(func_maps[0]);i++) {

                  CFuncMap &item = func_maps[i];

                  if (stricmp(item.method_.c_str(),method.c_str())==0)

                         return item.func_ptr_;

           }

           return 0;

    }

     

     

     

    4   后记

    基于一份有映射关系的接口文档开发,根据接口文档声明类型;根据业务数据映射规则进行成员赋值。

     

    所采用的实现已经尽可能简化了。

    基于此方法开发,工作量容易评估,bug率及重复率低,维护扩展容易。

    如增加一参数,基本就增加一个变量,绑定一下,映射一下,共3行代码就可以解决。

    若接口支持xml,这些代码无需任何变动。

     

    理论上,再简化还有2个方向:

    l  应用无关:不涉及业务对象,这是不同的抽象级别,完全是另一种实现

    l  代码生成工具:程序就是取代人做重复的程序化的事情的,基于接口描述生成上面的代码主干再修改。

    工具的价值取决于重复使用量,低价值的工具不值得开发。

     

    本文就如何进行此类开发进行演示说明,背后的支撑是广泛的,不在此赘言。

    展开全文
  • 良程吉运 仓储系统(WMS系统)开放的标准API通用接口规范文档
  • 富勒WMS_datahub接口文档
  • WMS系统对外开放接口设计文档-V.1.0.docx
  • 开始实现之前一直觉得geoserver发布的应该用自带的接口(GetCapabitities,GetMap,GetFeatureInfo),搞了很久发现不行,慢慢就注意到cesium自带的boxinfo这个东西,他又是怎么拿到的呢?实则去看了下还是没看懂!话...
    前言

    开始实现之前一直觉得geoserver发布的应该用自带的接口(GetCapabitities,GetMap,GetFeatureInfo),搞了很久发现不行,慢慢就注意到cesium自带的boxinfo这个东西,他又是怎么拿到的呢?实则去看了下还是没看懂!话不多说,上代码。

    //就不解释每句啥意思了,都是每个小功能组合起来的,不懂就挨着挨着打印输出,复制粘贴基本能直接用。
        _this.handler = new Cesium.ScreenSpaceEventHandler(
             _this.viewer.scene.canvas
            );
            _this.handler.setInputAction(function (movement) {
              const ray = _this.viewer.camera.getPickRay(movement.position);
              const cartesian = _this.viewer.scene.globe.pick(
                ray,
                _this.viewer.scene
              );
              if (cartesian) {
                var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
                if (cartographic) {
                  var xy = new Cesium.Cartesian2();
                  var alti = _this.viewer.camera.positionCartographic.height;
                  var level = _this.getLevel(alti);
                  //下面XXX均为模型对象
                  if (XXX.ready) { 
                    xy = XXX.tilingScheme.positionToTileXY(
                      cartographic,
                      level,
                      xy
                    );
                    var promise = XXX.pickFeatures(
                      xy.x,
                      xy.y,
                      level,
                      cartographic.longitude,
                      cartographic.latitude
                    );
                    Cesium.when(promise, function (layerInfo) {
                      //查询结果展示
                      _this.dateTwo = layerInfo[0].data.properties;
                      console.log(_this.dateTwo, "_this.dateTwo");
                      _this.flags = true; //打开弹窗
                    });
                  }
                }
              }
            }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    
    展开全文
  • NCV6.5产品手册-WMS集成接口NCV6.5产品手册-WMS集成接口NCV6.5产品手册-WMS集成接口NCV6.5产品手册-WMS集成接口NCV6.5产品手册-WMS集成接口NCV6.5产品手册-WMS集成接口NCV6.5产品手册-WMS集成接口NCV6.5产品手册-WMS...
  • WMS接口程序.rar

    2020-09-01 16:50:15
    Oracle数据库TO SQLserver数据库,以及SQLserver数据库TO SQLserver数据库之间数据传输接口,简单实用,内附实例
  • WMS地图服务

    2021-08-31 09:56:49
    WMS服务:Web Map Service,网络地图服务,它是利用具有地理空间位置信息的数据制作地图,其中将地图定义为地理数据的可视化表现,能够根据用户的请求,返回相应的地图,包括PNG、GIF、JPEG等栅格形式,或者SVG或者...

    1. WMS 简介

    WMS服务:Web Map Service,网络地图服务,它是利用具有地理空间位置信息的数据制作地图,其中将地图定义为地理数据的可视化表现,能够根据用户的请求,返回相应的地图,包括PNG、GIF、JPEG等栅格形式,或者SVG或者WEB CGM等矢量形式。WMS支持HTTP协议,所支持的操作是由URL决定的。

    2. WMS提供如下操作

    • GetCapabitities:返回服务级元数据,它是对服务信息内容和要求参数的一种描述。
    • GetMap:返回一个地图影像,其地理空间参考和大小参数是明确定义了的。
    • GetFeatureInfo:返回显示在地图上的某些特殊要素的信息。
    • GetLegendGraphic:返回地图的图例信息。

    在前面介绍过关于WMS是OpenLayers加载WMS服务:
    https://blog.csdn.net/a13407142317/article/details/119896892?spm=1001.2014.3001.5501

    2.1. ArcGIS调用

    关于ArcGIS的调用,具体概念我就不做Copy了,大家可以参考ArcGIS官方文档:
    https://enterprise.arcgis.com/zh-cn/server/latest/publish-services/windows/wms-services.htm

    我这边就是基于这个发送几个请求:

    2.1.1 GetCapabitities

    http://192.9.10.250:6080/arcgis/rest/services/行政区地类图斑/MapServer?SERVICE=WMS&request=Getcapabilities
    在这里插入图片描述

    获取关于行政区地类图斑服务的基本信息,而在ArcGIS Server服务请求中所有的Layer都需要使用顺序号,而在顺序和上图中Layer后的顺序码(如:DLTB(0))通过验证不对

    其基本信息为:

    http://192.9.10.250:6080/arcgis/services/%E8%A1%8C%E6%94%BF%E5%8C%BA%E5%9C%B0%E7%B1%BB%E5%9B%BE%E6%96%91/MapServer/WMSServer?request=GetCapabilities&service=WMS
    在这里插入图片描述

    2.1.2 获取服务中图层的基本信息

    http://192.9.10.250:6080/arcgis/rest/services/行政区地类图斑/MapServer/0?f=pjson

    emmm 上述的这个0还是使用的Getcapabilities的顺序码(DLTB(0))
    在这里插入图片描述

    2.1.3 Query

    http://192.9.10.250:6080/arcgis/rest/services/行政区地类图斑/MapServer/0/query?where=GDLX is null or GDLX = ‘’ &outFields=*

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/df5adcfe70ab41ddae9在这里插入图片描述
    243d33f708915.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5oS_5L2g6LWw5Ye65Y2K55Sf,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)

    通过上述的接口或者界面可以向ArcGIS Server发起请求

    -指定返回方式为Json

    http://192.9.10.250:6080/arcgis/rest/services/行政区地类图斑/MapServer/0/query?where=GDLX is null or GDLX = ‘’ &f=json&outFields=*

    在ArcGIS中这个接口很强大,可以查询一切ArcEngine可以查询的内容,比如空间查询、范围查询等等。且返回的信息可以返回空间范围,即图斑的坐标信息

    不过在ArcGIS Server中可以通过权限控制禁用改权限,将下图中的两个权限勾选取消则上述接口请求无效。

    2.2.4 GetFeatureInfo

    通过WMS的服务请求获取属性信息

    http://192.9.10.250:6080/arcgis/services/ArcGISService_001/MapServer/WMSServer?request=GetFeatureInfo&service=WMS&version=1.1.1&styles=default&SRS=EPSG:4529&bbox=41398477.406700,4120788.817600,41447440.215300,4160585.149700&width=10&height=10&X=1&Y=1&INFO_FORMAT=text/xml&FEATURE_COUNT=50&query_layers=0

    http://192.9.10.250:6080/arcgis/services/ArcGISService_001/MapServer/WMSServer?
    request=GetFeatureInfo&             //接口函数
    service=WMS&                        //服务类型
    version=1.1.1&                      //服务请求版本
    styles=default&                     //返回样式
    SRS=EPSG:4529&                      //返回的空间参考
    bbox=41398477.406700,4120788.817600,41447440.215300,4160585.149700&     //返回数据的空间四至范围
    width=10&height=10&                 //返回数据地图的长宽
    X=1&Y=1&                            //返回要素的像素
    INFO_FORMAT=text/xml&               //返回数据的返回格式
    FEATURE_COUNT=50&                   //一次请求最多返回的数据个数
    query_layers=0                      //请求的数据名称(对应GetCapabitities中警告[而在顺序和上图中Layer后的顺序码(如:DLTB(0))`通过验证不对`])
    

    在这里插入图片描述

    http://192.9.10.250:6080/arcgis/services/ArcGISService_001/MapServer/WMSServer?request=GetFeatureInfo&service=WMS&version=1.1.1&styles=default&SRS=EPSG:4529&bbox=41398477.406700,4120788.817600,41447440.215300,4160585.149700&width=1&height=1&X=1&Y=1&INFO_FORMAT=text/xml&FEATURE_COUNT=50&query_layers=0

    在这里插入图片描述

    2.2. GeoServer调用

    官方文档借鉴: https://docs.geoserver.org/stable/en/user/services/wms/index.html

    一下两个接口类似与ArcGIS Server

    2.2.1. GetCapabilities

    http://192.9.10.250:8086/geoserver/cite/wms?service=wms&request=GetCapabilities

    2.2.2. GetFeatureInfo

    http://192.9.10.250:8086/geoserver/cite/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureInfo&FORMAT=image/png&TRANSPARENT=true&QUERY_LAYERS=DLTB&STYLES&LAYERS=DLTB&INFO_FORMAT=text/html&FEATURE_COUNT=50&X=50&Y=50&SRS=EPSG:4529&WIDTH=101&HEIGHT=101&BBOX=41398477.406700,4120788.817600,41447440.215300,4160585.149700

    3. 个人解释一下GetFeatureInfo中几个参数空间上的含义

    主要介绍的是以下4个参数

    SRS=EPSG:4529&                      //返回的空间参考
    bbox=41398477.406700,4120788.817600,41447440.215300,4160585.149700&     //返回数据的空间四至范围
    width=10&height=10&                 //返回数据地图的长宽
    X=1&Y=1&                            //返回要素的像素
    

    3.1. 文字解读

    • SRS 代表数据的空间参考信息,展示数据的空间投影方式
    • bbox 上述的SRS指定后便为bbox的值上指定了单位和数据的投影方式等空间信息
    • width和height 之时上述俩个参数SRSbbox所指定的数据映射到怎样的一个空间范围地图框
    • X和Y 则表示在上述的空间范围地图框取哪一个网格中的数据。

    3.2. 图片解读方式

    在这里插入图片描述

    指定的数据映射到怎样的一个空间范围地图框

    • X和Y 则表示在上述的空间范围地图框取哪一个网格中的数据。
    展开全文
  • import base64 import md1 from time import gmtime, strftime today = strftime("%m/%d/%Y %I:%M:%S %p", gmtime()) print(today) ip = “168.0.0.1” password = “defaultpassword” validminutes = “1” ...
  • 用geotools自己写WMS服务

    千次阅读 2017-11-08 22:03:30
    概述本文讲述如何结合geotools写一个类似于WMS的地图服务,并实现在OL4中的调用展示
  • 1、GeoServer(地理信息系统服务器)是...GeoServer的主要特征包括:兼容 WMS 和 WFS 特性;能够将网络地图输出为jpeg、gif、png、SVG、KML等格式;能够运行在任何基于 J2EE/Servlet 容器之上。其安装方式有两种,一...
  • arcgis wms服务

    2020-08-23 16:29:49
    arcgis wms服务 export const WMSLayer = async (name) => { let WMSLayer = await arcgisPackage.WMSLayer let WMS = new WMSLayer({ url: 'http://xxx.xxx.xxx.xxx:8080/geoerver/wms', sublayers: [{ ...
  • OGC® Web Map Service (WMS) 接口标准是一套简单的 HTTP 接口,用于从一个或多个地理信息数据库传输有地理定位的地图图像数据。
  • WMS系统对接OMS接口经验

    万次阅读 2016-08-04 13:38:55
    WMS对接OMS是实现电商平台重要的一环...内部逻辑处理:如果以WMS为主那么先调用WMS内部逻辑处理,处理完成后在调用OMS接口,中间如果OMS接口调用失败,WMS实现接口重发机制进行数据同步。 2.数据约定 请求协议约定:HTT
  • Arcgis for Js之加载wms服务

    千次阅读 2019-09-27 06:31:05
    概述:本节讲述Arcgis for Js加载ArcgisServer和GeoServer发布的wms服务。 1、定义resourceInfo var resourceInfo = { extent: new Extent(-126.40869140625,31.02539...
  • 通过SLD自定义WMS服务风格

    千次阅读 2019-12-19 15:00:50
    WMS服务又称网络地图服务,它是利用具有地理空间位置信息的数据制作地图,将地图定义为地理数据的可视化表现。可以根据用户的请求,返回相应的地图,包括PNG、JPEG、TIFF等栅格形式,又或者SVG、WEB CGM等矢量形式。...
  • 富勒WMS用户手册

    2018-08-30 13:37:42
    富勒WMS用户手册,相对比较新的版本,欢迎大家交流分享。
  • wms、wmts、wfs等地图服务区别

    万次阅读 多人点赞 2019-06-22 15:24:16
    OGC OGC 全称是开放地理空间信息联盟(Open Geospatial Consortium),是一个非盈利的国际标准组织,它制定了数据和服务的一系列... WMS服务:Web Map Service,网络地图服务,它是利用具有地理空间位置信息的数据制...
  • WMS解决方案

    2018-05-07 14:50:31
    完整的WMS解决方案,与SAP对接: ...(3) 中间件服务端:负责WMS业务逻辑处理,接受客户端请求,访问数据库,并通过SAP接口读写SAP系统等;(4) 数据库服务端:负责WMS数据存储及部分热点业务逻辑的存储过程执行
  • 有人做过WMS系统对接淘宝奇门接口吗 有人做过WMS系统对接淘宝奇门接口吗</p>
  • 发布和使用 ArcGIS Server 服务之--OGC服务
  • 基础概念 WMS WMS-C TMS WMTS WFS WCS WPS
  • WMS WMTS WFS WCS等地图服务说明及区别

    千次阅读 2020-12-21 17:35:12
    WMS全称是Web Map Service,网络地图服务,它是利用具有地理空间位置信息的数据制作地图,其中将地图定义为地理数据的可视化表现,能够根据用户的请求,返回相应的地图,包括PNG、GIF、JPEG等栅格形式,或者SVG或者...
  • OGC 的WCS WFS 及WMS 服务

    2019-10-06 13:10:23
    OGC——Open Geospatial Consortium——开放地理信息联盟,是一个非盈利的志愿的国际标准化组织,引领着空间地理信息标准及定位基本服务的发展目前在空间数据互操作领域,基于公共接口访问模式的互操作方法是一种...
  • 基于Openlayer获取wms服务要素信息

    千次阅读 2018-02-01 18:19:44
    OL实例如下: body> div id="map" class="map">div> div id="info"> div> script> var wmsSource = new ol.source.ImageWMS({ url: 'https://ahocevar.com/geoserver/wms', pa
  • 管易WMS用户手册

    2019-03-13 15:00:04
    管易WMS手册 1 1. 安全管理 1 1.1 系统设置 1 1.1.1 资源信息 1 1.1.2 选项设置 2 1.2.3 连接设置 4 1.1.4 服务设置 5 1.1.5 公司信息 6 1.1.6 系统日志 9 1.2 权限设置 9 1.2.1 模块管理 9 1.2.2 角色管理 11 1.2.3...
  • arcgis engine 二次开发需要连接GIS服务,arcgis engine 提供了类似的接口。 arcgis engine 连接WMS服务: try { IPropertySet pPropertyset = new PropertySetClass(); pPropertyset.SetPropert...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,329
精华内容 2,931
关键字:

wms服务接口