ジオコーディング、IP、タイムゾーンの検索をひとつのシンプルなHTTP APIで
住所を座標に、座標を住所に変換し、IPv4やIPv6アドレスの場所を調べ、任意の地点のタイムゾーンや標高を取得し、郵便番号を解決できます。GETリクエストを送り、JSONを読むだけです。インストールは不要です。
どのアドレスからでも、キーもアカウントもなしで1日あたり2,500件の無料リクエストを利用できます。もっと必要ですか。名前とメールアドレスで新規登録し、1リクエストあたり€0.0001のプリペイドクレジットを追加するか、月額€50のUnlimitedキーをご利用ください。カードと暗号資産に対応しています。
$ 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" } } }
8種類の検索、ひとつのベースURL
すべてのエンドポイントはhttps://api.mygeocode.com/v1/の下にあり、クエリパラメーターを受け取り、同じ形式のエンベロープでJSONを返します。ひとつ覚えれば、すべてがわかります。
ジオコーディングAPI
GET /v1/forwardエンドポイント住所、地名、大まかな説明を送ると、座標、整形された住所、その各構成要素が返されます。
詳細と例逆ジオコーディングAPI
GET /v1/reverseエンドポイント緯度と経度を送ると、市、地域、郵便番号、国に分けられた最寄りの住所が返されます。
詳細と例住所オートコンプリートAPI
GET /v1/autocompleteエンドポイント入力中に住所の候補を表示します。すべての候補に座標が付いているため、2回目の呼び出しが必要になることはほとんどありません。
詳細と例IPv4検索API
GET /v1/ipv4エンドポイント任意のIPv4アドレス、または省略した場合は呼び出し元について、国、地域、市、座標、タイムゾーン、ネットワークの所有者を返します。
詳細と例IPv6検索API
GET /v1/ipv6エンドポイントIPv6アドレスについて同じ詳細情報に加え、そのアドレスが属するアナウンス済みのプレフィックスを返します。
詳細と例タイムゾーン検索API
GET /v1/timezoneエンドポイント任意の座標について、現在または指定したタイムスタンプでのIANAタイムゾーン名、UTCオフセット、夏時間の状態、現地時刻を返します。
詳細と例標高検索API
GET /v1/elevationエンドポイント1地点、または1回の呼び出しで最大100地点の海抜高度をメートル単位で返します。
詳細と例郵便番号検索API
GET /v1/postcodeエンドポイント郵便番号を地名、地域、座標に変換します。ほとんどの国のZIPコード、郵便番号、それに相当するものに対応しています。
詳細と例すべての結果が精度を示します
番地を尋ねたのに市の中心を返すジオコーダーは、その建物が見つからなかったと伝えるジオコーダーよりも劣ります。当社が返す各結果には4つの値のいずれかを持つprecisionフィールドが含まれているため、コードは推測することなく、大まかな一致をどう扱うかを判断できます。
カバレッジはどこでも同じではありません。当社は一律の主張をするよりも、実際にお見せすることを選びます。カバレッジのページでは、249の国と地域それぞれで当社が到達できる最も高いレベルを掲載しています。
| レベル | 地点が表すもの |
|---|---|
house | 建物または区画そのもの。地点はその敷地上にあります。 |
street | その街区の番地の範囲から補間した、通り沿いの位置。 |
postcode | 郵便番号の区域の中心。 |
admin | 市、地区、地域、国のうち、当社が一致させられた最も詳細なものの中心。 |
すでに他社のAPIをお使いですか。ホスト名を変更するだけです。
当社は、Google Maps、Bing Maps、HERE、Mapbox、Geocode.Farm、Nominatimほか11社と同じパスとパラメーターを受け付け、それぞれのレスポンス形式で当社のデータを返す互換ホストを運用しています。解析のコードは変わりません。以前のキーがあった場所に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、PlacesのAutocompleteはそのまま動作し、地図の読み込みには料金がかかりません。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
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"]})"新規登録に必要なのはメールアドレスだけです
どのアドレスからでも、キーなしで、すべてのエンドポイントと互換ホストを通じて1日あたり2,500件の無料リクエストを利用できます。集計はUTCの00:00から始まります。キーが欲しくなったら1分で取得できます。名前、メールアドレス、パスワードで新規登録すれば、最初のキーが画面に表示されます。会社情報もカードも不要です。各キーにはそれぞれ1日あたり2,500件の無料リクエストがあり、同じネットワークからキーなしで行われたリクエストはその割り当てを共有します。そのため、アカウントによって追加されるのは2つ目の無料の2,500件ではなく、クレジット、パッケージ、利用履歴です。
キーは、それを使うマシンに紐づけられます。従量課金のキーは直近24時間の中で2つのIPアドレス、Unlimitedキーは3つのIPアドレスから利用できます。各アドレスは最初のリクエストから24時間スロットを保持し、その後解放します。それ以外のアドレスからのリクエストは拒否され、カウントされません。これにより、漏えいしたキーが他人に悪用されるのを防ぎます。もっと多くのアドレスが必要ですか。キーを追加で作成するか、パッケージを追加してください。
-
新規登録してキーを取得
メールアドレスとパスワードだけです。キーは一度だけ表示されるので、コピーしてください。最大2つのIPアドレスから、1日あたり2,500件のリクエストを無料で利用できます。
-
もっと必要になったらクレジットを追加
カードまたは暗号資産で€5からチャージできます。キーの無料の割り当てを超えるリクエストには、1件ごとに残高から€0.0001が差し引かれます。クレジットに有効期限はなく、自動で請求されることもありません。
-
またはUnlimitedキーを利用
月額€50で、リクエストごとの料金がかからないキーを利用でき、直近24時間あたり3つのIPアドレスから使えます。アプリケーションの数だけパッケージを注文できます。
無料で始められて、支払いもシンプル
すべてのエンドポイントの料金は同じです。すべての互換ホストのカウント方法も同じです。段階制も、シート単位の料金も、契約もありません。価格はユーロ建てで、カードまたは暗号資産でお支払いいただけます。
無料キー
すべてのキーで1日あたり2,500件のリクエスト。名前とメールアドレスで新規登録でき、カードは不要です。有料利用と同じデータ、同じエンドポイントです。
クレジット
キーの1日あたりの無料2,500件を超えた分は1リクエストあたり€0.0001で、好きなときにチャージできる残高から差し引かれます。月額料金も有効期限もありません。1日に10,000件のリクエストを行うと、€0.75のクレジットを使用します。
Unlimitedキー
月額€50。すべてのエンドポイントとすべての互換ホストでリクエストごとの料金がかからないキーで、直近24時間あたり最大3つのIPアドレスから利用できます。
公式ライブラリは言語ごとにひとつ、すべて薄いラッパー
当社は、JavaScriptとTypeScript、Python、PHP、Go、Java、C#、Ruby、Rust向けの小さなクライアントライブラリを開発しています。いずれも型付きのレスポンス、適切なタイムアウト、429と503での再試行を提供し、それ以外は何も加えません。準備ができたものから、インストールコマンドとともにSDKのページに掲載します。
試すのにキーは必要ですか。
いいえ。どのアドレスからでも、キーもアカウントもなしで1日あたり2,500件のリクエストを利用できます。デモページは、キーなしでブラウザから直接リクエストを送ります。クレジット、Unlimitedパッケージ、利用履歴が欲しくなったら、無料のキーを1分で取得できます。
2,501件目のリクエストではどうなりますか。
アカウントにクレジットがあれば、リクエストは処理され、クレジットを€0.0001使用します。クレジットがなければ、UTCの00:00になるか、チャージするまでHTTP 402が返されます。Unlimitedキーでは何も変わりません。
キーが2つまたは3つのIPアドレスに制限されているのはなぜですか。
キーはサーバーで使うためのものです。この制限により、公開リポジトリに漏れたキーが100台のマシンから使われることはありません。各アドレスは最初のリクエストから24時間スロットを保持し、その後スロットは解放されます。従量課金のキーには2つ、Unlimitedキーには3つのスロットがあります。より多くのマシンで使う場合は、キーを追加で作成するか、パッケージを追加してください。
結果を保存してもよいですか。
はい。キャッシュしても、データベースに保存しても、他社の地図に表示しても構いません。利用規約が求めているのは、生データを独自のジオコーディングサービスとして再販しないことだけです。