تبدیل آدرس به نقطه
با این سرویس میتوانید یک آدرس متنی را به نقطهای روی نقشه تبدیل کنید؛ مثلاً آدرس واردشده در فرم سفارش را به مختصات قابل ذخیره تبدیل کنید.
برای ارسال درخواست از سرور، یک کلید خصوصی با دسترسی این سرویس بسازید.
موارد استفاده
بخش «موارد استفاده»- تبدیل آدرس واردشده توسط کاربر به مختصات قابل ذخیره.
- پیشنهاد چند گزینه برای آدرسهای مبهم.
- اولویتبندی نتایج با توجه به موقعیت کاربر یا محدوده نقشه.
برای تفاوت موقعیت کاربر و مرکز نقشه، نمودار زمینهٔ مکانی جستجو را ببینید.
دریافت مختصات از آدرس
بخش «دریافت مختصات از آدرس»GET https://search.services.balad.ir/v5/geocoding/
آدرس یا نام مکان را به گزینههای مکانی تبدیل میکند. پارامترهای مکانی برای رفع ابهاماند؛ مثلاً «خیابان آزادی» در چند شهر وجود دارد و مرکز منطقهٔ موردنظر به انتخاب نتیجه کمک میکند. این پارامترها فیلتر قطعی محدوده نیستند. اگر نام شهر از متن تشخیص داده شود، همان شهر بر موقعیت ارسالی اولویت دارد.
تبدیل آدرس به مختصات
بخش «تبدیل آدرس به مختصات»curl --get "https://search.services.balad.ir/v5/geocoding/" \ --data-urlencode "text=تهران میدان آزادی" \ -H "Authorization: Bearer <BALAD_API_KEY>"# Install: pip install httpximport httpx
url = "https://search.services.balad.ir/v5/geocoding/"params = { "text": "تهران میدان آزادی",}response = httpx.get( url, params=params, headers={"Authorization": "Bearer <BALAD_API_KEY>"}, timeout=10.0,)response.raise_for_status()print(response.text)package main
import ( "fmt" "io" "net/http" "net/url" "os")
func main() { endpoint, err := url.Parse("https://search.services.balad.ir/v5/geocoding/") if err != nil { panic(err) } query := endpoint.Query() query.Set("text", "تهران میدان آزادی") endpoint.RawQuery = query.Encode() request, err := http.NewRequest("GET", endpoint.String(), nil) if err != nil { panic(err) } request.Header.Set("Authorization", "Bearer <BALAD_API_KEY>") response, err := http.DefaultClient.Do(request) if err != nil { panic(err) } defer response.Body.Close() if response.StatusCode < 200 || response.StatusCode >= 300 { panic(fmt.Sprintf("HTTP %d", response.StatusCode)) } if _, err := io.Copy(os.Stdout, response.Body); err != nil { panic(err) }}$url = "https://search.services.balad.ir/v5/geocoding/"$params = @{ text = "تهران میدان آزادی"}$query = ($params.GetEnumerator() | ForEach-Object { [uri]::EscapeDataString([string]$_.Key) + "=" + [uri]::EscapeDataString([string]$_.Value)}) -join "&"$url += "?" + $query$headers = @{ Authorization = "Bearer <BALAD_API_KEY>" }Invoke-RestMethod -Uri $url -Headers $headers<?php// Install: composer require guzzlehttp/guzzlerequire __DIR__ . "/vendor/autoload.php";
$client = new \GuzzleHttp\Client();$response = $client->get("https://search.services.balad.ir/v5/geocoding/", [ "headers" => ["Authorization" => "Bearer <BALAD_API_KEY>"], "query" => [ "text" => "تهران میدان آزادی", ], "timeout" => 10,]);echo $response->getBody();// Node.js 18+async function main() { const url = new URL("https://search.services.balad.ir/v5/geocoding/"); const params = { text: "تهران میدان آزادی", }; url.search = new URLSearchParams(params).toString(); const response = await fetch(url, { headers: { Authorization: "Bearer <BALAD_API_KEY>" }, }); if (!response.ok) throw new Error("HTTP " + response.status); console.log(await response.text());}
main().catch((error) => { console.error(error); process.exitCode = 1;});رفع ابهام آدرس با مرکز منطقهٔ موردنظر
بخش «رفع ابهام آدرس با مرکز منطقهٔ موردنظر»curl --get "https://search.services.balad.ir/v5/geocoding/" \ --data-urlencode "text=خیابان آزادی" \ --data-urlencode "camera=51.3890,35.6892" \ -H "Authorization: Bearer <BALAD_API_KEY>"# Install: pip install httpximport httpx
url = "https://search.services.balad.ir/v5/geocoding/"params = { "text": "خیابان آزادی", "camera": "51.3890,35.6892",}response = httpx.get( url, params=params, headers={"Authorization": "Bearer <BALAD_API_KEY>"}, timeout=10.0,)response.raise_for_status()print(response.text)package main
import ( "fmt" "io" "net/http" "net/url" "os")
func main() { endpoint, err := url.Parse("https://search.services.balad.ir/v5/geocoding/") if err != nil { panic(err) } query := endpoint.Query() query.Set("text", "خیابان آزادی") query.Set("camera", "51.3890,35.6892") endpoint.RawQuery = query.Encode() request, err := http.NewRequest("GET", endpoint.String(), nil) if err != nil { panic(err) } request.Header.Set("Authorization", "Bearer <BALAD_API_KEY>") response, err := http.DefaultClient.Do(request) if err != nil { panic(err) } defer response.Body.Close() if response.StatusCode < 200 || response.StatusCode >= 300 { panic(fmt.Sprintf("HTTP %d", response.StatusCode)) } if _, err := io.Copy(os.Stdout, response.Body); err != nil { panic(err) }}$url = "https://search.services.balad.ir/v5/geocoding/"$params = @{ text = "خیابان آزادی" camera = "51.3890,35.6892"}$query = ($params.GetEnumerator() | ForEach-Object { [uri]::EscapeDataString([string]$_.Key) + "=" + [uri]::EscapeDataString([string]$_.Value)}) -join "&"$url += "?" + $query$headers = @{ Authorization = "Bearer <BALAD_API_KEY>" }Invoke-RestMethod -Uri $url -Headers $headers<?php// Install: composer require guzzlehttp/guzzlerequire __DIR__ . "/vendor/autoload.php";
$client = new \GuzzleHttp\Client();$response = $client->get("https://search.services.balad.ir/v5/geocoding/", [ "headers" => ["Authorization" => "Bearer <BALAD_API_KEY>"], "query" => [ "text" => "خیابان آزادی", "camera" => "51.3890,35.6892", ], "timeout" => 10,]);echo $response->getBody();// Node.js 18+async function main() { const url = new URL("https://search.services.balad.ir/v5/geocoding/"); const params = { text: "خیابان آزادی", camera: "51.3890,35.6892", }; url.search = new URLSearchParams(params).toString(); const response = await fetch(url, { headers: { Authorization: "Bearer <BALAD_API_KEY>" }, }); if (!response.ok) throw new Error("HTTP " + response.status); console.log(await response.text());}
main().catch((error) => { console.error(error); process.exitCode = 1;});ارسال موقعیت کاربر و نمای فعلی نقشه
بخش «ارسال موقعیت کاربر و نمای فعلی نقشه»curl --get "https://search.services.balad.ir/v5/geocoding/" \ --data-urlencode "text=خیابان آزادی" \ --data-urlencode "location=51.3890,35.6892" \ --data-urlencode "camera=51.40,35.725" \ --data-urlencode "sw=51.30,35.65" \ --data-urlencode "ne=51.50,35.80" \ --data-urlencode "zoom=14.5" \ -H "Authorization: Bearer <BALAD_API_KEY>"# Install: pip install httpximport httpx
url = "https://search.services.balad.ir/v5/geocoding/"params = { "text": "خیابان آزادی", "location": "51.3890,35.6892", "camera": "51.40,35.725", "sw": "51.30,35.65", "ne": "51.50,35.80", "zoom": "14.5",}response = httpx.get( url, params=params, headers={"Authorization": "Bearer <BALAD_API_KEY>"}, timeout=10.0,)response.raise_for_status()print(response.text)package main
import ( "fmt" "io" "net/http" "net/url" "os")
func main() { endpoint, err := url.Parse("https://search.services.balad.ir/v5/geocoding/") if err != nil { panic(err) } query := endpoint.Query() query.Set("text", "خیابان آزادی") query.Set("location", "51.3890,35.6892") query.Set("camera", "51.40,35.725") query.Set("sw", "51.30,35.65") query.Set("ne", "51.50,35.80") query.Set("zoom", "14.5") endpoint.RawQuery = query.Encode() request, err := http.NewRequest("GET", endpoint.String(), nil) if err != nil { panic(err) } request.Header.Set("Authorization", "Bearer <BALAD_API_KEY>") response, err := http.DefaultClient.Do(request) if err != nil { panic(err) } defer response.Body.Close() if response.StatusCode < 200 || response.StatusCode >= 300 { panic(fmt.Sprintf("HTTP %d", response.StatusCode)) } if _, err := io.Copy(os.Stdout, response.Body); err != nil { panic(err) }}$url = "https://search.services.balad.ir/v5/geocoding/"$params = @{ text = "خیابان آزادی" location = "51.3890,35.6892" camera = "51.40,35.725" sw = "51.30,35.65" ne = "51.50,35.80" zoom = "14.5"}$query = ($params.GetEnumerator() | ForEach-Object { [uri]::EscapeDataString([string]$_.Key) + "=" + [uri]::EscapeDataString([string]$_.Value)}) -join "&"$url += "?" + $query$headers = @{ Authorization = "Bearer <BALAD_API_KEY>" }Invoke-RestMethod -Uri $url -Headers $headers<?php// Install: composer require guzzlehttp/guzzlerequire __DIR__ . "/vendor/autoload.php";
$client = new \GuzzleHttp\Client();$response = $client->get("https://search.services.balad.ir/v5/geocoding/", [ "headers" => ["Authorization" => "Bearer <BALAD_API_KEY>"], "query" => [ "text" => "خیابان آزادی", "location" => "51.3890,35.6892", "camera" => "51.40,35.725", "sw" => "51.30,35.65", "ne" => "51.50,35.80", "zoom" => "14.5", ], "timeout" => 10,]);echo $response->getBody();// Node.js 18+async function main() { const url = new URL("https://search.services.balad.ir/v5/geocoding/"); const params = { text: "خیابان آزادی", location: "51.3890,35.6892", camera: "51.40,35.725", sw: "51.30,35.65", ne: "51.50,35.80", zoom: "14.5", }; url.search = new URLSearchParams(params).toString(); const response = await fetch(url, { headers: { Authorization: "Bearer <BALAD_API_KEY>" }, }); if (!response.ok) throw new Error("HTTP " + response.status); console.log(await response.text());}
main().catch((error) => { console.error(error); process.exitCode = 1;});نمونه پاسخ
بخش «نمونه پاسخ»{ "results": [ { "id": "poi:azadi-square", "type": "poi", "maintext": "میدان آزادی", "subtext1": "تهران", "center_point": { "lat": 35.6997, "lng": 51.3379 } } ]}پارامترها
بخش «پارامترها»| نام | نوع | اجباری | پیشفرض | توضیح |
|---|---|---|---|---|
text |
string |
بله | ندارد | متن آدرس یا مکان. |
location |
string |
خیر | ندارد | موقعیت جغرافیایی کاربر، مثلاً از GPS، به ترتیب طول و عرض جغرافیایی: 51.3890,35.6892. این نقطه آدرس مقصد نیست و ممکن است با منطقهٔ موردنظر فرق داشته باشد. برای تعیین منطقهٔ جستجو بهتنهایی به آن تکیه نکنید و camera را هم بفرستید. |
camera |
string |
خیر | ندارد | مرکز نمای فعلی نقشه به ترتیب longitude,latitude؛ مانند 51.3890,35.6892. اگر نقشه ندارید، مرکز شهر یا منطقهٔ موردنظر را بفرستید؛ برای جستجوی اطراف کاربر، آن را برابر موقعیت کاربر بگذارید. |
sw |
string |
خیر | ندارد | گوشهٔ جنوبغربی کادر دیدهشدهٔ نقشه به ترتیب longitude,latitude؛ مانند 51.30,35.65. همراه ne بفرستید تا سرویس موقعیت کاربر را نسبت به نمای نقشه بسنجد؛ نتایج الزاماً داخل این کادر نیستند. |
ne |
string |
خیر | ندارد | گوشهٔ شمالشرقی همان کادر به ترتیب longitude,latitude؛ مانند 51.50,35.80. همراه sw بفرستید؛ طول و عرض این گوشه باید از طول و عرض گوشهٔ sw بیشتر باشند. |
zoom |
number |
خیر | ندارد | بزرگنمایی فعلی نقشه؛ عدد بزرگتر یعنی نمای نزدیکتر، مانند 14.5. همراه موقعیت کاربر و کادر نقشه در انتخاب موقعیت مرجع نقش دارد. در منطق انتخاب مرکز، مقدار 7 و بالاتر امکان استفاده از camera بهجای موقعیت کاربر را فراهم میکند؛ این عدد شعاع جستجو نیست. |
فیلدهای پاسخ
بخش «فیلدهای پاسخ»| نام | نوع | توضیح |
|---|---|---|
results |
array<object> |
گزینههای پیشنهادی برای آدرس. |
results[].maintext |
string |
عنوان اصلی نتیجه. |
results[].subtext1 |
string |
متن مکمل یا آدرس کوتاه. |
results[].center_point |
object |
مختصات نقطه پیشنهادی. |
results[].geometry |
object |
هندسه مرتبط با نتیجه، در صورت وجود. |
results[].type |
string |
نوع مکان: poi مکان مشخص مثل فروشگاه یا بیمارستان؛ other-poi مکان مشخصی که توکن POI در پاسخ آن موجود نیست؛ road معبر مثل خیابان یا کوچه؛ road_intersection تقاطع معابر؛ roundabout میدان؛ neighborhood محله؛ city شهر؛ county شهرستان؛ province استان؛ village روستا. |
results[].id |
string |
شناسه نتیجه. |
کدهای وضعیت
بخش «کدهای وضعیت»کدهای مستند این درخواست: 200، 204، 400، 401، 403، 404، 429، 5xx. معنی کدها و راه بررسی خطا
نکات
بخش «نکات»- برای فرم آدرس بدون نقشه، اگر نام شهر را میدانید آن را در
textبیاورید؛ مانند «تهران، خیابان آزادی». در غیر این صورت،cameraرا به مرکز منطقهٔ موردنظر تنظیم کنید. نیازی به ساختنsw،neوzoomفرضی نیست. - با جابهجایی نقشه،
camera،sw،neوzoomرا از نمای جدید بگیرید؛locationهمچنان موقعیت خود کاربر است. نبود زمینهٔ مکانی به معنی جستجوی بیطرف در سراسر کشور نیست؛ اگر شهر از متن تشخیص داده نشود و مرکز معتبری انتخاب نشود، سرویس از نقطهٔ پیشفرضی در تهران استفاده میکند.