å®å ¨ãªã³ã³ããã¹ãç¨: ãã®æ©è½ã¯ä¸é¨ã¾ãã¯ãã¹ã¦ã®å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã«ããã¦ãå®å ¨ãªã³ã³ããã¹ã (HTTPS) ã§ã®ã¿å©ç¨ã§ãã¾ãã
ä½ç½®æ å ± API (Geolocation API) ã«ãããã¦ã¼ã¶ã¼ã¯å¸æããã°èªèº«ã®å ´æãã¦ã§ãã¢ããªã±ã¼ã·ã§ã³ã«éç¥ãããã¨ãã§ããããã«ãªãã¾ãããã®è¨äºã§ã¯ããã®ä½¿ãæ¹ã®åºæ¬ã説æãã¾ãã
geolocation ãªãã¸ã§ã¯ãä½ç½®æ
å ± API 㯠navigator.geolocation
ãªãã¸ã§ã¯ããéãã¦å©ç¨ã§ãã¾ãã
ãã®ãªãã¸ã§ã¯ããåå¨ãã¦ããã°ãä½ç½®æ å ±ãµã¼ãã¹ãå©ç¨ãããã¨ãã§ãã¾ããæ¬¡ã®ãããªã³ã¼ãã§ã®åå¨ã確èªãããã¨ãã§ãã¾ãã
if ("geolocation" in navigator) {
/* geolocation ã使ç¨å¯è½ */
} else {
/* geolocation ã使ç¨ä¸å¯ */
}
ç¾å¨ä½ç½®ã®åå¾
ã¦ã¼ã¶ã¼ã®ç¾å¨ä½ç½®ãåå¾ããã«ã¯ã getCurrentPosition()
ã¡ã½ãããå¼ã³åºãã¾ãããã®ã¡ã½ããã¯ã¦ã¼ã¶ã¼ã®ç¾å¨ä½ç½®ãç¹å®ããããã®éåæéä¿¡ãéå§ããã¨ã¨ãã«ãä½ç½®åå¾ããã¤ã¹ããææ°ã®æ
å ±ãåå¾ãã¾ããç¾å¨ä½ç½®ãç¹å®ãããã¨ã³ã¼ã«ããã¯é¢æ°ãå®è¡ããã¾ããã¾ãããªãã·ã§ã³ã¨ãã¦ç¬¬äºå¼æ°ã«ã³ã¼ã«ããã¯é¢æ°ãæå®ãããã¨ã§ãã¨ã©ã¼çºçæã«å®è¡ããã颿°ãæå®ãããã¨ãã§ãã¾ããçç¥å¯è½ãªç¬¬ä¸å¼æ°ã¯ãæå¤§è©¦è¡åæ°ãè¦æ±å¾
ã¡æéãé«ç²¾åº¦ã®ä½ç½®æ
å ±ãæ±ããããæå®ãããªãã¸ã§ã¯ãã§ãã
ã¡ã¢: æ¢å®ã§ã¯ã getCurrentPosition()
ã¯ä½ç²¾åº¦ã®çµæã使ãããªãã¹ãé«éã«å¿çãããã¨ãã¾ããããã¯ãæ£ç¢ºãã«é¢ãããéãå¿çãå¿
è¦ã¨ããå ´åã«å½¹ç«ã¡ã¾ããä¾ãã° GPS ãåãã¦ãã端æ«ã§ã GPS ã確å®ããã¾ã§ã«ã¯æ°å以ä¸ãããå¯è½æ§ãããã¾ãã®ã§ã getCurrentPosition()
ãã㯠(IP ãã±ã¼ã·ã§ã³ã Wi-Fi ã«ãã) ä½ç²¾åº¦ã®ãã¼ã¿ãè¿ããã¨ãããã¾ãã
navigator.geolocation.getCurrentPosition((position) => {
doSomething(position.coords.latitude, position.coords.longitude);
});
ä¸è¨ã®ä¾ã§ã¯ãä½ç½®æ
å ±ãåå¾ã§ã次第 doSomething()
颿°ãå®è¡ããã¾ãã
ä½ç½®æ
å ±ãå¤åããå ´åï¼ç«¯æ«ãç§»åããæããããæ£ç¢ºãªä½ç½®æ
å ±ãå¾ãããæï¼ã¯ãä½ç½®æ
å ±ã®æ´æ°ã¨åæã«å¼ã³åºãããã³ã¼ã«ããã¯é¢æ°ãæå®ãããã¨ãã§ãã¾ãããã㯠watchPosition()
颿°ã使ããã¨ã§å®ç¾ã§ãã¾ããããã¡ãã®å
¥å弿°ã¯ getCurrentPosition()
ã¨åãã§ããã³ã¼ã«ããã¯é¢æ°ã¯ç¹°ãè¿ãå¼ã³åºããããã©ã¦ã¶ã¼ã¯ç§»åã«å¿ãã¦ä½ç½®æ
å ±ãæ´æ°ããããä½ç½®ã®ç¹å®ã«å¥ã®æè¡ã使ç¨ãããã¨ã§ãã詳細ãªä½ç½®æ
å ±ãæä¾ããããããã¨ãå¯è½ã§ããã¨ã©ã¼çºçæã«å¼ã³åºãããã³ã¼ã«ããã¯é¢æ°ã¯ getCurrentPosition()
ã¨åæ§ã«ä»»ææå®ã§ãããç¹°ãè¿ãå¼ã³åºãããå ´åãããã¾ãã
ã¡ã¢: watchPosition()
ã使ç¨ããéã«ãå
ã« getCurrentPosition()
ãå¼ã³åºãå¿
è¦ã¯ããã¾ããã
const watchID = navigator.geolocation.watchPosition((position) => {
doSomething(position.coords.latitude, position.coords.longitude);
});
watchPosition()
ã¡ã½ããã¯ãä½ç½®ç£è¦ã®ç»é²ãèå¥ãã ID çªå·ãè¿ãã¾ãããã® ID çªå·ã clearWatch()
ã¡ã½ããã«æ¸¡ããã¨ã§ãã¦ã¼ã¶ã¼ã®ä½ç½®ç£è¦ãçµäºããããã¨ãã§ãã¾ãã
navigator.geolocation.clearWatch(watchID);
å¿çã®å¾®èª¿æ´
getCurrentPosition()
ããã³ watchPosition()
ã¯æåæã®ã³ã¼ã«ããã¯ãçç¥å¯è½ãªã¨ã©ã¼æã®ã³ã¼ã«ããã¯ãããã¦çç¥å¯è½ãª options ãªãã¸ã§ã¯ããåãåãã¾ãã
ãã®ãªãã¸ã§ã¯ãã§ã¯ãé«ç²¾åº¦ãæå¹ã«ãããã©ãããè¿ãããä½ç½®å¤ã®ä½¿ç¨æéï¼ãã®æéã¾ã§ã¯ãåãä½ç½®ãååº¦è¦æ±ãããå ´åã«ãã£ãã·ã¥ããã¦åå©ç¨ããããã以éã¯ãã©ã¦ã¶ã¼ãæ°ããä½ç½®ãã¼ã¿ãè¦æ±ãã¾ãï¼ãã¿ã¤ã ã¢ã¦ãããåã«ãã©ã¦ã¶ã¼ãã©ã®ãããã®æéä½ç½®ãã¼ã¿ãåå¾ãããã¨ããããæå®ããã¿ã¤ã ã¢ã¦ãå¤ãæå®ãããã¨ãã§ãã¾ãã
watchPosition
ã®å¼ã³åºãã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
function success(position) {
doSomething(position.coords.latitude, position.coords.longitude);
}
function error() {
alert("ä½ç½®æ
å ±ãå©ç¨ã§ãã¾ããã");
}
const options = {
enableHighAccuracy: true,
maximumAge: 30000,
timeout: 27000,
};
const watchID = navigator.geolocation.watchPosition(success, error, options);
ä½ç½®ã®è¡¨ç¾
ã¦ã¼ã¶ã¼ã®ä½ç½®ã¯ GeolocationPosition
ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ã使ç¨ãã¦è¨è¿°ãããããèªä½ã GeolocationCoordinates
ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ãå«ãã§ãã¾ãã
GeolocationPosition
ã¤ã³ã¹ã¿ã³ã¹ãæã¤æ
å ±ã¯ 2 ã¤ã ãã§ã coords
ããããã£ã¯ GeolocationCoordinates
ã¤ã³ã¹ã¿ã³ã¹ãæã£ã¦ããã timestamp
ããããã£ã¯ä½ç½®ãã¼ã¿ãåå¾ãããæå»ã表ããããªç§åä½ã® Unix æå»ãæã£ã¦ãã¾ãã
GeolocationCoordinates
ã¤ã³ã¹ã¿ã³ã¹ã«ã¯ããã¤ãã®ããããã£ãããã¾ãããæãä¸è¬çã«ä½¿ç¨ãããã®ã¯ latitude
㨠longitude
ã® 2 ã¤ã§ãããã¯å°å³ä¸ã«ä½ç½®ãæç»ããããã«å¿
è¦ãªãã®ã§ãããã®ãããå¤ãã® Geolocation æåã³ã¼ã«ããã¯ã¯ã¨ã¦ãã·ã³ãã«ã«è¦ãã¾ãã
function success(position) {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
// 緯度ã¨çµåº¦ã§ä½ããè¡ã
}
ããã GeolocationCoordinates
ãªãã¸ã§ã¯ãããã¯ãé«åº¦ãé度ã端æ«ãåãã¦ããæ¹åãé«åº¦ãçµåº¦ã緯度ãã¼ã¿ã®ç²¾åº¦æ¸¬å®ãªã©ãä»ã«ãå¤ãã®æ
å ±ãå¾ããã¨ãã§ãã¾ãã
getCurrentPosition()
ã watchPosition()
ã®å¼ã³åºãæã«ã¨ã©ã¼ã³ã¼ã«ããã¯é¢æ°ãæä¾ããå ´åãæåã®å¼æ°ã GeolocationPositionError
ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ã¨ãªãã¾ãããã®ãªãã¸ã§ã¯ãåã«ã¯äºã¤ã®ããããã£ãããã¾ãã code
ã¯è¿ãããã¨ã©ã¼ã®ç¨®é¡ã示ãã message
ã¯äººéãèªããå½¢ã§ã¨ã©ã¼ã³ã¼ãã®æå³ã説æãã¾ãã
次ã®ããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
function errorCallback(error) {
alert(`ERROR(${error.code}): ${error.message}`);
}
ä¾
以ä¸ã®ä¾ã§ã¯ãä½ç½®æ
å ± API ã¯ã¦ã¼ã¶ã¼ã®çµåº¦ã¨ç·¯åº¦ãåå¾ããããã«ä½¿ç¨ããã¾ããæåããå ´åããã®ä½ç½®ã表示ãã openstreetmap.org
ã® URL ã®æå¹ãªãã¤ãã¼ãªã³ã¯ã表示ããã¾ãã
body {
padding: 20px;
background-color: #ffffc9;
}
button {
margin: 0.5rem 0;
}
HTML
<button id="find-me">ç¾å¨ã®ä½ç½®ã表示</button><br />
<p id="status"></p>
<a id="map-link" target="_blank"></a>
JavaScript
function geoFindMe() {
const status = document.querySelector("#status");
const mapLink = document.querySelector("#map-link");
mapLink.href = "";
mapLink.textContent = "";
function success(position) {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
status.textContent = "";
mapLink.href = `https://www.openstreetmap.org/#map=18/${latitude}/${longitude}`;
mapLink.textContent = `緯度: ${latitude}°ãçµåº¦: ${longitude}°`;
}
function error() {
status.textContent = "Unable to retrieve your location";
}
if (!navigator.geolocation) {
status.textContent = "ãã®ãã©ã¦ã¶ã¼ã¯ä½ç½®æ
å ±ã«å¯¾å¿ãã¦ãã¾ãã";
} else {
status.textContent = "ä½ç½®æ
å ±ãåå¾ä¸â¦";
navigator.geolocation.getCurrentPosition(success, error);
}
}
document.querySelector("#find-me").addEventListener("click", geoFindMe);
çµæ
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4