symboquine / farmos_wfs
为farmOS提供的WFS模块。
Requires
- itamair/geophp: 1.3
README
farmOS_wfs为farmOS提供WFS模块。这使得FarmOS区域可以作为Web Feature Service (WFS)访问,它可以用在GIS软件,如Quantum GIS (QGIS)。
限制与兼容性
- 目前仅支持WFS 1.1.0 / GML 3.1.1
- 仅支持单几何类型的特征;点、多边形或线字符串
- 仅支持基于BBOX或特征ID的简单过滤进行查询/更新/删除 - 未来可能会支持更复杂的OGC过滤操作
- 仅支持farmOS使用的EPSG:4326空间参考系统(SRS) - QGIS和类似软件通常支持将数据源重新投影到其他SRS
- 仅支持PHP >= 7.4 - 更早版本将无法工作
- 仅针对farmOS 3.1.1进行了测试 - farmOS 1.x请参阅farmOS_wfs-7.x-1.x
- 仅与QGIS 3.34进行了测试 - 更早版本可能可行,但无法保证
入门指南
使用Composer和Drush在farmOS 3.x中安装farmOS_wfs;
composer require drupal/farmos_wfs drush en farmos_wfs
可用的发布版本可以在https://www.drupal.org/project/farmos_wfs/releases查看
QGIS配置
配置OAuth2
- 名称:
farmOS0-oauth2-resource-owner
(根据需要命名) - 授权流程: 资源所有者
- 令牌URL:
https://path-to-your-farmOS-server.example.com/oauth/token
- 客户端ID:
farm
- 用户名:
your-farmOS-username
- 密码:
your-farmOS-username
- 作用域:
farm_manager
配置WFS服务器连接
- 名称:
FarmOS0
(根据需要命名) - URL:
https://path-to-your-farmOS-server.example.com/wfs
- 身份验证配置: 选择上面创建的OAuth2配置
添加图层
- 点击“连接”,并将所需的图层添加到您的地图中!
常见问题解答
为什么这很有用?
farmOS_wfs模块允许farmOS和GIS之间进行双向集成,其中farmOS是资产数据的“事实来源”。这意味着可以使用QGIS完成复杂的地图/地理空间任务,并始终使用来自farmOS的最新数据。没有farmOS_wfs,进行类似操作将涉及在farmOS/GIS格式之间导入/导出数据,这将使得维护单一权威数据模型变得困难。
为什么不同的几何形状以单独的特征类型(图层)显示?
farmOS允许任何资产具有任意几何形状或甚至几何形状的集合,然而QGIS - 以及我相信大多数GIS工具 - 都期望特征类型中的特征几何形状是同质的。WFS规范允许具有几何类型如GeometryCollection或多几何形状的特征,但这样它们就不容易查看或编辑。因此,farmOS_wfs选择以不同的图层形式提供不同的几何类型,这是一种实用主义的选择。
为什么一些字段以两个下划线开头(例如 "__uuid")?
这些字段是farmOS/Drupal报告为只读的字段。通过farmOS_wfs设置这些字段的值的尝试是不允许的,将会产生错误。通常,这些字段也会自动填充,这意味着它们可能会在通过farmOS_wfs提交更改后发生变化,但新值将在下次从farmOS获取要素时才会出现。
为什么我不能删除某些资产?
farmOS维护资产引用的有效性。某些资产(特别是非固定资产)将会有记录它们的移动/位置日志。在删除资产之前,需要删除这些日志。
可能的未来方向
- 显示
location
字段 - 这需要更多的思考,因为资产引用不容易编辑,只读名称的效用有限 - 使用数据库事务提交对资产的更改
- 支持更复杂的OGC过滤查询
- 支持额外的WFS版本 - 尤其是WFS 2.0.0以获取完全功能的分页
- 检测PostGIS空间索引是否存在于Geofield列上,并切换到使用PostGIS
ST_
查询 - 相关的https://www.drupal.org/project/geofield/issues/2969564 & https://www.drupal.org/project/geofield_postgis - 考虑添加对MultiPoint、MultiLineString和MultiPolygon要素层的支持
- 考虑添加仅由资产类型参数化的几何无关要素层
- 为OpenLayers客户端添加测试
开发
环境
在此存储库的docker/
目录中运行;
cp docker-compose.pgsql.yml docker-compose.yml docker-compose up -d
命令完成后,farmOS应运行在https://:80,并且安装了farmOS_wfs模块。测试站点的用户名和密码分别是'root'和'test'。
运行测试
在已启动上述开发环境的docker/
目录中;
docker build -t qgis_test_harness qgis_test_harness docker run --rm -it --name qgis --network=docker_default -v $(pwd)'/qgis_tests:/tests_directory' qgis_test_harness:latest ./run_tests.sh
更复杂的测试过滤
运行单个测试
docker run --rm -it --name qgis --network=docker_default -v $(pwd)'/qgis_tests:/tests_directory' qgis_test_harness:latest ./run_tests.sh test_suite/test_cases/qgis_basic_crud_test.py::QgisBasicCrudTest::test_qgis_create_line_string_water_asset
运行所有'非点'qgis测试
docker run --rm -i --name qgis --network=docker_default -v $(pwd)'/qgis_tests:/tests_directory' qgis_test_harness:latest ./run_tests.sh -k 'qgis and not point'
参数按原样传递给pytest。有关更多信息,请参阅https://pytest.cn/en/stable/usage.html#specifying-tests-selecting-tests
格式化测试
autopep8 --in-place --recursive docker/qgis_tests/
推送新版本的程序
从此存储库的[开发分支][development branch]开始
# Create the commit git commit -m "Release version 2.0.1" # Tag the release git tag 2.0.1 # Push the 2.x branch and new tag git push --atomic origin HEAD:2.x 2.0.1