با نام خدا و سلام، امروز قصد دارم آموزش استفاده از لوکیشن و گرفتن مکان با استفاده از نقشه در 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 را می تونید اینجا ببینید.
ارسال پاسخ