QIS二次开发03--工程文件的理解

如果用过超图的desktop进行过空间数据操作,那工程文件可以简单理解等同于超图的workspace(工作空间)文件。这个工程文件在QGIS里是做了同样的事情,进行空间数据的描述和组织,包括但不限于参考坐标系、地图图层信息、布局信息、标注和插件情况。

QGIS的工程文件有两类二进制和XML两种不同形式,其中XML格式采用.qgs扩展名,具体如下(部分,不完整罗列):

<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis projectname="" saveDateTime="2022-10-28T22:28:39" version="3.26.3-Buenos Aires" saveUser="matebook" saveUserFull="matebook">
  <homePath path=""/>
  <title></title>
  <transaction mode="Disabled"/>
  <projectFlags set=""/>
  <projectCrs>
    <spatialrefsys nativeFormat="Wkt">
      <wkt>GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]</wkt>
      <proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
      <srsid>3452</srsid>
      <srid>4326</srid>
      <authid>EPSG:4326</authid>
      <description>WGS 84</description>
      <projectionacronym>longlat</projectionacronym>
      <ellipsoidacronym>EPSG:7030</ellipsoidacronym>
      <geographicflag>true</geographicflag>
    </spatialrefsys>
  </projectCrs>
  <layer-tree-group>
    <customproperties>
      <Option/>
    </customproperties>
    <layer-tree-layer source="./line_sample.shp" providerKey="ogr" id="line_sample_09f4a6ec_1a05_46e0_b889_640d9ee0e799" checked="Qt::Checked" expanded="1" legend_split_behavior="0" name="03" legend_exp="" patch_size="-1,-1">
      <customproperties>
        <Option/>
      </customproperties>
    </layer-tree-layer>
    <layer-tree-layer source="./50m_cultural/ne_50m_admin_0_countries.shp" providerKey="ogr" id="ne_50m_admin_0_countries_b16becdd_0955_4f24_b51a_bda250df38d9" checked="Qt::Checked" expanded="1" legend_split_behavior="0" name="02" legend_exp="" patch_size="-1,-1">
      <customproperties>
        <Option/>
      </customproperties>
    </layer-tree-layer>
    <layer-tree-layer source="./region_sample.shp" providerKey="ogr" id="region_sample_f6a8d8ba_a795_43e0_8b92_5e8370d67666" checked="Qt::Unchecked" expanded="1" legend_split_behavior="0" name="01" legend_exp="" patch_size="-1,-1">
      <customproperties>
        <Option/>
      </customproperties>
    </layer-tree-layer>
    <custom-order enabled="0">
      <item>ne_50m_admin_0_countries_b16becdd_0955_4f24_b51a_bda250df38d9</item>
      <item>line_sample_09f4a6ec_1a05_46e0_b889_640d9ee0e799</item>
      <item>region_sample_f6a8d8ba_a795_43e0_8b92_5e8370d67666</item>
    </custom-order>
  </layer-tree-group>

从某种意义讲只有加载并解释即可获取空间数据的描述信息,但实际上不建议如此做,如果需要具体操作工程文件的话可以通过QgsProject这个类来实现,比如加载工程文件,读取节点等。

由于之前使用arcgis和supermap较多,这里有几个遗憾:

1、空间数据的描述还是缺乏层次,没有地图这个层次描述,直接就是图层,这就导致了一个工程文件只有一个地图,而不是1:多的关系。

2、图层的理解存在偏差,图层既是数据源也是显示,没有进行有效隔离,比如增加一个类型dataset来保存数据,而图层是具体数据集的渲染。这样可以实现一个数据集可以有多个图层(也许qgis本来就有,可能我理解不到位)。

3、QgsProject里面的封装还是过于原始,很多功能没法直接调用,比如打开地图,这必须自己加载图层实现。这也正是缺少map这个逻辑带来的一个开发实现的不便利吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值