Skip to main content

UNKNOWN

Project description

Build Status

Django-Rest-Framework-Gis-Distance

This is a extension to Django-Rest-Framework-Gis that adds sorting and distance distance to the DistanceToPointerFilter.

Requirements

  • Python 2.7

  • Django 1.7+

  • Django-Rest-Framework-Gis 0.10+

Installation

Install the library with pip:

$ pip install djangorestframework-gis-distance

Quick Setup

Make sure rest_framework_gis_distance is added to your INSTALLED_APPS, after rest_framework and restframework_gis.

INSTALLED_APPS = (
    # ...

    'rest_framework',
    'rest_framework_gis',
    'rest_framework_gis_distance',
)

Usage

Regular implementation

First include DistanceField in your serializer.

from restframework_gis_distance.fields import DistanceField

class RecordSerializer(serializers.ModelSerializer):
    distance = DistanceField(unit='m')

    class Meta:
        model = Record
        fields = ('location', 'title', 'created', 'distance')

Then use the filter OrderedDistanceToPointFilter in your view.

from restframework_gis_distance.filters import OrderedDistanceToPointFilter

class RecordListView(mixins.ListModelMixin, generics.GenericAPIView):
    permission_classes = (AllowAny,)
    serializer_class = RecordSerializer
    queryset = Record.objects.all()
    filter_backends = (OrderedDistanceToPointFilter,)
    distance_filter_field = 'location'
    distance_filter_convert_meters = True
    distance_filter_add_distance = True

After this, set up your urls as usual and call your endpoint like this: example.com/api/endpoint/?dist=1000&point=long,lat

Optional field

Using distance as a optional field (for the cases when you only want to display distance when geo coordinates is supplied)

Instead of declaring a straight DistanceField, wrap the DistanceField as a SerializerMethodField, like this:

from restframework_gis_distance.filters import OrderedDistanceToPointFilter

class RecordOptionalSerializer(serializers.ModelSerializer):
    distance = serializers.SerializerMethodField()

    class Meta:
        model = Record
        fields = ('location', 'title', 'created', 'distance')

    def get_distance(self, obj):
        distance = getattr(obj, "distance", None)
        return DistanceField(unit='m').to_representation(distance)

Options

These belong in your DRF view:

  • distance_filter_field: Target geo filtering field (inherited from DistanceToPointerFilter).

  • distance_srid: (Optional) The srid you want to use on your distance. (Default 4326)

  • distance_sort_order: (Optional) Indicates the sort order, closest (True) or farthest (False). (Default: True)

Questions

  • How do I change distance unit?

Tests

This library include tests, just run python runtests.py.

Contributing

Want to contribute? Awesome. Just send a pull request.

License

Django-Rest-Framework-Gis-Distance is released under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

File details

Details for the file djangorestframework-gis-distance-1.0.0.tar.gz.

File metadata

File hashes

Hashes for djangorestframework-gis-distance-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e2c9f643b02d0c43407cbb2b4a6f5f140a30fe61d1baa407deddfefa30926798
MD5 083063c4816ceb782df1c7a4f61cb5d5
BLAKE2b-256 5483496719d20ec65ae1b4c4e6dcc72c13ef6683ec7036d2573f16fc6073d277

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page