UNKNOWN
Project description
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?
Add the param unit=DESIRED_UNIT to your DistanceField, make sure you use a django supported 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
Release history Release notifications | RSS feed
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
- Download URL: djangorestframework-gis-distance-1.0.0.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e2c9f643b02d0c43407cbb2b4a6f5f140a30fe61d1baa407deddfefa30926798 |
|
MD5 | 083063c4816ceb782df1c7a4f61cb5d5 |
|
BLAKE2b-256 | 5483496719d20ec65ae1b4c4e6dcc72c13ef6683ec7036d2573f16fc6073d277 |