Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
bba3c53a
U
uni-app
项目概览
DCloud
/
uni-app
2 个月 前同步成功
通知
717
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
bba3c53a
编写于
9月 08, 2022
作者:
C
codexu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 更新定位增加坐标转换
上级
bac58ddf
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
107 addition
and
62 deletion
+107
-62
src/platforms/h5/helpers/location.js
src/platforms/h5/helpers/location.js
+74
-0
src/platforms/h5/service/api/location/get-location.js
src/platforms/h5/service/api/location/get-location.js
+16
-56
src/platforms/h5/service/api/location/location-change.js
src/platforms/h5/service/api/location/location-change.js
+17
-6
未找到文件。
src/platforms/h5/helpers/location.js
浏览文件 @
bba3c53a
import
{
getJSONP
}
from
'
./get-jsonp
'
import
{
loadMaps
}
from
'
../view/components/map/maps
'
export
const
ICON_PATH_ORIGIN
=
'
data:image/png;base64,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
'
export
const
ICON_PATH_TARGET
=
...
...
@@ -38,3 +41,74 @@ export function getMapInfo () {
}
export
const
IS_AMAP
=
getMapInfo
().
type
===
MapType
.
AMAP
export
function
translateGeo
(
type
,
coords
,
skip
)
{
const
mapInfo
=
getMapInfo
()
const
wgs84Map
=
[
MapType
.
GOOGLE
]
if
(
type
.
toUpperCase
()
===
'
WGS84
'
||
wgs84Map
.
includes
(
mapInfo
.
type
)
||
skip
)
{
return
Promise
.
resolve
(
coords
)
}
if
(
mapInfo
.
type
===
MapType
.
QQ
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
getJSONP
(
`https://apis.map.qq.com/jsapi?qt=translate&type=1&points=
${
coords
.
longitude
}
,
${
coords
.
latitude
}
&key=
${
mapInfo
.
key
}
&output=jsonp&pf=jsapi&ref=jsapi`
,
{
callback
:
'
cb
'
},
res
=>
{
if
(
'
detail
'
in
res
&&
'
points
'
in
res
.
detail
&&
res
.
detail
.
points
.
length
)
{
const
location
=
res
.
detail
.
points
[
0
]
resolve
({
longitude
:
location
.
lng
,
latitude
:
location
.
lat
,
altitude
:
coords
.
altitude
,
accuracy
:
coords
.
accuracy
,
altitudeAccuracy
:
coords
.
altitudeAccuracy
,
heading
:
coords
.
heading
,
speed
:
coords
.
speed
})
}
else
{
reject
(
new
Error
(
'
translate geo fail
'
))
}
},
()
=>
reject
(
new
Error
(
'
translate geo fail
'
))
)
})
}
if
(
mapInfo
.
type
===
MapType
.
AMAP
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
loadMaps
([],
()
=>
{
window
.
AMap
.
convertFrom
(
[
coords
.
longitude
,
coords
.
latitude
],
'
gps
'
,
(
_
,
res
)
=>
{
if
(
res
.
info
===
'
ok
'
&&
res
.
locations
.
length
)
{
const
{
lat
,
lng
}
=
res
.
locations
[
0
]
resolve
({
longitude
:
lng
,
latitude
:
lat
,
altitude
:
coords
.
altitude
,
accuracy
:
coords
.
accuracy
,
altitudeAccuracy
:
coords
.
altitudeAccuracy
,
heading
:
coords
.
heading
,
speed
:
coords
.
speed
})
}
else
{
reject
(
new
Error
(
'
translate geo fail
'
))
}
}
)
})
})
}
}
src/platforms/h5/service/api/location/get-location.js
浏览文件 @
bba3c53a
...
...
@@ -3,9 +3,9 @@ import {
}
from
'
../../../helpers/get-jsonp
'
import
{
MapType
,
getMapInfo
getMapInfo
,
translateGeo
}
from
'
../../../helpers/location
'
import
{
loadMaps
}
from
'
../../../view/components/map/maps
'
/**
* 获取定位信息
...
...
@@ -73,62 +73,22 @@ export function getLocation ({
}
})
}).
then
((
coords
,
skip
)
=>
{
const
wgs84Map
=
[
MapType
.
GOOGLE
]
if
(
type
.
toUpperCase
()
===
'
WGS84
'
||
wgs84Map
.
includes
(
mapInfo
.
type
)
||
skip
)
{
return
coords
}
if
(
mapInfo
.
type
===
MapType
.
QQ
)
{
return
new
Promise
((
resolve
)
=>
{
getJSONP
(
`https://apis.map.qq.com/jsapi?qt=translate&type=1&points=
${
coords
.
longitude
}
,
${
coords
.
latitude
}
&key=
${
mapInfo
.
key
}
&output=jsonp&pf=jsapi&ref=jsapi`
,
{
callback
:
'
cb
'
},
(
res
)
=>
{
if
(
'
detail
'
in
res
&&
'
points
'
in
res
.
detail
&&
res
.
detail
.
points
.
length
)
{
const
location
=
res
.
detail
.
points
[
0
]
resolve
(
Object
.
assign
({},
coords
,
{
longitude
:
location
.
lng
,
latitude
:
location
.
lat
}))
}
else
{
resolve
(
coords
)
}
},
()
=>
resolve
(
coords
))
})
}
if
(
mapInfo
.
type
===
MapType
.
AMAP
)
{
return
new
Promise
((
resolve
)
=>
{
loadMaps
([],
()
=>
{
window
.
AMap
.
convertFrom
(
[
coords
.
longitude
,
coords
.
latitude
],
'
gps
'
,
(
_
,
res
)
=>
{
if
(
res
.
info
===
'
ok
'
&&
res
.
locations
.
length
)
{
const
{
lat
,
lng
}
=
res
.
locations
[
0
]
resolve
(
Object
.
assign
({},
coords
,
{
longitude
:
lng
,
latitude
:
lat
})
)
}
else
{
resolve
(
coords
)
}
}
)
})
})
}
}).
then
(
coords
=>
{
invoke
(
callbackId
,
Object
.
assign
(
coords
,
{
translateGeo
(
type
,
coords
,
skip
)
.
then
(
coords
=>
{
invoke
(
callbackId
,
Object
.
assign
(
coords
,
{
errMsg
:
'
getLocation:ok
'
,
verticalAccuracy
:
coords
.
altitudeAccuracy
||
0
,
// 无专门水平精度,使用位置精度替代
horizontalAccuracy
:
coords
.
accuracy
}))
}).
catch
(
error
=>
{
})
)
})
.
catch
(
error
=>
{
invoke
(
callbackId
,
{
errMsg
:
'
getLocation:fail
'
+
error
.
message
})
})
})
}
src/platforms/h5/service/api/location/location-change.js
浏览文件 @
bba3c53a
import
{
translateGeo
}
from
'
../../../helpers/location
'
const
{
invokeCallbackHandler
:
invoke
}
=
UniServiceJSBridge
const
callbackIds
=
[]
const
callbackOnErrorIds
=
[]
...
...
@@ -7,18 +9,27 @@ let watchId
/**
* 开始更新定位
*/
export
function
startLocationUpdate
()
{
export
function
startLocationUpdate
(
{
type
=
'
wgs84
'
}
)
{
if
(
navigator
.
geolocation
)
{
watchId
=
navigator
.
geolocation
.
watchPosition
(
res
=>
{
translateGeo
(
type
,
res
.
coords
)
.
then
((
coords
)
=>
{
callbackIds
.
forEach
(
callbackId
=>
{
invoke
(
callbackId
,
res
.
coords
)
invoke
(
callbackId
,
coords
)
})
}).
catch
(
error
=>
{
callbackOnErrorIds
.
forEach
(
callbackId
=>
{
invoke
(
callbackId
,
{
errMsg
:
'
onLocationChange:fail
'
+
error
.
message
})
})
})
},
error
=>
{
callbackOnErrorIds
.
forEach
(
callbackId
=>
{
invoke
(
callbackId
,
{
errMsg
:
'
getLocation
:fail
'
+
error
.
message
errMsg
:
'
onLocationChange
:fail
'
+
error
.
message
})
})
}
...
...
@@ -26,7 +37,7 @@ export function startLocationUpdate () {
}
else
{
callbackOnErrorIds
.
forEach
(
callbackId
=>
{
invoke
(
callbackId
,
{
errMsg
:
'
getLocation
:fail device nonsupport geolocation
'
errMsg
:
'
onLocationChange
:fail device nonsupport geolocation
'
})
})
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录