介绍
供中国地区使用的 js 定位插件
特性:
- 支持浏览器 h5 定位、ip 定位、经纬度查询地址、ip 查询、地区编码查询地址、地址文本解析、省市区三级联动列表搜索
- 定位信息文件已做压缩处理,如果有启用 gzip 时部分定位大约只会花费几十 k
- web 端定位库,无需在服务端额外运行定位服务,没有并发限制、次数限制且无收费
ps:
更新日志:
- 0.1.x 文档请点击这里,1.x.x 版本相比 0.1.x 版本有破坏性更新,如需升级注意重新对接文档。
- 相比 0.1.x 版本新增了 ip 查询地址、地址文本解析、地区编码查询地址。
- 重构了 ip 定位方法,使用 ip 文件处理 ip 定位,对第三方的 ip 定位无依赖,ip 获取默认会缓存一天,也可自行结合自己服务获取用户 ip 进行 ip 定位。
- 对定位文件进行优化,使每次定位所加载的文件更小,且对所有加载过的定位文件进行持久化缓存,第二次对于同市的定位速度在 100ms 以内。
- 1.0.9 版本优化了 cdn 文件加载逻辑
- 1.0.10 版本新增 esmodule 包,兼容 vite
安装
with npm or yarn
yarn add @pikaz/location
npm i -S @pikaz/location
import { getLocation } from '@pikaz/location'
with cdn
<script
type="text/javascript"
src="https://cdn.jsdelivr.net/npm/@pikaz/location"
></script>
或者
<script type="text/javascript" src="https://unpkg.com/@pikaz/location"></script>
const { getLocation } = window.pikazLocation
方法函数
方法名 | 方法说明 | 参数/object | 参数说明 | 默认参数值 |
setConfig | 设置全局配置(不调用则使用默认配置) | timeout: Number/选填 | 所有定位函数默认超时时间,单位毫秒 | 10000 |
url: String/选填 | 静态文件cdn地址 | https://cdn.jsdelivr.net/npm/@pikaz/location/lib |
getLocation |
默认定位函数,优先使用html5定位,html5定位失败,则会自动切换为ip定位
|
对应定位类型的参数同下方的getH5Location方法和getIpLocation方法
| - | - |
getH5Location | html5定位 | timeout: Number/选填 | 超时时间 | 10000 |
enableHighAccuracy: Boolean/选填 | 是否开启设备gps启用高精度定位(更耗时) | false |
detail: Boolean/选填 | 是否需要地址详细信息(更耗时) | false |
latitude: Number/选填 |
手动传入经纬度查询地址信息,latitude与longitude需同时传入,不传则使用设备定位
| - |
longitude: Number/选填 |
可手动传入经纬度查询地址信息,latitude与longitude需同时传入,不传则使用设备定位
| - |
getIpLocation | ip定位 | timeout: Number/选填 | 超时时间 | 10000 |
detail: Boolean/选填 | 是否需要地址详细信息(更耗时) | false |
ip: String/选填 |
可手动传入ipv4格式的ip地址(如114.114.114.114)查询地址信息,不传则使用设备ip定位
| - |
searchAddress | 解析地址文本 | timeout: Number/选填 | 超时时间 | 10000 |
detail: Boolean/选填 | 是否需要地址详细信息(更耗时) | false |
address: String/必填 |
地址文本字符串,必须带有省级或市级的全写或简写,不能只包含区县名称,如广东深圳/深圳南山
| - |
searchCodeAddress | 地区编码查询 | timeout: Number/选填 | 超时时间 | 10000 |
detail: Boolean/选填 | 是否需要地址详细信息(更耗时) | false |
code: String/必填 | 地区编码 | - |
searchList | 省市区三级联动,传入地区编码获取该地区下级地区列表 | code: String/选填 | 地区编码,若不传则获取所有省级地区列表 | - |
searchCodeDetail | 获取单个地区编码的详细信息,等同于其他方法中的detail数据 | timeout: Number/选填 | 超时时间 | 10000 |
code: String/必填 | 地区编码 | - |
注:detail开启则会在原本基础定位信息的基础上返回省市区的详细信息
方法示例
setConfig
说明:设置全局配置(不调用则使用默认配置)
可把该项目的根目录下的 static 文件夹整个上传至您的 oss 上,将 static 文件夹的链接地址作为 url 传入,如 oss 上的 static 文件夹可通过https://xxx.com/file/static访问,则url可传入https://xxx.com/file,若不设置,则url默认使用https://cdn.jsdelivr.net/npm/@pikaz/location/lib等公共cdn地址(第三方cdn可能不稳定,最好自行上传定位文件)
import { setConfig } from '@pikaz/location'
setConfig({
timeout: 10000,
url: 'https://unpkg.com/@pikaz/location/lib',
})
getLocation
说明:默认定位函数,优先使用 html5 定位,html5 定位失败,则会自动切换为 ip 定位
import { getLocation } from '@pikaz/location'
getLocation()
.then((res) => {
})
.catch((err) => {
console.log(err)
})
getH5Location
说明:html5 定位函数,html5 定位推荐使用 https 协议,若为 http,则 html5 定位可能出现定位不准确或无法定位(取决于浏览器策略),开启高精度定位会更加耗时;
import { getH5Location } from '@pikaz/location'
getH5Location({
enableHighAccuracy: true,
})
.then((res) => {
})
.catch((err) => {
console.log(err)
})
getIpLocation
说明:ip 定位函数,ip 定位相比 html5 定位精度更差且可能不准,但是若用户拒绝定位授权时,则可以使用 ip 定位作为兜底方案;
import { getIpLocation } from '@pikaz/location'
getIpLocation()
.then((res) => {
})
.catch((err) => {
console.log(err)
})
searchAddress
说明:解析地址文本,必须带有省级或市级的全写或简写,不能只包含区县名称,如广东深圳/广东省深圳市/广东南山/深圳/深圳南山
import { searchAddress } from '@pikaz/location'
searchAddress({
address: '广东福田',
})
.then((res) => {
})
.catch((err) => {
console.log(err)
})
searchCodeAddress
说明:地区编码查询地址信息
import { searchCodeAddress } from '@pikaz/location'
searchCodeAddress({
code: '440304',
})
.then((res) => {
})
.catch((err) => {
console.log(err)
})
searchList
说明:省市区三级联动,传入对应行政单位编码,获取下级行政单位列表;不传行政单位编码默认获取省级单位列表
import { searchList } from '@pikaz/location'
searchList({
code: '110000',
})
.then((res) => {
})
.catch((err) => {
console.log(err)
})
searchCodeDetail
说明:获取单个地区的详细信息:地区编码、经纬度、名称、名称拼音
import { searchCodeDetail } from '@pikaz/location'
searchCodeDetail({
code: '440304',
})
.then((res) => {
})
.catch((err) => {
console.log(err)
})
detail
说明:若开启则会在原本的返回数据中额外返回详细的地址信息
import { getH5Location } from '@pikaz/location'
getH5Location({
detail: true,
})
.then((res) => {
})
.catch((err) => {
console.log(err)
})