Spatial Input

Last Updated: September 30, 2016

Spatial Input Page UrlMap

Add a new UrlMap to the url_maps method of the app.py module:

UrlMap(name='draw',
       url='geoserver-app/draw',
       controller='geoserver_app.controllers.draw'),

Spatial Input Controller

Add a new controller to the controller.py module:

@login_required
def draw(request):

    user = request.user
    drawing_options = MVDraw(
        controls=['Modify', 'Move', 'Point',
                  'LineString', 'Polygon', 'Box'],
        initial='Polygon'
    )

    map_options = MapView(height='450px',
                          width='100%',
                          layers=[],
                          draw=drawing_options)

    geometry = ''

    if request.POST and 'geometry' in request.POST:
        geometry = request.POST['geometry']

    context = {'map_options': map_options,
               'geometry': geometry}

    return render(request, 'geoserver_app/draw.html', context)

Spatial Input Template

Create a new draw.html template in your template directory and add the following contents:

{% extends "geoserver_app/base.html" %}
{% load tethys_gizmos %}

{% block app_content %}
    <h1>Draw on the Map</h1>

    {% if geometry %}
        <p>{{ geometry }}</p>
    {% endif %}

    <form action="" method="post">
        {% csrf_token %}
        {% gizmo map_view map_options %}
        <input name="submit" type="submit">
    </form>
{% endblock %}

Test Spatial Input Page

Navigate to the spatial input page using the “Draw” link in your navigation (http://localhost:8000/apps/geoserver-app/draw/). Use the drawing controls to add features to the map, then press the submit button. The GeoJSON encoded spatial data should be displayed when the page refreshes.