地理空间数据的灵活模式框架。
grout的Python项目详细描述
灌浆
grout是一个灵活的地理空间数据模式框架,由django和postgresql提供支持。想一想:nosql数据库服务器,但是有模式验证和postgis支持。
内容
简介
grout将nosql数据库的灵活性与 postgis,允许您对 您的数据库架构,同时仍可以访问强大的地理空间查询。
灌浆将帮助您:
- 为应用程序中的记录定义、编辑和验证架构
- 使用内置版本控制系统跟踪对架构的更改
- 对用户定义的字段执行快速过滤
- 即使在存储有非结构化数据的记录上运行复杂的地理空间查询。
灌浆是灌浆套件的核心库,这是一个易于构建的工具包 灌浆顶部的灵活模式应用程序。你可以把灌浆作为一个应用程序来安装 在django项目中,或者您可以将其部署为独立的api 服务器带有可选的管理 后端
准备好了吗?要开始在Django中使用水泥浆,请参见获取 已开始。开始使用ano水泥浆疗法 堆栈,请参见非django应用程序。为了更多 有关灌浆工作原理的背景,请参见概念
开始
django
如果你正在开发一个django项目,你可以安装灌浆作为django应用程序和 在您的项目中使用它。
要求
grout支持以下python和django版本:
- 巨蟒:2.7、3.4、3.5、3.6、3.7
- django:1.11,2.0
某些版本的django只支持某些版本的python。确保 如果您的python和django版本协同工作,请参阅django常见问题解答:什么 我可以用python版本 Django?
安装
使用pip
$ pip install grout
要使用灌浆的开发版本,请从Github安装它。
$ git clone git@github.com:azavea/grout.git
确保灌浆包含在项目的 要将grout用作api服务器,需要将api视图合并到
注意,grout会自动在 灌浆要求在 目前, 下面是一个开发项目的配置示例: 请注意,灌浆使用django-rest-frameworkdjango-rest框架
提供api端点。配置特定于drf的设置,如
身份验证,请参见drf文档。
灌浆服务器是一个简单的部署
作为独立应用程序使用的灌浆API服务器。它还服务于
作为如何将灌浆纳入Django项目的一个好例子,以及
包括要引导的预配置身份验证模块。如果你是
在项目中安装或配置灌浆时遇到问题,灌浆
服务器
是一个很好的故障排除资源。 如果您不是django开发人员,您仍然可以使用grout作为独立的
使用灌浆服务器的API服务器
项目。参见灌浆服务器文档
有关如何安装灌浆服务器实例的详细信息。 灌浆以记录为中心,这些记录只是数据库中的实体。
记录可以是世界上任何类型的事情或事件,尽管灌浆是
当您的记录包含一些地理空间和时间组件时非常有用。 每个记录都包含对recordschema的引用,recordschema对
指向它的记录的版本化架构。此架构存储为
jsonschema,用json描述数据模型的规范。 最后,每个recordschema都包含对记录类型的引用,即
用于组织记录的简单容器。recordtype公开了
可靠地访问一组表示同一类型事物的记录,即使
它们有不同的模式。我们将很快看到,记录类型是有用的访问
指向记录,因为记录架构可以随时更改。 在grout中,recordschema只追加,这意味着它们不能被删除。
相反,当您想要更改记录的架构时,可以创建一个新的
记录模式并更新 举个简单的例子,假设我们有一个描述存储在
a 关于这个recordschema对象需要注意的几点: 现在假设我们要将 此外,灌浆将更新初始方案,以设置 现在,当用户在 有关灌浆数据模型的详细信息,请参见灌浆中的 与api的通信通常遵循restfulapi设计的原则。
api路径对应于资源, 来自api的响应完全是json。 可以使用 返回资源列表的所有api端点都将分页。分页采用以下格式: 在实际响应中, 此格式适用于下面的API终结点,在
每个端点的文档。 因为一组记录的recordschema可以随时更改,所以recordtype api
端点为检索一组记录提供了一致的访问点。
使用记录类型终结点查找记录的最新记录架构
在执行进一步的查询之前,您感兴趣。 路径: 查询参数: 结果字段: recordschema api端点可以帮助您发现
应在给定的记录中可用。这对于自动生成过滤器很有用
基于记录的字段,或在记录的字段上运行自定义验证
Schema, 路径: 结果字段: 记录是灌浆项目的核心:yo中的实体你的数据库。这个
记录api端点提供了一种检索这些对象以进行分析的方法
或显示给最终用户。 路径: 查询参数: 结果字段: 边界提供了一种在无需
必须创建单独的记录类型。使用边界,可以上载
并检索管理边界和焦点之类的shapefile数据
应用程序中的区域。 路径: 结果字段: 注意: 创建新边界及其正确的边界多边形是一个两步过程。 上一个请求的响应将有一个空白的"显示"字段。
选择 BoundaryPolygons存储与边界关联的shapefile数据,
包括几何和元数据。 路径: 查询参数: 结果字段: 这些说明将帮助您设置灌浆和
向上游贡献变化。 灌浆开发环境采用Docker集装箱运输,以确保类似
跨平台的环境。为了和Docker一起发展,你需要
以下依赖项: 用git克隆repo。 运行 一旦您的环境是最新的,就可以使用 此命令将为每个受支持的python版本和
项目中的django。如果你在本地开发,你只想运行
作为测试的一个子集,您可以指定python的版本
您要用来运行测试: 有关可用python版本的列表,请参见 tox为python和django版本的每个组合创建一个新的virtualenv
由测试套件使用。为了清理停止的集装箱和
删除这些虚拟机,使用 请注意, 如果在 确保用git注册新的迁移文件: 以下资源提供了部署和使用灌浆的有用提示。 概念图:灌浆套件的早期描述
(以前被称为ashlar)一位在夏季从事此项工作的开源研究员
2018。描述套件的概念架构,并总结
对未来方向的想法。 将包重命名为灌浆:ADR文档
决定将包从"ashlar"重命名为"grout"。 评估记录到记录引用:ADR
记录实施记录到记录的原因和要求
外键字段。另请参见拉取请求。
螺纹以便进一步
讨论。 评估备用后端:ADR呈现
对灌浆可能的NoSQL后端和服务提供商的研究。 Grout 2018奖学金:a
2018年夏季Azavea灌浆项目管理报告
开源研究金。有用的
有关项目动机和发展轨迹的文档。 想知道水泥浆的去向吗?请参阅路线图
了解未来的发展。settings.py的
安装的应用程序中。
# settings.pyINSTALLED_APPS=(...'grout',)
urls.py
文件。下面的示例将包括
/灌浆
终点。# urls.pyurlpatterns=[url(r'^grout/',include('grout.urls'))]
/api/
端点下嵌套视图,这意味着
上面的设置将创建类似于hostname.com/grout/api/records
的url。
如果您希望灌浆视图位于顶层/api/
端点(如
hostname.com/api/records
,可以直接导入灌浆urlpatterns
。# urls.pyfromgroutimporturlpatternsasgrout_urlpatternsurlpatterns=grout_urlpatterns
配置
settings.py
文件中定义灌浆
配置变量
才能正常工作。grout
变量是一个配置字典
应用程序的指令。'srid'
是grout
字典中唯一需要的键。'srid'
是一个整数
对应于空间引用
标识符
水泥浆应该用来储存几何形状。4326
是最常见的srid,并且
是项目的良好默认值。# settings.py# The projection for geometries stored in Grout.GROUT={'SRID':4326}
更多示例
非Django应用程序
概念
数据模型
版本化模式
版本
属性。cat
recordtype。recordschema可能如下所示:
{"version":1,"next_version":null,"schema":{"type":"object","title":"Initial Schema","$schema":"http://json-schema.org/draft-04/schema#","properties":{"catDetails":{"$ref":"#/definitions/driverPosterDetails"},"definitions":{"catDetails":{"type":"object","title":"Cat Details","properties":{"Name":{"type":"string","fieldType":"text","isSearchable":true,"propertyOrder":1},"Age":{"type":"integer","fieldType":"integer","minimum":0,"maximum":100,"isSearchable":true,"propertyOrder":2},"Color":{"type":"string","fieldType":"text","isSearchable":true,"propertyOrder":3},"Breed":{"type":"select","fieldType":"selectlist","enum":["Tabby","Bobtail","Abyssinian"],"isSearchable":true,"propertyOrder":4}}}}}}
版本是
1
)下一个版本是
空的
)
模式上的jsonschema对象
属性
catdetails
属性命名,该属性
我们有时称之为表单或相关内容
年龄
字段更改为出生日期
字段。而不是
直接更改架构,我们将创建一个新架构。灌浆将自动
为此更新的架构设置版本:2
和下一个版本:null
:{"version":2,"next_version":null,"schema":{"type":"object","title":"Initial Schema","$schema":"http://json-schema.org/draft-04/schema#","properties":{"catDetails":{"$ref":"#/definitions/driverPosterDetails"},"definitions":{"catDetails":{"type":"object","title":"Cat Details","properties":{"Name":{"type":"string","fieldType":"text","isSearchable":true,"propertyOrder":1},"Age":{"type":"integer","fieldType":"integer","minimum":0,"maximum":100,"isSearchable":true,"propertyOrder":2},"Date of Birth":{"type":"string","format":"datetime","fieldType":"text","isSearchable":true,"propertyOrder":3},"Color":{"type":"string","fieldType":"text","isSearchable":true,"propertyOrder":4},"Breed":{"type":"select","fieldType":"selectlist","enum":["Tabby","Bobtail","Abyssinian"],"isSearchable":true,"propertyOrder":5}}}}}}}
下一个版本:2
:{
"version": 1,
"next_version": 2,
"schema": {
...
}
}
cat
recordtype中搜索记录时,grout可以找到
通过查找recordschema的最新模式,其中下一个版本:null
。
这将保留对recordschema的完整审计跟踪,允许我们
检查模式随时间的变化。models.py
文件
库API文档
请求和响应格式
get
请求用于检索对象,post
请求用于创建新对象,而patch
请求用于更新
现有对象。几乎在所有情况下都遵循这种模式;任何例外
将在文档中注明。get
请求的查询参数配置端点行为,
而post
请求需要json格式的有效负载。分页
$ pip install grout
0
next
和previous
字段的域和端口
将是响应请求的服务器。资源
< H4>订单类型/api/recordtypes/
/api/recordtypes/{uuid}/
活动
:布尔值
活动的
值为true的记录类型。
通常,您会希望将自己限制为活动记录类型。
< /广告><正文>字段名 键入 说明
uuid
Uuid 此记录类型的唯一标识符。 当前模式
Uuid 此记录类型的最新记录架构。 已创建
时间戳 创建此记录类型的日期和时间。 已修改
时间戳 上次修改此记录类型的日期和时间。 标签
字符串 此记录类型的名称。 复数标签
字符串 此记录类型名称的复数形式。 说明
字符串 此记录类型的简短说明。 激活
布尔型 此记录类型是否处于活动状态。此字段允许停用而不是删除记录类型。 几何类型
字符串 此记录类型的记录支持的几何类型。 点
,多边形
,多多边形
,线串
或无
暂时的
布尔型 此记录类型的记录是否应将日期时间数据存储在 发生于
和
发生于
字段中。
记录模式
/api/recordschemas/
/api/recordschemas/{uuid}/
< /广告><正文>字段名 键入 说明
uuid
Uuid 此记录架构的唯一标识符。 已创建
时间戳 创建此记录架构的日期和时间。 已修改
时间戳 上次修改此记录架构的日期和时间。 版本
整数 一个序列号,指示记录类型的架构的版本。从1开始。 下一个版本
Uuid 具有此架构的记录类型的下一个最高版本号的记录架构的唯一标识符。如果这是模式的最新版本,则此字段将为 null
录制类型
Uuid 此记录架构引用的记录类型的唯一标识符。 模式 对象 ajsonschema应该验证引用此记录架构的记录的对象。 记录
/api/records/
/api/records/{uuid}/
已存档
:布尔型true
(区分大小写)传递到此参数以返回存档
仅记录,并通过false
(区分大小写)仅返回当前记录。
省略此参数将返回两种类型。仅限详细信息
:布尔型<;记录类型>;详细信息
用于包含有关记录的基本信息摘要的窗体。
将true
(区分大小写)传递给此参数将忽略任何其他
可能存在于记录中的表格。这对限制大小很有用
当只需要摘要视图时返回的有效负载。记录类型
:uuidjsonb
:对象{"accidentdetails":{"main+cause":{"rule-type":"containment","contains":["vehicle+defect","road+defect"],["vehicle+defect"]},"num+driver+accountants":{"rule-type":"intrange","min":1,"max":3}}}}
。此查询定义以下两个筛选器:
意外详情->;"主要原因"="车辆缺陷"或意外详情->;"主要原因"="道路缺陷"
意外事故详情->;"驾驶员伤亡人数">;=1和意外事故详情->;"驾驶员伤亡人数"<;=3
containment\u multiple
。
当搜索一条记录中可以有多个表单时,使用此选项。
下面是一个例子:
{"person":{"injury":{"rule_type":"containment_multiple","contains":["fatal"]}}}
发生的最小值
:时间戳已发生的最大值
:时间戳多边形id
:uuid多边形
:geojson < /广告><正文>字段名 键入 说明
uuid
Uuid 此记录的唯一标识符。 已创建
时间戳 创建此记录的日期和时间。 已修改
时间戳 上次修改此记录的日期和时间。 发生于
时间戳 最早出现这种情况的时间R.E.T/T> 发生在
时间戳 此记录可能发生的最晚时间。请注意,此字段对于临时记录是必需的:如果某个记录只在某一时刻发生,则 发生于
字段和
发生于
字段将具有相同的值。
geom
GeoJSON 表示与此记录关联的位置的几何图形。 位置文本
字符串 记录发生位置的描述,通常是地址。 已存档
布尔型 一种在不完全删除记录的情况下隐藏记录的方法。 true
表示记录已存档。模式 Uuid 引用用于创建此记录的记录架构。 数据
对象 表示与此记录关联的灵活数据字段的json对象。存储在 数据中的对象始终符合
模式所引用的recordschema
uuid。边界
/api/bounders/
/api/bounders/{uuid}/
< /广告><正文>字段名 键入 说明
uuid
Uuid 此边界的唯一标识符。 已创建
时间戳 创建此边界的日期和时间。 已修改
时间戳 上次修改此边界的日期和时间。 标签
字符串 此边界的标签,用于显示。 颜色
字符串 用于渲染此边界的颜色首选项。 显示字段
字符串 要用于显示的导入形状文件的哪个字段。 数据字段
数组 导入的shapefile中包含的字段的名称列表。 错误
数组 导入形状文件时可能出现的错误列表。 状态
字符串 形状文件的导入状态。 源文件
字符串 最初用于生成此边界的shapefile的uri。 post
到/api/bounders/
并附加一个压缩的shapefile;您将需要
将标签包含为表单数据。你应该收到201的回复
包含完全成熟的边界对象,包括可用的
数据字段中的数据字段
数据字段中的一个字段并进行
修补程序
/api/boundaries/{uuid}/
在显示字段中使用该值。
您现在可以使用此边界及其关联的边界多边形。
边界多边形
名单:< Code>/api/boundarypolygons/
/api/boundarypolygons/{uuid}/
边界
:uuidnogeom
:布尔型 < /广告><正文>字段名 键入 说明
uuid
Uuid 此边界多边形的唯一标识符。 已创建
时间戳 创建此边界多边形的日期和时间。 已修改
时间戳 上次修改此边界多边形的日期和时间。 数据
对象 此对象中的每个键将对应于父边界中的一个 数据字段
,并将存储此多边形的该字段的值。
边界
Uuid 此边界多边形的父边界的唯一标识符。 bbox
数组 包含此多边形几何体的最小边界框,作为纬度/经度点的数组。此字段是可选的--有关详细信息,请参见上面的 nogeom
参数。几何体
GeoJSON 此多边形的GeoJSON表示。此字段是可选的--有关详细信息,请参见上面的 nogeom
参数。开发
要求
安装
$ pip install grout
1
更新
脚本以设置开发环境。
$ pip install grout
2
运行测试
脚本/test
脚本
运行灌浆单元测试套件。$ pip install grout
3
$ pip install grout
4
tox.ini中的
envlist
指令
文件清理
clean
脚本:$ pip install grout
5
clean
将删除所有悬挂的图像、停止的容器和
机器上未使用的卷。如果你不想移除这些文物,
查看clean
脚本并仅运行
使您感兴趣。进行迁移
grout/models.py
中编辑数据模型,则需要创建一个新的
应用程序的迁移。您可以使用django管理脚本中的脚本
自动生成迁移的目录:
$ pip install grout
6
$ pip install grout
7
资源
灌浆套件
历史文献
路线图
推荐PyPI第三方库