ここのことはなかったことにするかもしれない

仕事がらみの記事を主として扱いますが、あくまで個人ブログです。2013年以前の記事は https://yellow-73.hatenablog.com/ にあります。

GeoDJangoに挑戦中 #3 JSONを吐くまで

参考URL

https://homata.gitbook.io/geodjango/geodjango/tutorial#restful-apino

モジュール追加

portsに無いのでpipから入れる。

pip install djangorestframework
pip install djangorestframework-gis
pip install django-filter
pip install markdown

これらを(プロジェクト名)/settings.py に登録します。

INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework_gis',
    'django_filters', 
  ...
]

アプリの登録(やってない場合)

APPSに登録

(プロジェクト名)/settings.py

INSTALLED_APPS = [
    ...
    (アプリ名),
    ...
]

(プロジェクト名)/urls.py から (アプリ名)/urls.py に引き継ぐ

(プロジェクト名)/urls.py

urlpatterns = [
    ...
    url(r'^(アプリ名)/', include('(アプリ名).urls')),
    ...
]

リアライザの作成

(アプリ名)/serializers.py

from rest_framework import serializers
from .models import FieldPolygon

class FieldPolygonSerializer(serializers.ModelSerializer):
    class Meta:
        model = FieldPolygon
        # fields = ('__all__')
        fields = ('gid', 'name', 'geom')

(アプリ名)/views.py

from rest_framework import viewsets
from rest_framework_gis.filters import DistanceToPointFilter, InBBoxFilter
from rest_framework.pagination import PageNumberPagination

from .serializers import FieldPolygonSerializer
from .models import FieldPolygon

class MyPagination(PageNumberPagination):
    page_size_query_param = 'page_size'

class FieldPolygonViewSet(viewsets.ModelViewSet):
    queryset = FieldPolygon.objects.all()
    serializer_class = FieldPolygonSerializer
    pagination_class = MyPagination
    filter_backends = (DistanceToPointFilter,)
    distance_filter_field = 'geom'
    distance_filter_convert_meters = True

http://.../(アプリ名)/json からリストを見れるようにする

(アプリ名)/urls.py

rom django.urls import path, include
from rest_framework.routers import DefaultRouter

from .views import FieldPolygonViewSet

router = DefaultRouter()
router.register('fieldpolygon', FieldPolygonViewSet)

urlpatterns = [
    path('json/', include(router.urls)),
]

ブラウザで見る ただし WKT で出る

http://(ホスト名):(ポート)/(アプリ名)/json でアクセスすると、HTMLベースでビュー一覧を表示してくれます。 http://(ホスト名):(ポート)/(アプリ名)/json/(ビュー名)で、ビューの中身を表示してくれます。

ただし、GeoJSONではなく、geomWKTで出ました。