- 需求的场景描述(希望解决的问题)
wx.chooseLocation 返回的字段中有总的address ,但是需求常常要求获取精确的省市区,而通过address 解析出来的省市区经常出现各种问题:
有一个返回地址如下: 广东省深圳丽雅查尔顿酒店(深圳市南山区高新科技园高新南四道13号)
通过正则表达式解析出来的省市区很可能如下:(当然我正则表达式写的不好也有关)
省: 广东省
市:深圳丽雅查尔顿酒店(深圳市
区:南山区
这个很难解析出 深圳市
- 希望提供的能力
将省(province) 市(city) 区(county) 和address一起返回
查到大家有相同的需求:
24年了,这个问题仍然没有改进,模拟器会有省市,输入搜索会有省市,但是拖拽没有省市,奇葩开发团队。
23年过去大半了,也还是没有
现在23年了还没有
看到17年18年19年都有这个反馈,现在20年了还是木有QAQ
我暂时奇葩的方式来处理了【因为我这个小程序知识在新疆内使用的所以我只用了新疆的json】
parseAddress(address) { const result = { province: '', city: '', district: '', street: '', address_detail: '', house_number: '' } // 从xinjiang.json读取行政区划数据 const adminData = require('@/static/xinjiang.json') // 省级 if (address.includes(adminData.name)) { result.province = adminData.name address = address.replace(adminData.name, '') } // 地级市或地区 for (const city of adminData.children) { if (address.includes(city.name)) { result.city = city.name address = address.replace(city.name, '') // 县区级 for (const district of city.children) { if (address.includes(district.name)) { result.district = district.name address = address.replace(district.name, '') // 乡镇街道级 if (district.children) { for (const street of district.children) { if (address.includes(street.name)) { result.street = street.name address = address.replace(street.name, '') break } } } break } } break } } // 剩余部分作为详细地址 result.address_detail = address.trim() // 提取门牌号 const numberMatch = result.address_detail.match(/(\d+号|\d+弄|\d+幢|\d+栋)/) if (numberMatch) { result.house_number = numberMatch[1] result.address_detail = result.address_detail.replace(numberMatch[1], '').trim() } return result }
就是先得有全国的json:(当然我这个只是新疆的);
手动@官方
腾讯地图的api可以直接返回省市区的,当然其他的地图的api也可以,现在大部分地图的api都有直接的小程序sdk,我比较喜欢高的的服务器端api,因为可以直接用小程序的定位获取坐标,然后用wx.request调用服务端api接口,这些接口提供了非常多非常全面的实用信息。可以实现目前你遇到过的用到过的所有功能了。
👍一楼
广东省深圳丽雅查尔顿酒店(深圳市南山区高新科技园高新南四道13号
这个地址可以查询解析出省市区,你不用自己写正则。