Skip to main content

Command Palette

Search for a command to run...

JS: 取得使用者定位

Updated
1 min read

因為工作都是在做地圖相關的web,很常需要取得使用者定位的功能;但如果直接使用瀏覽器原生的 Geolocation API,可能會碰到使用者拒絕定位存取權後,程式端無法再次詢問定位存取權的問題。

爬了一下文章,無法靠程式去修正使用者端瀏覽器的定位存取權設定,得靠使用者自己重新開啟應用的定位權限;但有時候會碰到使用者想要時而拒絕、時而開啟的問題,頻繁要求使用者開啟關閉存取權可能也會導致使用者體驗下降,這種時候就不太適合使用原生API。

因此跟PM提了一個備用方案 ─ 改以使用者IP來定位,可透過一些IP定位的API來取得使用者位置,不過這個方法有幾個缺點:

  1. 多數API要有token才能使用;

  2. IP定位較不精準

以往token都是用設定環境變數的方式來處理,但因為公司專案部署在AWS上,如果要在AWS設定環境變數,專案必須是透過連結GitLab的方式部署才能作設定,但因為部署環境的網域是在國外,基於一些資安理由公司目前無法這樣做orz…

好在目前有找到一個不需要token的 IP location API,實作如下:

import axios from 'axios';

axios.get("https://ipapi.co/json")
    .then( ({ data }) => {
        console.log(data);
    });

/**
 *  {
 *      ...
 *      "country_name": "United States",
 *      "latitude": 37.386,
 *      "longitude": -122.0838,
 *      "timezone": "America/Los_Angeles",
 *      ...
 *  }
**/

註:leaflet 的 locate() 背後也是使用原生Geolocation API,所以也會碰到這個問題。


References

More from this blog

Vite: vite-plugin-html的bugs和坑

因為工作要用Vite去生成一個mpa專案且根據頁面不同,動態生成不同 <title> 的HTML,所以就找了一個套件──vite-plugin-html,結果因為套件好像很久沒維護,隨著Vite升級又多了一些有的沒的bug,順手來記錄一下。 template delete 像我第一個就是遇到生成的時候template HTML也會被刪掉,後來看到issue上也有人反映,還好有好心人士解決這個問題,

Feb 26, 20261 min read4

Lun's Blog

82 posts

Notes for web development

JS: Get User Location