一、文章背景
最近在开发一个充电桩查询小程序,需要实现定位功能。踩了不少坑,也积累了一些经验。今天就把完整的实现过程分享出来,希望能帮助到正在开发类似功能的朋友。
- 打开小程序自动获取你的城市
- 可以手动切换其他城市
- 地图自动定位到选定城市
- 一键回到你的当前位置
二、技术栈
- 框架: Uni-app (Vue 3 Composition API)
- 状态管理: Pinia
- 地图组件: Uni-app 原生 map 组件
- 地图服务: 高德地图 API
- 坐标系统: GCJ02(火星坐标系)
三、数据流图
┌─────────────────┐
│ 首页导航栏 │ ← 获取用户位置
│ homeNavbar.vue │
└────────┬────────┘
│ 自动定位
↓
┌─────────────────┐ Pinia Store ┌─────────────────┐
│ 地图页面 │ ◄─────────────────► │ 状态管理 │
│ map/index.vue │ 当前城市/真实城市 │ app.js │
└────────┬────────┘ └─────────────────┘
│ ↑
│ 手动选择城市 │
↓ │
┌─────────────────┐ │
│ 城市选择页面 │ ───────────────────────────┘
│citySelect/index │ 更新城市
└─────────────────┘
四、定位功能实现详解
4.1 获取定位权限
const getLocation = () => {
// 先检查定位权限
uni.getSetting({
success: (res) => {
if (res.authSetting['scope.userLocation']) {
// 已授权,直接获取定位
authorizeLocation()
} else {
// 未授权,先请求授权
uni.authorize({
scope: 'scope.userLocation',
success: () => authorizeLocation(),
fail: () => {
// 显示提示,引导用户手动开启
uni.showModal({
title: '提示',
content: '需要获取您的位置信息以显示当前城市,请在设置中开启定位权限',
confirmText: '去设置',
success: (modalRes) => {
if (modalRes.confirm) {
...
}
}
})
}
})
}
}
})
}
执行流程图
┌──────────────┐
│ 打开小程序 │
└──────┬───────┘
↓
┌──────────────┐
│ onMounted │
└──────┬───────┘
↓
┌──────────────┐
│ getLocation()│
└──────┬───────┘
↓
┌──────────────┐
│ getSetting() │
└──────┬───────┘
↓
┌──────────────┐
│ 已授权? │
└──┬───────┬──┘
│是 │否
↓ ↓
┌─────┐ ┌─────────┐
│授权 │ │authorize│
│失败 │ │ Location│
└─────┘ └────┬────┘
↓
┌─────────────┐
│ 显示设置弹窗 │
└─────────────┘
4.2 获取用户经纬度
const authorizeLocation = () => {
uni.getLocation({
type: 'gcj02', // 使用火星坐标系
altitude: true, // 获取高度信息
isHighAccuracy: true // 开启高精度定位
}).then((res) => {
console.log('获取定位成功:', res)
}).catch(err => {
console.log('获取定位失败:', err)
appStore.setCurrentCity('定位失败')
})
}
参数说明
| 参数 | 值 | 说明 |
|---|---|---|
type | 'gcj02' | 使用 GCJ02 坐标系,符合国内地图规范 |
altitude | true | 获取海拔信息 |
isHighAccuracy | true | 开启高精度定位模式 |
4.3 逆地理编码获取城市名称
const getCityByLocation = (lat, lng) => {
uni.request({
url: 'https://restapi.amap.com/v3/geocode/regeo',
data: {
location: `${lng},${lat}`, // 高德地图使用 经度,纬度 顺序
key: '你的高德API密钥',
extensions: 'base' // base: 基础定位信息
},
success: (res) => {
const city = res.data.regeocode.addressComponent.city
updateCityInfo(city.replace('市', '')
}
})
}
数据处理流程
┌─────────────────┐
│ 经纬度: │
│ lat: 22.547 │
│ lng: 114.086 │
└────────┬────────┘
↓
┌─────────────────┐
│ 高德逆地理编码 │
└────────┬────────┘
↓
┌─────────────────┐
│ addressComponent│
│ - province: 广东│
│ - city: 深圳 │
│ - district: 南山│
└────────┬────────┘
↓
┌─────────────────┐
│ 去除"市"后缀 │
│ 结果: "深圳" │
└────────┬────────┘
↓
┌─────────────────┐
│ 存储到 appStore │
│ userRealCity: │
│ "深圳" │
└─────────────────┘
4.4 城市选择功能
const handleSelectCity = (city) => {
console.log('选择城市:', city)
// 更新 appStore 中的城市
appStore.setCurrentCity(city)
// 标记已经手动选择过城市
appStore.setHasSelectedCity(true)
// 设置需要定位到新城市的标志
appStore.setNeedRelocate(true)
// 返回上一页
uni.navigateBack({
delta: 1,
})
}
关键状态标志
| 状态变量 | 类型 | 说明 |
|---|---|---|
currentCity | ref | 当前显示的城市名称 |
userRealCity | ref | 用户真实所在城市(定位获得) |
hasSelectedCity | ref | 是否手动选择过城市 |
needRelocate | ref | 是否需要重新定位到新城市 |
4.5 地图定位到城市中心
const getCityLocation = (cityName) => {
// 城市坐标数据库
const cityCoordinates = {
'深圳': { lng: 114.0859, lat: 22.5470 },
'北京': { lng: 116.4074, lat: 39.9042 },
'上海': { lng: 121.4737, lat: 31.2304 },
// ... 更多城市
}
const coords = cityCoordinates[cityName]
if (coords) {
// 更新地图中心点
lng.value = coords.lng
lat.value = coords.lat
// 使用地图 API 移动到新位置
uni.createMapContext("map", _this).moveToLocation({
latitude: coords.lat,
longitude: coords.lng,
success: () => {
console.log('地图移动成功')
}
})
uni.showToast({
title: `定位到${cityName}`,
icon: 'success'
})
}
}
城市坐标数据库设计
const cityCoordinates = {
'城市名': {
lng: 经度,
lat: 纬度
}
}
优势:
- 响应速度快,无需网络请求
- 数据稳定,不受第三方 API 限制
- 支持离线使用
4.6 重新定位到用户当前位置
const backMyLocation = () => {
console.log('重新获取用户位置')
// 清除手动选择城市的标志
appStore.setHasSelectedCity(false)
uni.getLocation({
type: 'gcj02',
altitude: true,
isHighAccuracy: true
}).then((res) => {
if (res.errMsg === 'getLocation:ok') {
// 更新地图坐标
lng.value = res.longitude
lat.value = res.latitude
// 获取城市名称并更新
getCityByLocation(res.latitude, res.longitude)
}
})
}
4.7 注意事项
- 开发版可以忽略域名白名单(开发者工具中可关闭域名校验)
- 正式版必须配置白名单
- 确保使用 HTTPS 协议
- 高德 API Key 需要在高德开放平台申请并配置域名白名单
域名配置对比
| 环境 | 域名校验 | 配置要求 |
|---|---|---|
| 开发工具 | 可关闭 | 无需配置 |
| 体验版 | 开启 | 需要配置 |
| 正式版 | 开启 | 必须配置 |
六、最佳实践总结
6.1 定位权限处理
// ✅ 推荐:完整的权限处理流程
const getLocation = () => {
uni.getSetting({
success: (res) => {
if (res.authSetting['scope.userLocation']) {
authorizeLocation()
} else {
uni.authorize({
scope: 'scope.userLocation',
success: () => authorizeLocation(),
fail: () => {
uni.showModal({
title: '提示',
content: '需要位置权限',
confirmText: '去设置',
success: (modalRes) => {
if (modalRes.confirm) {
uni.openSetting()
}
}
})
}
})
}
}
})
}
6.2 城市坐标存储
// ✅ 推荐:使用内置坐标数据库
const cityCoordinates = {
'深圳': { lng: 114.0859, lat: 22.5470 },
'北京': { lng: 116.4074, lat: 39.9042 },
// ...
}
// ❌ 不推荐:每次都调用地理编码 API
// 性能差,依赖网络,有配额限制
6.3 延迟调用地图 API
// ✅ 推荐:使用 nextTick + setTimeout
nextTick(() => {
setTimeout(() => {
getCityLocation(newCity)
}, 300)
})
// ❌ 不推荐:直接调用
// 可能导致地图组件未准备好
getCityLocation(newCity)
6.4 状态管理
// ✅ 推荐:使用多个状态标志
const hasSelectedCity = ref(false) // 区分自动定位和手动选择
const userRealCity = ref('') // 记录用户真实位置
const needRelocate = ref(false) // 控制定位时机
// ❌ 不推荐:只使用一个状态
const currentCity = ref('定位中...') // 无法区分场景
七、常见问题 FAQ
Q1: 为什么使用 GCJ02 坐标系?
A: GCJ02 是中国官方使用的火星坐标系,国内地图服务(百度、高德、腾讯)都使用该坐标系。使用 WGS84(GPS 坐标)会导致位置偏移。
Q2: 逆地理编码返回的城市为空怎么办?
A: 某些情况下 addressComponent.city 可能为空(如直辖市),需要回退到 addressComponent.province:
const city = addressComponent.city || addressComponent.province || '未知城市'
Q3: 如何提高定位精度?
A: 在 uni.getLocation 中设置:
isHighAccuracy: true- 开启高精度模式altitude: true- 获取高度信息- 建议在空旷、信号好的地方测试
Q4: 城市坐标数据库从哪里获取?
A:
- 高德地图开放平台:lbs.amap.com/api/webserv…
- 百度地图拾取坐标:api.map.baidu.com/lbsapi/getp…
- 坐标转换工具:www.gpsspg.com/maps.htm
Q5: 如何支持港澳台地区?
A: 在坐标数据库中添加港澳台城市坐标,并确保高德 API Key 支持海外定位。
八、调试技巧
8.1 使用 console.log 追踪状态
console.log('========== 开始获取定位 ==========')
console.log('当前城市:', appStore.currentCity)
console.log('用户真实城市:', appStore.userRealCity)
console.log('是否手动选择:', appStore.hasSelectedCity)
console.log('=====================================')
8.2 使用开发者工具模拟定位
微信开发者工具 → 调试器 → Sensors → Location → 模拟位置
8.3 查看网络请求
微信开发者工具 → 调试器 → Network → 查看 uni.request 请求
九、城市坐标数据库(核心数据)
这是整个定位功能的基础,包含了全国主要城市的经纬度坐标。腾讯地图和高德地图都使用 GCJ02 坐标系,数据可以共用。
export const CITY_COORDINATES = {
// 直辖市
'北京': { lng: 116.4074, lat: 39.9042 },
'上海': { lng: 121.4737, lat: 31.2304 },
'天津': { lng: 117.2008, lat: 39.0842 },
'重庆': { lng: 106.5516, lat: 29.5630 },
// 广东省
'广州': { lng: 113.2644, lat: 23.1291 },
'深圳': { lng: 114.0859, lat: 22.5470 },
'珠海': { lng: 113.5767, lat: 22.2707 },
'汕头': { lng: 116.7286, lat: 23.3839 },
'佛山': { lng: 113.1227, lat: 23.0288 },
'韶关': { lng: 113.5975, lat: 24.8104 },
'湛江': { lng: 110.3648, lat: 21.2749 },
'肇庆': { lng: 112.4725, lat: 23.0515 },
'江门': { lng: 113.0949, lat: 22.5904 },
'茂名': { lng: 110.9192, lat: 21.6639 },
'惠州': { lng: 114.4164, lat: 23.1123 },
'梅州': { lng: 116.1176, lat: 24.2991 },
'汕尾': { lng: 115.3642, lat: 22.7745 },
'河源': { lng: 114.6978, lat: 23.7463 },
'阳江': { lng: 111.9751, lat: 21.8592 },
'清远': { lng: 113.0512, lat: 23.6850 },
'东莞': { lng: 113.7462, lat: 23.0462 },
'中山': { lng: 113.3824, lat: 22.5211 },
'潮州': { lng: 116.6323, lat: 23.6617 },
'揭阳': { lng: 116.3557, lat: 23.5438 },
'云浮': { lng: 112.0445, lat: 22.9298 },
// 江苏省
'南京': { lng: 118.7969, lat: 32.0603 },
'无锡': { lng: 120.3017, lat: 31.5747 },
'徐州': { lng: 117.1848, lat: 34.2618 },
'常州': { lng: 119.9469, lat: 31.7728 },
'苏州': { lng: 120.6196, lat: 31.3179 },
'南通': { lng: 120.8646, lat: 32.0162 },
'连云港': { lng: 119.1788, lat: 34.6000 },
'淮安': { lng: 119.0215, lat: 33.5975 },
'盐城': { lng: 120.1400, lat: 33.3776 },
'扬州': { lng: 119.4210, lat: 32.3932 },
'镇江': { lng: 119.4528, lat: 32.2044 },
'泰州': { lng: 119.9152, lat: 32.4849 },
'宿迁': { lng: 118.2752, lat: 33.9630 },
// 浙江省
'杭州': { lng: 120.1551, lat: 30.2741 },
'宁波': { lng: 121.5498, lat: 29.8683 },
'温州': { lng: 120.6721, lat: 28.0006 },
'嘉兴': { lng: 120.7509, lat: 30.7627 },
'湖州': { lng: 120.1024, lat: 30.8672 },
'绍兴': { lng: 120.5821, lat: 30.0120 },
'金华': { lng: 119.6495, lat: 29.0895 },
'衢州': { lng: 118.8726, lat: 28.9417 },
'舟山': { lng: 122.1069, lat: 30.0160 },
'台州': { lng: 121.4286, lat: 28.6614 },
'丽水': { lng: 119.9218, lat: 28.4520 },
// 山东省
'济南': { lng: 117.1205, lat: 36.6510 },
'青岛': { lng: 120.3826, lat: 36.0671 },
'淄博': { lng: 118.0476, lat: 36.8149 },
'枣庄': { lng: 117.5570, lat: 34.8564 },
'东营': { lng: 118.6647, lat: 37.4346 },
'烟台': { lng: 121.3914, lat: 37.5393 },
'潍坊': { lng: 119.1071, lat: 36.7093 },
'济宁': { lng: 116.5872, lat: 35.4154 },
'泰安': { lng: 117.1291, lat: 36.1950 },
'威海': { lng: 122.1164, lat: 37.5097 },
'日照': { lng: 119.4619, lat: 35.4286 },
'临沂': { lng: 118.3565, lat: 35.1047 },
'德州': { lng: 116.3074, lat: 37.4540 },
'聊城': { lng: 115.9804, lat: 36.4560 },
'滨州': { lng: 118.0165, lat: 37.3835 },
'菏泽': { lng: 115.4694, lat: 35.2465 },
// 辽宁省
'沈阳': { lng: 123.4315, lat: 41.8057 },
'大连': { lng: 121.6147, lat: 38.9140 },
'鞍山': { lng: 122.9956, lat: 41.1106 },
'抚顺': { lng: 123.9211, lat: 41.8759 },
'本溪': { lng: 123.7705, lat: 41.2979 },
'丹东': { lng: 124.3830, lat: 40.1243 },
'锦州': { lng: 121.1357, lat: 41.1193 },
'营口': { lng: 122.2352, lat: 40.6674 },
'阜新': { lng: 121.6481, lat: 42.0118 },
'辽阳': { lng: 123.1815, lat: 41.2694 },
'盘锦': { lng: 122.0696, lat: 41.1245 },
'铁岭': { lng: 123.8443, lat: 42.2906 },
'朝阳': { lng: 120.4512, lat: 41.5768 },
'葫芦岛': { lng: 120.8564, lat: 40.7556 },
// 福建省
'福州': { lng: 119.2965, lat: 26.0745 },
'厦门': { lng: 118.0894, lat: 24.4798 },
'莆田': { lng: 119.0075, lat: 25.4310 },
'三明': { lng: 117.6350, lat: 26.2654 },
'泉州': { lng: 118.5894, lat: 24.9089 },
'漳州': { lng: 117.6618, lat: 24.5109 },
'南平': { lng: 118.1785, lat: 26.6356 },
'龙岩': { lng: 117.0298, lat: 25.0916 },
'宁德': { lng: 119.5271, lat: 26.6592 },
// 河北省
'石家庄': { lng: 114.5149, lat: 38.0423 },
'唐山': { lng: 118.1754, lat: 39.6351 },
'秦皇岛': { lng: 119.5866, lat: 39.9425 },
'邯郸': { lng: 114.4907, lat: 36.6127 },
'邢台': { lng: 114.5088, lat: 37.0682 },
'保定': { lng: 115.4823, lat: 38.8677 },
'张家口': { lng: 114.8841, lat: 40.8119 },
'承德': { lng: 117.9392, lat: 40.9762 },
'沧州': { lng: 116.8575, lat: 38.3106 },
'廊坊': { lng: 116.7044, lat: 39.5239 },
'衡水': { lng: 115.6660, lat: 37.7351 },
// 河南省
'郑州': { lng: 113.6253, lat: 34.7466 },
'开封': { lng: 114.3414, lat: 34.7972 },
'洛阳': { lng: 112.4345, lat: 34.6630 },
'平顶山': { lng: 113.3077, lat: 33.7352 },
'安阳': { lng: 114.3525, lat: 36.1034 },
'鹤壁': { lng: 114.2954, lat: 35.8982 },
'新乡': { lng: 113.8836, lat: 35.3026 },
'焦作': { lng: 113.2383, lat: 35.2390 },
'濮阳': { lng: 115.0413, lat: 35.7682 },
'许昌': { lng: 113.8261, lat: 34.0230 },
'漯河': { lng: 114.0264, lat: 33.5759 },
'三门峡': { lng: 111.1941, lat: 34.7773 },
'南阳': { lng: 112.5409, lat: 32.9991 },
'商丘': { lng: 115.6505, lat: 34.4371 },
'信阳': { lng: 114.0750, lat: 32.1233 },
'周口': { lng: 114.6496, lat: 33.6204 },
'驻马店': { lng: 114.0247, lat: 32.9802 },
// 湖北省
'武汉': { lng: 114.3054, lat: 30.5931 },
'黄石': { lng: 115.0770, lat: 30.2201 },
'十堰': { lng: 110.7879, lat: 32.6469 },
'宜昌': { lng: 111.2908, lat: 30.7026 },
'襄阳': { lng: 112.1442, lat: 32.0424 },
'鄂州': { lng: 114.8906, lat: 30.3965 },
'荆门': { lng: 112.2043, lat: 31.0354 },
'孝感': { lng: 113.9267, lat: 30.9264 },
'荆州': { lng: 112.2381, lat: 30.3268 },
'黄冈': { lng: 114.8794, lat: 30.4477 },
'咸宁': { lng: 114.3289, lat: 29.8328 },
'随州': { lng: 113.3738, lat: 31.7175 },
'恩施': { lng: 109.4870, lat: 30.2831 },
// 湖南省
'长沙': { lng: 112.9388, lat: 28.2282 },
'株洲': { lng: 113.1517, lat: 27.8358 },
'湘潭': { lng: 112.9440, lat: 27.8297 },
'衡阳': { lng: 112.6077, lat: 26.9004 },
'邵阳': { lng: 111.4692, lat: 27.2378 },
'岳阳': { lng: 113.1329, lat: 29.3703 },
'常德': { lng: 111.6913, lat: 29.0402 },
'张家界': { lng: 110.4799, lat: 29.1274 },
'益阳': { lng: 112.3550, lat: 28.5700 },
'郴州': { lng: 113.0321, lat: 25.7936 },
'永州': { lng: 111.6080, lat: 26.4345 },
'怀化': { lng: 109.9782, lat: 27.5501 },
'娄底': { lng: 112.0085, lat: 27.7281 },
// 四川省
'成都': { lng: 104.0665, lat: 30.5728 },
'自贡': { lng: 104.7734, lat: 29.3528 },
'攀枝花': { lng: 101.7160, lat: 26.5804 },
'泸州': { lng: 105.4434, lat: 28.8891 },
'德阳': { lng: 104.3986, lat: 31.1280 },
'绵阳': { lng: 104.7417, lat: 31.4640 },
'广元': { lng: 105.8298, lat: 32.4337 },
'遂宁': { lng: 105.5713, lat: 30.5133 },
'内江': { lng: 105.0581, lat: 29.5803 },
'乐山': { lng: 103.7613, lat: 29.5820 },
'南充': { lng: 106.0823, lat: 30.7953 },
'眉山': { lng: 103.8315, lat: 30.0483 },
'宜宾': { lng: 104.6308, lat: 28.7602 },
'广安': { lng: 106.6334, lat: 30.4564 },
'达州': { lng: 107.5023, lat: 31.2095 },
'雅安': { lng: 103.0010, lat: 29.9877 },
'巴中': { lng: 106.7537, lat: 31.8584 },
'资阳': { lng: 104.6419, lat: 30.1222 },
// 安徽省
'合肥': { lng: 117.2272, lat: 31.8206 },
'芜湖': { lng: 118.3765, lat: 31.3263 },
'蚌埠': { lng: 117.3632, lat: 32.9397 },
'淮南': { lng: 117.0184, lat: 32.6476 },
'马鞍山': { lng: 118.5079, lat: 31.6894 },
'淮北': { lng: 116.7947, lat: 33.9718 },
'铜陵': { lng: 117.8166, lat: 30.9299 },
'安庆': { lng: 117.0435, lat: 30.5088 },
'黄山': { lng: 118.3173, lat: 29.7092 },
'滁州': { lng: 118.3163, lat: 32.3036 },
'阜阳': { lng: 115.8197, lat: 32.8970 },
'宿州': { lng: 116.9841, lat: 33.6339 },
'六安': { lng: 116.5077, lat: 31.7529 },
'亳州': { lng: 115.7829, lat: 33.8693 },
'池州': { lng: 117.4892, lat: 30.6560 },
'宣城': { lng: 118.7577, lat: 30.9457 },
// 广西壮族自治区
'南宁': { lng: 108.3200, lat: 22.8240 },
'柳州': { lng: 109.4117, lat: 24.3146 },
'桂林': { lng: 110.2849, lat: 25.2736 },
'梧州': { lng: 111.2976, lat: 23.4748 },
'北海': { lng: 109.1192, lat: 21.4733 },
'防城港': { lng: 108.3455, lat: 21.6146 },
'钦州': { lng: 108.6242, lat: 21.9672 },
'贵港': { lng: 109.6021, lat: 23.0936 },
'玉林': { lng: 110.1544, lat: 22.6314 },
'百色': { lng: 106.6163, lat: 23.8977 },
'贺州': { lng: 111.5521, lat: 24.4141 },
'河池': { lng: 108.0621, lat: 24.6959 },
'来宾': { lng: 109.2298, lat: 23.7338 },
'崇左': { lng: 107.3539, lat: 22.4041 },
// 黑龙江省
'哈尔滨': { lng: 126.5349, lat: 45.8038 },
'齐齐哈尔': { lng: 123.9579, lat: 47.3481 },
'鸡西': { lng: 130.9759, lat: 45.3000 },
'鹤岗': { lng: 130.2775, lat: 47.3321 },
'双鸭山': { lng: 131.1573, lat: 46.6435 },
'大庆': { lng: 125.1127, lat: 46.5907 },
'伊春': { lng: 128.8994, lat: 47.7248 },
'佳木斯': { lng: 130.3616, lat: 46.8096 },
'七台河': { lng: 131.0156, lat: 45.7753 },
'牡丹江': { lng: 129.6186, lat: 44.5830 },
'黑河': { lng: 127.4990, lat: 50.2496 },
'绥化': { lng: 126.9929, lat: 46.6374 },
// 吉林省
'长春': { lng: 125.3235, lat: 43.8171 },
'吉林': { lng: 126.5530, lat: 43.8436 },
'四平': { lng: 124.3708, lat: 43.1703 },
'辽源': { lng: 125.1453, lat: 42.9027 },
'通化': { lng: 125.9365, lat: 41.7212 },
'白山': { lng: 126.4278, lat: 41.9425 },
'松原': { lng: 124.8236, lat: 45.1182 },
'白城': { lng: 122.8411, lat: 45.6190 },
'延边': { lng: 129.5132, lat: 42.9048 },
// 江西省
'南昌': { lng: 115.8579, lat: 28.6829 },
'景德镇': { lng: 117.1784, lat: 29.2686 },
'萍乡': { lng: 113.8512, lat: 27.6229 },
'九江': { lng: 115.9928, lat: 29.7120 },
'新余': { lng: 114.9308, lat: 27.8108 },
'鹰潭': { lng: 117.0338, lat: 28.2386 },
'赣州': { lng: 114.9359, lat: 25.8453 },
'吉安': { lng: 114.9865, lat: 27.1120 },
'宜春': { lng: 114.3911, lat: 27.8043 },
'抚州': { lng: 116.3584, lat: 27.9839 },
'上饶': { lng: 117.9712, lat: 28.4444 },
// 山西省
'太原': { lng: 112.5489, lat: 37.8706 },
'大同': { lng: 113.3014, lat: 40.0768 },
'阳泉': { lng: 113.5833, lat: 37.8612 },
'长治': { lng: 113.1136, lat: 36.1911 },
'晋城': { lng: 112.8513, lat: 35.4976 },
'朔州': { lng: 112.4333, lat: 39.3313 },
'晋中': { lng: 112.7365, lat: 37.6965 },
'运城': { lng: 111.0039, lat: 35.0228 },
'忻州': { lng: 112.7335, lat: 38.4177 },
'临汾': { lng: 111.5180, lat: 36.0842 },
'吕梁': { lng: 111.1343, lat: 37.5244 },
// 贵州省
'贵阳': { lng: 106.6302, lat: 26.6477 },
'六盘水': { lng: 104.8467, lat: 26.5846 },
'遵义': { lng: 106.9373, lat: 27.7066 },
'安顺': { lng: 105.9322, lat: 26.2455 },
'毕节': { lng: 105.2850, lat: 27.3017 },
'铜仁': { lng: 109.1916, lat: 27.7183 },
'黔西南': { lng: 104.8980, lat: 25.0881 },
'黔东南': { lng: 107.9775, lat: 26.5834 },
'黔南': { lng: 107.5172, lat: 26.2582 },
// 云南省
'昆明': { lng: 102.8329, lat: 24.8801 },
'曲靖': { lng: 103.7978, lat: 25.5016 },
'玉溪': { lng: 102.5439, lat: 24.3505 },
'保山': { lng: 99.1671, lat: 25.1118 },
'昭通': { lng: 103.7172, lat: 27.3370 },
'丽江': { lng: 100.2330, lat: 26.8721 },
'普洱': { lng: 100.9723, lat: 22.7773 },
'临沧': { lng: 100.0865, lat: 23.8866 },
'楚雄': { lng: 101.5460, lat: 25.0419 },
'红河': { lng: 103.3841, lat: 23.3668 },
'文山': { lng: 104.2440, lat: 23.3692 },
'西双版纳': { lng: 100.7979, lat: 22.0017 },
'大理': { lng: 100.2257, lat: 25.5894 },
'德宏': { lng: 98.5784, lat: 24.4367 },
'怒江': { lng: 98.8543, lat: 25.8509 },
'迪庆': { lng: 99.7065, lat: 27.8269 },
// 陕西省
'西安': { lng: 108.9402, lat: 34.3416 },
'铜川': { lng: 108.9796, lat: 34.9166 },
'宝鸡': { lng: 107.1449, lat: 34.3693 },
'咸阳': { lng: 108.7051, lat: 34.3334 },
'渭南': { lng: 109.5029, lat: 34.4994 },
'延安': { lng: 109.4908, lat: 36.5965 },
'汉中': { lng: 107.0286, lat: 33.0777 },
'榆林': { lng: 109.7412, lat: 38.2902 },
'安康': { lng: 109.0293, lat: 32.6903 },
'商洛': { lng: 109.9398, lat: 33.8683 },
// 甘肃省
'兰州': { lng: 103.8236, lat: 36.0594 },
'嘉峪关': { lng: 98.2773, lat: 39.7865 },
'金昌': { lng: 102.1879, lat: 38.5142 },
'白银': { lng: 104.1736, lat: 36.5457 },
'天水': { lng: 105.7250, lat: 34.5785 },
'武威': { lng: 102.6347, lat: 37.9298 },
'张掖': { lng: 100.4555, lat: 38.9329 },
'平凉': { lng: 106.6847, lat: 35.5428 },
'酒泉': { lng: 98.5108, lat: 39.7440 },
'庆阳': { lng: 107.6384, lat: 35.7342 },
'定西': { lng: 104.6260, lat: 35.5796 },
'陇南': { lng: 104.9294, lat: 33.3886 },
'临夏': { lng: 103.2120, lat: 35.5994 },
'甘南': { lng: 102.9110, lat: 34.9865 },
// 内蒙古自治区
'呼和浩特': { lng: 111.7492, lat: 40.8426 },
'包头': { lng: 109.8404, lat: 40.6575 },
'乌海': { lng: 106.8256, lat: 39.6737 },
'赤峰': { lng: 118.9568, lat: 42.2753 },
'通辽': { lng: 122.2631, lat: 43.6174 },
'鄂尔多斯': { lng: 109.9903, lat: 39.8172 },
'呼伦贝尔': { lng: 119.7582, lat: 49.2153 },
'巴彦淖尔': { lng: 107.4165, lat: 40.7574 },
'乌兰察布': { lng: 113.1145, lat: 41.0341 },
'兴安盟': { lng: 122.0703, lat: 46.0762 },
'锡林郭勒': { lng: 116.0910, lat: 43.9440 },
'阿拉善': { lng: 105.7284, lat: 38.8515 },
// 新疆维吾尔自治区
'乌鲁木齐': { lng: 87.6168, lat: 43.8256 },
'克拉玛依': { lng: 84.8739, lat: 45.5959 },
'吐鲁番': { lng: 89.1841, lat: 42.9476 },
'哈密': { lng: 93.5132, lat: 42.8332 },
'昌吉': { lng: 87.3040, lat: 44.0146 },
'博尔塔拉': { lng: 82.0748, lat: 44.9033 },
'巴音郭楞': { lng: 86.1510, lat: 41.7686 },
'阿克苏': { lng: 80.2651, lat: 41.1707 },
'克孜勒苏': { lng: 76.1728, lat: 39.7134 },
'喀什': { lng: 75.9898, lat: 39.4679 },
'和田': { lng: 79.9253, lat: 37.1107 },
'伊犁': { lng: 81.3179, lat: 43.9219 },
'塔城': { lng: 82.9857, lat: 46.7463 },
'阿勒泰': { lng: 88.1396, lat: 47.8484 },
// 青海省
'西宁': { lng: 101.7782, lat: 36.6171 },
'海东': { lng: 102.1033, lat: 36.5029 },
'海北': { lng: 100.9011, lat: 36.9594 },
'黄南': { lng: 102.0199, lat: 35.5177 },
'海南': { lng: 100.6203, lat: 36.2804 },
'果洛': { lng: 100.2421, lat: 34.4736 },
'玉树': { lng: 97.0085, lat: 33.0040 },
'海西': { lng: 97.3708, lat: 37.3747 },
// 宁夏回族自治区
'银川': { lng: 106.2309, lat: 38.4872 },
'石嘴山': { lng: 106.3762, lat: 39.0133 },
'吴忠': { lng: 106.1994, lat: 37.9862 },
'固原': { lng: 106.2852, lat: 36.0046 },
'中卫': { lng: 105.1896, lat: 37.5149 },
// 西藏自治区
'拉萨': { lng: 91.1322, lat: 29.6604 },
'日喀则': { lng: 88.8851, lat: 29.2675 },
'昌都': { lng: 97.1785, lat: 31.1369 },
'林芝': { lng: 94.3624, lat: 29.6547 },
'山南': { lng: 91.7665, lat: 29.2360 },
'那曲': { lng: 92.0602, lat: 31.4760 },
'阿里': { lng: 80.1055, lat: 32.5032 },
// 海南省
'海口': { lng: 110.1999, lat: 20.0174 },
'三亚': { lng: 109.5119, lat: 18.2528 },
'三沙': { lng: 112.3488, lat: 16.8310 },
'儋州': { lng: 109.5808, lat: 19.5211 },
// 港澳台地区
'香港': { lng: 114.1694, lat: 22.3193 },
'澳门': { lng: 113.5491, lat: 22.1987 },
'台北': { lng: 121.5200, lat: 25.0308 },
'新北': { lng: 121.4619, lat: 25.0127 },
'桃园': { lng: 121.2168, lat: 24.9936 },
'台中': { lng: 120.6700, lat: 24.2330 },
'台南': { lng: 120.2510, lat: 23.1417 },
'高雄': { lng: 120.3120, lat: 22.6209 },
// 计划单列市及重要城市
'大连': { lng: 121.6147, lat: 38.9140 },
'青岛': { lng: 120.3826, lat: 36.0671 },
'宁波': { lng: 121.5498, lat: 29.8683 },
'厦门': { lng: 118.0894, lat: 24.4798 },
'深圳': { lng: 114.0859, lat: 22.5470 },
'雄安新区': { lng: 115.8916, lat: 38.9752 }
}