الترميز الجغرافي والاستعلام عن IP والمناطق الزمنية عبر واجهة API واحدة بسيطة تعمل بـ HTTP

حوّل العناوين إلى إحداثيات والعكس، واعرف موقع أي عنوان IPv4 أو IPv6، واحصل على المنطقة الزمنية أو الارتفاع لأي نقطة، وحلّل الرموز البريدية. أرسل طلب GET، واقرأ JSON. لا شيء لتثبيته.

2,500 طلب مجاني يوميًا من أي عنوان، دون مفتاح ودون حساب. تحتاج إلى المزيد؟ أنشئ حسابًا باسمك وبريدك الإلكتروني، وأضف رصيدًا مسبق الدفع بسعر 0.0001 € للطلب، أو احصل على مفتاح Unlimited مقابل 50 € شهريًا. نقبل البطاقات والعملات المشفرة.

$ curl -H "X-API-Key: YOUR_KEY" "https://api.mygeocode.com/v1/reverse?lat=48.8584&lon=2.2945"
{
  "status": "ok",
  "result": {
    "formatted": "5 Avenue Anatole France, 75007 Paris, France",
    "lat": 48.85837,
    "lon": 2.29448,
    "distance_m": 12,
    "precision": "house",
    "components": {
      "house_number": "5",
      "road": "Avenue Anatole France",
      "city": "Paris",
      "postcode": "75007",
      "country": "France",
      "country_code": "fr"
    }
  }
}
2,500طلب مجاني يوميًا، على كل مفتاح
0.0001 €للطلب من الرصيد مسبق الدفع
50 €شهريًا لمفتاح Unlimited
17مضيفات بديلة متوافقة مع واجهات API لمزودين آخرين
نقاط النهاية

ثماني عمليات بحث، وعنوان URL أساسي واحد

كل نقطة نهاية موجودة تحت https://api.mygeocode.com/v1/، وتقبل معاملات الاستعلام، وتعيد JSON بالغلاف نفسه. تعلّم واحدة وستعرفها كلها.

واجهة API للترميز الجغرافي الأمامي

نقطة النهاية GET /v1/forward

أرسل عنوانًا أو اسم مكان أو وصفًا تقريبيًا، واحصل على الإحداثيات وعنوان منقّح وكل جزء من أجزائه.

التفاصيل والأمثلة

واجهة API للترميز الجغرافي العكسي

نقطة النهاية GET /v1/reverse

أرسل خط العرض وخط الطول واحصل على أقرب عنوان، مع المدينة والمنطقة والرمز البريدي والدولة مفصّلة.

التفاصيل والأمثلة

واجهة API للإكمال التلقائي للعناوين

نقطة النهاية GET /v1/autocomplete

اقترح العناوين أثناء الكتابة. كل اقتراح يأتي مع إحداثياته، لذا نادرًا ما تحتاج إلى استدعاء ثانٍ.

التفاصيل والأمثلة

واجهة API للاستعلام عن IPv4

نقطة النهاية GET /v1/ipv4

الدولة والمنطقة والمدينة والإحداثيات والمنطقة الزمنية ومالك الشبكة لأي عنوان IPv4، أو للمستدعي إذا لم تحدد عنوانًا.

التفاصيل والأمثلة

واجهة API للاستعلام عن IPv6

نقطة النهاية GET /v1/ipv6

التفاصيل نفسها لعناوين IPv6، إضافة إلى البادئة المعلنة التي ينتمي إليها العنوان.

التفاصيل والأمثلة

واجهة API للاستعلام عن المنطقة الزمنية

نقطة النهاية GET /v1/timezone

اسم المنطقة الزمنية وفق IANA، وفارق التوقيت عن UTC، وحالة التوقيت الصيفي، والوقت المحلي لأي إحداثيات، الآن أو عند طابع زمني تختاره.

التفاصيل والأمثلة

واجهة API للاستعلام عن الارتفاع

نقطة النهاية GET /v1/elevation

الارتفاع فوق مستوى سطح البحر بالأمتار لنقطة واحدة، أو لما يصل إلى 100 نقطة في استدعاء واحد.

التفاصيل والأمثلة

واجهة API للاستعلام عن الرمز البريدي

نقطة النهاية GET /v1/postcode

حوّل الرمز البريدي إلى اسم مكان ومنطقة وإحداثيات. يعمل مع رموز ZIP والرموز البريدية وما يعادلها في معظم الدول.

التفاصيل والأمثلة
الدقة

كل نتيجة تخبرك بمدى دقتها

أداة الترميز الجغرافي التي تعيد مركز المدينة حين تسأل عن رقم منزل أسوأ من أداة تخبرك بأنها لم تجد المنزل. كل نتيجة نعيدها تحمل الحقل precision بإحدى أربع قيم، حتى تقرر شيفرتك ما تفعله بالتطابق التقريبي بدلًا من التخمين.

التغطية ليست متماثلة في كل مكان، ونفضّل أن نريك ذلك على أن نطلق ادعاءً شاملًا. تعرض صفحة التغطية أفضل مستوى نصل إليه في كل دولة وإقليم من أصل 249.

اطّلع على المستوى في كل دولة

المستوىما تمثله النقطة
houseالمبنى أو قطعة الأرض نفسها. تقع النقطة على العقار.
streetموضع على امتداد الشارع، محسوب بالاستيفاء من نطاق أرقام المنازل في ذلك المقطع.
postcodeمركز منطقة الرمز البريدي.
adminمركز المدينة أو الحي أو المنطقة أو الدولة، أيها كان التطابق الأكثر تحديدًا الذي استطعنا الوصول إليه.
الانتقال

تستخدم واجهة API لمزود آخر؟ غيّر اسم المضيف.

نشغّل مضيفات بديلة متوافقة تقبل المسارات والمعاملات نفسها التي تقبلها Google Maps وBing Maps وHERE وMapbox وGeocode.Farm وNominatim وأحد عشر مزودًا آخر، وتجيب بصيغة استجاباتها ببياناتنا. شيفرة التحليل لديك لا تتغير. ضع مفتاح My Geocode الخاص بك مكان المفتاح القديم.

قبل
$ curl "https://maps.googleapis.com/maps/api/geocode/json?address=10+Downing+St+London&key=GOOGLE_KEY"
بعد
$ curl "https://gapi.mygeocode.com/maps/api/geocode/json?address=10+Downing+St+London&key=MYGEOCODE_KEY"

والفكرة نفسها تنطبق على مكتبات JavaScript. حمّل Google Maps JavaScript API من gapi.mygeocode.com وستستمر google.maps.Map وGeocoder وAutocomplete الخاصة بـ Places في العمل، مع تحميلات خرائط لا تكلف شيئًا. تتوفر أدوات تحميل لعنصر التحكم Bing Maps V8 وHERE Maps for JavaScript وMapQuest.js، وإعدادات لإضافات الترميز الجغرافي في MapLibre وMapbox GL وLeaflet.

  • Google Maps
  • Bing Maps
  • HERE
  • Mapbox
  • Geocode.Farm
  • Nominatim
  • OpenCage
  • LocationIQ
  • Geoapify
  • TomTom
  • MapQuest
  • Geocodio
  • PositionStack
  • ip-api
  • ipinfo
  • ipstack
  • Open-Elevation

بدائل REST المتوافقة بدائل JavaScript المتوافقة

أي لغة

إذا كانت قادرة على إرسال طلب HTTP، فبإمكانها استخدام هذه الخدمة

لا حاجة إلى أي SDK. تحوّل هذه الأمثلة عنوانًا إلى إحداثيات وتطبعها. المكتبات الرسمية لكل لغة في الطريق، وستبقى أغلفة خفيفة حول الاستدعاءات نفسها.

$ curl -H "X-API-Key: YOUR_KEY" "https://api.mygeocode.com/v1/forward?q=221B+Baker+Street,+London"

$ curl -H "X-API-Key: YOUR_KEY" "https://api.mygeocode.com/v1/forward?q=221B+Baker+Street,+London"
const url = new URL("https://api.mygeocode.com/v1/forward");
url.searchParams.set("q", "221B Baker Street, London");

const res = await fetch(url, { headers: { "X-API-Key": process.env.MYGEOCODE_KEY } });
const data = await res.json();

const [first] = data.results;
console.log(first.lat, first.lon, first.precision);
import os
import requests

r = requests.get(
    "https://api.mygeocode.com/v1/forward",
    params={"q": "221B Baker Street, London"},
    headers={"X-API-Key": os.environ["MYGEOCODE_KEY"]},
    timeout=10,
)
r.raise_for_status()
first = r.json()["results"][0]
print(first["lat"], first["lon"], first["precision"])
<?php
$url = "https://api.mygeocode.com/v1/forward?" . http_build_query([
    "q" => "221B Baker Street, London",
]);

$context = stream_context_create(["http" => ["header" => "X-API-Key: " . getenv("MYGEOCODE_KEY")]]);
$data = json_decode(file_get_contents($url, false, $context), true);

$first = $data["results"][0];
echo $first["lat"], ", ", $first["lon"], " (", $first["precision"], ")\n";
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{"q": {"221B Baker Street, London"}}
	req, _ := http.NewRequest("GET", "https://api.mygeocode.com/v1/forward?"+q.Encode(), nil)
	req.Header.Set("X-API-Key", os.Getenv("MYGEOCODE_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	var data struct {
		Results []struct {
			Lat       float64 `json:"lat"`
			Lon       float64 `json:"lon"`
			Precision string  `json:"precision"`
		} `json:"results"`
	}
	json.NewDecoder(resp.Body).Decode(&data)
	fmt.Println(data.Results[0].Lat, data.Results[0].Lon, data.Results[0].Precision)
}
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;

public class Geocode {
    public static void main(String[] args) throws Exception {
        String q = URLEncoder.encode("221B Baker Street, London", StandardCharsets.UTF_8);
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.mygeocode.com/v1/forward?q=" + q))
            .header("X-API-Key", System.getenv("MYGEOCODE_KEY"))
            .build();

        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
using System.Net.Http;
using System.Text.Json;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", Environment.GetEnvironmentVariable("MYGEOCODE_KEY"));

var q = Uri.EscapeDataString("221B Baker Street, London");
var json = await client.GetStringAsync($"https://api.mygeocode.com/v1/forward?q={q}");

using var doc = JsonDocument.Parse(json);
var first = doc.RootElement.GetProperty("results")[0];
Console.WriteLine($"{first.GetProperty("lat")}, {first.GetProperty("lon")} ({first.GetProperty("precision")})");
require "net/http"
require "json"

uri = URI("https://api.mygeocode.com/v1/forward")
uri.query = URI.encode_www_form(q: "221B Baker Street, London")

req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = ENV["MYGEOCODE_KEY"]
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }

first = JSON.parse(res.body)["results"][0]
puts "#{first["lat"]}, #{first["lon"]} (#{first["precision"]})"

اطّلع على خطط SDK والأمثلة الكاملة لكل لغة

المفاتيح اختيارية

عنوان بريد إلكتروني هو كل ما يتطلبه التسجيل

يحصل أي عنوان على 2,500 طلب مجاني يوميًا دون أي مفتاح على الإطلاق، عبر جميع نقاط النهاية والمضيفات البديلة المتوافقة، ويُحسب اليوم ابتداءً من 00:00 بتوقيت UTC. ويستغرق الحصول على مفتاح دقيقة واحدة حين تريده: أنشئ حسابًا باسمك وعنوان بريد إلكتروني وكلمة مرور، وسيظهر مفتاحك الأول على الشاشة. لا حاجة إلى شركة ولا إلى بطاقة. لكل مفتاح 2,500 طلب مجاني يوميًا خاصة به، والطلبات المرسلة دون مفتاح من الشبكة نفسها تتقاسم هذه الحصة، لذا يضيف الحساب الرصيد والباقات وسجل الاستخدام، لا حصة مجانية ثانية من 2,500 طلب.

ترتبط المفاتيح بالأجهزة التي تستخدمها. مفتاح الدفع حسب الاستخدام يخدم عنواني IP خلال أي 24 ساعة متتالية، ومفتاح Unlimited ثلاثة عناوين. يحتفظ كل عنوان بخانته لمدة 24 ساعة من أول طلب له ثم يحررها. والطلب القادم من عنوان إضافي يُرفض ولا يُحتسب، وهذا ما يمنع المفتاح المسرّب من أن يكون مفيدًا لأي شخص آخر. تحتاج إلى عناوين أكثر؟ أنشئ مفاتيح إضافية أو أضف باقات.

  1. أنشئ حسابًا واحصل على مفتاح

    بريد إلكتروني وكلمة مرور. يظهر المفتاح مرة واحدة؛ انسخه. 2,500 طلب يوميًا، مجانًا، من عنواني IP كحد أقصى.

  2. أضف رصيدًا حين تحتاج إلى المزيد

    اشحن الرصيد ابتداءً من 5 € بالبطاقة أو بالعملات المشفرة. الطلبات التي تتجاوز الحصة المجانية للمفتاح تُخصم بسعر 0.0001 € لكل طلب من الرصيد. الرصيد لا تنتهي صلاحيته أبدًا ولا يُحصَّل أي مبلغ تلقائيًا.

  3. أو احصل على مفتاح Unlimited

    مقابل 50 € شهريًا تحصل على مفتاح بلا رسوم على كل طلب، يمكن استخدامه من ثلاثة عناوين IP خلال كل 24 ساعة متتالية. اطلب عدد الباقات الذي يساوي عدد تطبيقاتك.

الأسعار

مجاني للبدء، وبسيط في الدفع

كل نقطة نهاية تكلف السعر نفسه. وكل مضيف بديل متوافق يُحتسب بالطريقة نفسها. لا فئات، ولا رسوم حسب المقعد، ولا عقد. الأسعار باليورو، والدفع بالبطاقة أو بالعملات المشفرة.

مفتاح مجاني

2,500 طلب يوميًا على كل مفتاح. أنشئ حسابًا باسمك وبريدك الإلكتروني؛ دون بطاقة. البيانات نفسها ونقاط النهاية نفسها المتاحة في الاستخدام المدفوع.

الرصيد

0.0001 € للطلب بعد الطلبات المجانية للمفتاح البالغة 2,500 كل يوم، تُخصم من رصيد تشحنه متى شئت. لا رسوم شهرية، ولا انتهاء صلاحية. 10,000 طلب في اليوم تستهلك 0.75 € من الرصيد.

مفتاح Unlimited

50 € شهريًا. مفتاح بلا رسوم على كل طلب عبر كل نقطة نهاية وكل مضيف بديل متوافق، من ثلاثة عناوين IP كحد أقصى خلال كل 24 ساعة متتالية.

الأسعار الكاملة وأمثلة محسوبة

حزم SDK

مكتبات رسمية، واحدة لكل لغة، وكلها خفيفة

نكتب مكتبات عميل صغيرة لـ JavaScript وTypeScript وPython وPHP وGo وJava وC# وRuby وRust. ستمنحك كل منها استجابات محددة الأنواع، ومهلات معقولة، وإعادة محاولة عند 429 و503، ولا شيء غير ذلك. وعندما تجهز إحداها، تُضاف إلى صفحة SDK مع أمر تثبيتها.

تابع تقدم SDK

هل أحتاج إلى مفتاح لتجربتها؟

لا. يحصل أي عنوان على 2,500 طلب يوميًا دون مفتاح ودون حساب. ترسل صفحة العرض التجريبي الطلبات مباشرة من المتصفح دون مفتاح. ويستغرق الحصول على مفتاح مجاني دقيقة واحدة حين تريد رصيدًا أو باقة Unlimited أو سجل استخدام.

ماذا يحدث عند الطلب رقم 2,501؟

إذا كان في حسابك رصيد، يمر الطلب ويستهلك 0.0001 € منه. وإذا لم يكن، تتلقى HTTP 402 حتى 00:00 بتوقيت UTC أو إلى أن تشحن الرصيد. أما على مفتاح Unlimited فلا يتغير شيء.

لماذا يقتصر المفتاح على عنوانين أو ثلاثة عناوين IP؟

المفاتيح مخصصة للخوادم، ويعني هذا الحد أن المفتاح الذي يتسرب إلى مستودع عام لا يمكن استخدامه من مئة جهاز. يحتفظ كل عنوان بخانته لمدة 24 ساعة من أول طلب له، ثم تتحرر الخانة. لمفتاح الدفع حسب الاستخدام خانتان، ولمفتاح Unlimited ثلاث خانات. ولأجهزة أكثر، أنشئ مفاتيح إضافية أو أضف باقات.

هل يمكنني تخزين النتائج؟

نعم. خزّنها مؤقتًا، واحفظها في قاعدة بياناتك، واعرضها على خريطة من مزود آخر. لا تطلب الشروط سوى ألا تعيد بيع البيانات الخام كخدمة ترميز جغرافي خاصة بك.

أرسل طلبك الأول الآن

يرسل العرض التجريبي طلبات حية من متصفحك بمفتاحك ويفتح استجابة JSON. لا يتطلب المفتاح المجاني سوى اسمك وعنوان بريد إلكتروني ودقيقة واحدة؛ وحين تتجاوز احتياجاتك 2,500 يوميًا، اشحن الرصيد أو أضف مفتاح Unlimited.