Background
بازگشت به بلاگ

تقسیمات کشوری، جستجوی شهر و روستا، تبدیل مختصات و ژئوفنس

۱۴۰۵/۷/۱۷
تیم ژئوتاژک
تقسیمات کشوری، جستجوی شهر و روستا، تبدیل مختصات و ژئوفنس

پنج سرویس پایه که تقریبا هر سامانه مکانی به آن‌ها نیاز دارد:

سرویسآدرسجواب می‌دهد
تقسیمات کشوری یک نقطهGET /api/geo/admin/lookupاستان، شهرستان، بخش، شهر یا روستا و محله
جستجوی شهر و روستاGET /api/geo/places/searchسکونتگاه‌ها با نام، همراه با شهرستان، استان و مختصات
سکونتگاه‌های یک محدودهGET /api/geo/places/in-areaهمه شهرها و روستاهای یک شهرستان، استان یا کادر
تبدیل مختصاتGET /api/geo/convert/coordinatesدرجه اعشاری، DMS، UTM و MGRS
ژئوفنسPOST /api/geo/geofenceهر نقطه داخل کدام محدوده شماست

برای دریافت توکن، با خرید بسته ژئوکوین کیف پول را شارژ کنید و در توکن‌های API توکن بسازید. هزینه هر درخواست موفق از اعتبار همان توکن کم می‌شود (قیمت هر سرویس در صفحه سرویس‌ها).

۱. تقسیمات کشوری یک نقطه

curl -G "https://cloud.geotajak.ir/api/geo/admin/lookup" \
  --data-urlencode "lat=35.6997" \
  --data-urlencode "lon=51.3380" \
  -H "Authorization: Bearer YOUR_TOKEN"
{
  "summary": "این نقطه در استان تهران، شهرستان تهران، بخش مرکزی شهرستان تهران، شهر تهران، منطقه ۹ شهر تهران، محله استاد معین قرار دارد.",
  "province": "استان تهران", "county": "شهرستان تهران", "district": "بخش مرکزی شهرستان تهران", "city": "تهران",
  "urban_district": "منطقه ۹ شهر تهران", "neighbourhood": "استاد معین", "province_code": "IR-23", "postcode": "14586-43635"
}

سطح‌ها: province، county، district (بخش)، rural_district (دهستان)، city، village، urban_district، neighbourhood. هر سطح فقط وقتی هست که در نقشه ثبت شده باشد.

۲. جستجوی شهر و روستا

curl -G "https://cloud.geotajak.ir/api/geo/places/search" \
  --data-urlencode "q=ابرکوه" \
  --data-urlencode "limit=5" \
  -H "Authorization: Bearer YOUR_TOKEN"

هر نتیجه نام، نوع (شهر، شهر کوچک، روستا)، شهرستان، استان، مختصات و در صورت ثبت، جمعیت را دارد. kind: settlement (پیش‌فرض)، city، state.

۳. سکونتگاه‌های یک محدوده

curl -G "https://cloud.geotajak.ir/api/geo/places/in-area" \
  --data-urlencode "place=شهرستان ابرکوه" \
  --data-urlencode "kinds=city,town,village" \
  -H "Authorization: Bearer YOUR_TOKEN"
{
  "summary": "ایران، استان یزد، شهرستان ابرکوه: 2 شهر کوچک، 30 روستا.", "count": 32, "by_type": {"city": 0, "town": 2, "village": 30},
  "settlements": [{"name": "ابرکوه", "type": "town", "type_fa": "شهر کوچک", "lat": 31.1287, "lon": 53.2825, "osm_population": 27524}]
}

به‌جای place می‌توانید bbox=west,south,east,north بدهید. kinds می‌تواند hamlet (آبادی) هم داشته باشد.

۴. تبدیل مختصات

curl -G "https://cloud.geotajak.ir/api/geo/convert/coordinates" \
  --data-urlencode "lat=35.6892" \
  --data-urlencode "lon=51.3890" \
  -H "Authorization: Bearer YOUR_TOKEN"
{
  "lat": 35.6892, "lon": 51.389, "dms": "35°41'21.12\"N 51°23'20.40\"E",
  "utm": {"zone": 39, "band": "S", "easting": 535196.78, "northing": 3949546.79, "text": "39S 535197 3949547"},
  "mgrs": "39SWV3519649546", "datum": "WGS84"
}

دقیقا یکی از ورودی‌ها را بدهید: lat و lon، یا utm (مثل 39S 535197 3949547)، یا mgrs، یا dms.

۵. ژئوفنس

curl -X POST "https://cloud.geotajak.ir/api/geo/geofence" \
  -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
  -d '{"points": [[35.71, 51.39], [35.0, 51.0]], "polygons": [{"name": "منطقه ۱", "polygon": [[35.70, 51.38], [35.70, 51.40], [35.72, 51.40], [35.72, 51.38]]}]}'

تا ۵۰۰۰ نقطه و ۵۰ محدوده در یک درخواست. برای هر نقطه فهرست محدوده‌هایی که داخل آن است (inside) و برای هر محدوده تعداد نقاط داخلش برمی‌گردد. کاربرد: ناوگان، توزیع، کنترل حضور در محدوده.

منبع و دقت داده

تقسیمات و سکونتگاه‌ها از OpenStreetMap است: تا سطح شهرستان کامل است، ولی بخش و دهستان و روستاهای ثبت‌نشده در نقشه ممکن است نباشند و مرزها با تقسیمات رسمی وزارت کشور تفاوت جزئی داشته باشد.

نمایش آماده در سایت (بدون کدنویسی)

اگر به آدرس همین سرویس‌ها ui=true اضافه کنید، به‌جای JSON یک صفحه آماده (نقشه، نمودار و جدول نتیجه) برمی‌گردد که در <iframe> سایت شما قرار می‌گیرد و با رنگ‌های توکن شما ساخته می‌شود. جزئیات در راهنمای شروع و نمونه زنده در «آزمایشگاه سرویس» صفحه هر سرویس.

APIتقسیمات کشوریروستاUTMMGRSژئوفنس