استفاده از لوکیشن – Location در دیجنگو – django

استفاده از لوکیشن در دیجنگو مدل

با نام خدا و سلام، امروز قصد دارم آموزش استفاده از لوکیشن و گرفتن مکان با استفاده از نقشه در django را آموزش بدم. چیزی که در این مطلب بدنبالش هستیم میشه مثل تصویر ذیل :

استفاده از لوکیشن و گرفتن اوکیشن در django

خب قدم اول، برای استفاده از لوکیشن در این پروژه از ماژول django-location-field استفاده کردم. برای آشنایی بیشتر با ماژول فیلد-اوکیشن-در-دیجنگو یه سر به اینجا بزنید. همچنین در سایت pypi.org نیز موجود هست.

نصب  django-location-field :

برای نصب کافیست از دستور زیر استفاده کنید:

pip install django-location-field

کانفیگ کردن:

پس از نصب، نوبت به کانفیگ کردن  django-location-field می رسد، برای این منظور ابتدا خط زیر را به INSTALLED_APPS در settings.py اضافه کنید :

location_field.apps.DefaultConfig

INSTALLED_APPS به صورت زیر می شود (به خط آخر INSTALLED_APPS توجه کنید):

استفاده از اوکیشن در دیجنگو

من برای نقشه از OpenStreetMap استفاده کردم که به صورت رایگان سرویس میده و زبان فارسی و نقشه کاملی از ایران دارد.

با استفاده از ماژول django-location-field امکان استفاده از provider های Google و MapBox نیز وجود داره (فقط چند خط تنظیمات زیر تغییر میکنه و برای گوگل به api هم نیاز دارید).

برای تنظیمات OpenStreetMap کافیست خطوط زیر را به settings.py اضافه کنید :

LOCATION_FIELD = {
    'provider.openstreetmap.max_zoom': 18,
}

همانطور که ملاحظه می کنید، فقط یک تنظیم داره و اون هم حداکثر مقدار زوم روی نقشه می باشد.

افزودن فیلد لوکیشن به مدل:

برای تعریف فیلد در مدل به تکه کد زیر یه نگاه بندازید که همه چیز واضحه (البته کد زیر برای دیتابیس های اسپشیال کاربرد داره – spatial databases):

    location = LocationField(based_fields=['city'],
                             zoom=5,
                             default=Point(
                                 51.337437873953604,
                                 35.699794814315574
                                 ))
استفاده از فیلد لوکیشن در مدل دیجنگو

من از PostGIS استفاده می کردم و در نتیجه از کد بالایی استفاده کردم،

  • zoom: مقدار پیشفرض زوم برای نقشه را مشخص می کند.
  • based_fields : فیلدی هست که از آن برای بدست آوردن مکان استفاده می شود.
  • default=Point : نقطه پیش فرض نمایش روی نقشه را مشخص می کند.

برای دیتابیس های غیر اسپشیال – non-spatial databases همانند نمونه زیر کد بزنید:

from django import forms
from location_field.forms.plain import PlainLocationField

class Address(forms.Form):
    city = forms.CharField()
    location = PlainLocationField(based_fields=['city'],
                                  initial='-22.2876834,-49.1607606')

نکته آخر: تنظیمات پیش فرض django-location-field به صورت زیر است :

LOCATION_FIELD_PATH = settings.STATIC_URL + 'location_field'
LOCATION_FIELD = {
'map.provider': 'google',
'map.zoom': 13,
'search.provider': 'google',
'search.suffix': '',
# Google
'provider.google.api': '//maps.google.com/maps/api/js?sensor=false',
'provider.google.api_key': '',
'provider.google.api_libraries': '',
'provider.google.map.type': 'ROADMAP',
# Mapbox
'provider.mapbox.access_token': '',
'provider.mapbox.max_zoom': 18,
'provider.mapbox.id': 'mapbox.streets',
# OpenStreetMap
'provider.openstreetmap.max_zoom': 18,
# misc
'resources.root_path': LOCATION_FIELD_PATH,
'resources.media': {
'js': (
LOCATION_FIELD_PATH + '/js/jquery.livequery.js',
LOCATION_FIELD_PATH + '/js/form.js',
),
},
}

همچنین اسناد خود django-location-field را می تونید اینجا ببینید.