location.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import QQMapWX from '@/lib/qqmap-wx-jssdk.js'
  2. const qqmapsdk = new QQMapWX({
  3. key: 'TRLBZ-J3Z65-QDNIU-IS4SF-2W7HH-WFBTR',
  4. })
  5. export interface LocationResult {
  6. latitude: number
  7. longitude: number
  8. address?: string
  9. raw?: any
  10. }
  11. export function getLocation(
  12. type: UniApp.GetLocationOptions['type'] = 'gcj02'
  13. ): Promise<LocationResult> {
  14. return new Promise((resolve, reject) => {
  15. uni.getLocation({
  16. type,
  17. success(location) {
  18. qqmapsdk.reverseGeocoder({
  19. location: {
  20. latitude: location.latitude,
  21. longitude: location.longitude,
  22. },
  23. success(res: any) {
  24. resolve({
  25. latitude: location.latitude,
  26. longitude: location.longitude,
  27. address: res?.result?.address,
  28. raw: res,
  29. })
  30. },
  31. fail(err: any) {
  32. reject(err)
  33. },
  34. })
  35. },
  36. fail(error) {
  37. handleLocationAuth(error).then(resolve).catch(reject)
  38. },
  39. })
  40. })
  41. }
  42. function handleLocationAuth(error: unknown): Promise<LocationResult> {
  43. return new Promise((resolve, reject) => {
  44. uni.getSetting({
  45. success(setting) {
  46. if (setting.authSetting['scope.userLocation']) {
  47. reject(error)
  48. return
  49. }
  50. uni.showModal({
  51. title: '友情提示',
  52. content: '小程序需要获取您的定位功能才可使用',
  53. success(modal) {
  54. if (!modal.confirm) {
  55. reject(error)
  56. return
  57. }
  58. uni.openSetting({
  59. success(openRes) {
  60. resolve({
  61. latitude: 0,
  62. longitude: 0,
  63. raw: openRes,
  64. })
  65. },
  66. fail(err) {
  67. reject(err)
  68. },
  69. })
  70. },
  71. })
  72. },
  73. fail(err) {
  74. reject(err)
  75. },
  76. })
  77. })
  78. }