Terralego/django-geostore

View on GitHub
doc/use.rst

Summary

Maintainability
Test Coverage
###########
QUICK START
###########

*************
Manage layers
*************

The simplest way to create a geographic data layer :

.. code-block:: python

  from geostore import GeometryTypes
  from geostore.models import Layer

  layer = Layer.objects.create(name='Mushroom spot',
                               geom_type=GeometryTypes.Point)


Geometry type validation
========================

Layer support these geometry types :

Supported types
---------------

geostore.GeometryTypes

GeometryCollection = 7
LineString = 1
MultiLineString = 5
MultiPoint = 4
MultiPolygon = 6
Point = 0
Polygon = 3

Define a geometry type to layer to force feature geometry validation.

Without validation
-------------------

.. code-block:: python

  from geostore.models import Layer, Feature
  from geostore import GeometryTypes
  from django.contrib.geos.geometries import GEOSGeometry

  layer = Layer.objects.create(name='Mushroom spot 2')
  feature = Feature(layer=layer,
                    geom=GEOSGeometry("POINT(0 0)")
  feature.clean()  # ok
  # then, you can save
  feature.save()
  feature = Feature(layer=layer,
                    geom=GEOSGeometry("LINESTRING((0 0), (1 1))")

  feature.clean()  # ok too
  feature.save()

With validation
---------------

.. code-block:: python

  from geostore.models import Layer, Feature
  from geostore import GeometryTypes
  from django.contrib.geos.geometries import GEOSGeometry

  layer = Layer.objects.create(name='Mushroom spot 3',
                               geom_type=GeometryTypes.Point)
  feature = Feature(layer=layer,
                    geom=GEOSGeometry("POINT(0 0)")

  feature.clean()  # ok
  feature.save()
  feature = Feature(layer=layer,
                    geom=GEOSGeometry("LINESTRING((0 0), (1 1))")
  feature.clean()  # validation error !


JSON schema definition / validation
===================================

You can use json schema definition to describe your data content, and improve feature properties validation.

https://json-schema.org/
https://rjsf-team.github.io/react-jsonschema-form/


.. code-block:: python

  from geostore.models import Layer, Feature
  from geostore import GeometryTypes
  from django.contrib.geos.geometries import GEOSGeometry

  layer = Layer.objects.create(name='Mushroom spot 4',
                               geom_type=GeometryTypes.Point,
                               schema={
                                 "required": ["name", "age"],
                                 "properties": {
                                   "name": {
                                     "type": "string",
                                     "title": "Name"
                                   },
                                   "age": {
                                     "type": "integer",
                                     "title": "Age"
                                   }
                                 }
                               })
  feature = Feature(layer=layer,
                    geom=GEOSGeometry("POINT(0 0)")
  feature.clean()  # Validation Error ! name and age are required

  feature = Feature(layer=layer,
                    geom=GEOSGeometry("POINT(0 0)",
                    properties={
                        "name": "Arthur",
                    })
  feature.clean()  # Validation Error ! age is required

  feature = Feature(layer=layer,
                    geom=GEOSGeometry("POINT(0 0)",
                    properties={
                      "name": "Arthur",
                      "age": "ten",
                    })
  feature.clean()  # Validation Error ! age should be integer

  feature = Feature(layer=layer,
                    geom=GEOSGeometry("POINT(0 0)",
                    properties={
                      "name": "Arthur",
                      "age": 10
                    })
  feature.clean()  # ok !
  feature.save()


Vector tiles
============

geostore provide endpoint to generate and cache MVT based on your data.

You can access these tiles through Layer and LayerGroup features.


On layers
---------


On group of layers
------------------


Relations
=========

* You can define relations between layers (and linked features)

.. warning::
    Compute relations need celery project and worker configured in your project.
    Run at least 1 worker.
    You need to fix settings explicitly to enable asynchronous tasks.
    GEOSTORE_RELATION_CELERY_ASYNC = True

Manual relation
---------------

No automatic links between features. You need to create yourself FeatureRelation between Features.

Automatic relations
-------------------

If any celery project worker is available, and GEOSTORE_RELATION_CELERY_ASYNC settings set to True,
each layer relation creation or feature edition will launch async task to update relation between linked features.

Intersects
**********

By selecting intersects, each feature in origin layer intersecting geometry features in destination layer, will be linked to them.

Distance
**********

By selecting distance, each feature in origin layer with distance max geometry features in destination layer, will be linked to them.

.. warning::
    You need to define distance in settings:
    {"distance": 10000}  # for 10km

Data import
===========

ShapeFile
---------

GeoJSON
-------


Data export
===========

API endpoints
=============