高德逆地理编码,如何按照需求显示定位地址 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Eyon
V2EX    问与答

高德逆地理编码,如何按照需求显示定位地址

  •  
  •  Eyon 2020-12-09 15:00:53 +08:00 1707 次点击
    这是一个创建于 1772 天前的主题,其中的信息可能已经有所发展或是发生改变。
    程序中使用了高德的逆地理编码,也就是通过经纬度定位用户地址。

    我想要实现的功能是:

    在城市中,直接定位所在城市,如北京市朝阳区 xxx 路,直接显示用户地址在”北京市“
    而如果在农村,直接定位到县级城市,比如四川省南充市南部县 xx 乡 xx 村,则显示用户地址在“南部县”

    看了一下高德的借口,显示到县级的 api 返回结果是:result.regeocode.addressComponent.district
    但是如果用这个数据,北京市朝阳区某某路的用户会被定位到"朝阳区",而不是我要求的“北京市”,求教
    13 条回复    2020-12-09 17:11:18 +08:00
    murmur
        1
    murmur  
       2020-12-09 15:08:54 +08:00
    是 API 错了还是不同数据不一致,我看官网的 demo addressComponent.province 就是北京市

    restapi.amap.com/v3/geocode/regeo 用这个接口

    顺便这么粗略的位置 IP 定位做不到么
    Eyon
        2
    Eyon  
    OP
       2020-12-09 15:14:54 +08:00
    @murmur province 肯定是没有问题的,但是我要的是如果在农村的话,显示到县级城市,也就是 district
    murmur
        3
    murmur  
       2020-12-09 15:18:16 +08:00
    @Eyon 那就是需求不合理,为什么北京显示北京市,四川就不显示南充市,对吧

    如果只是个别城市有需求,直接写死就可以,中国的直辖市就那么几个
    Eyon
        4
    Eyon  
    OP
       2020-12-09 15:24:54 +08:00
    @murmur 这个需求没什么不合理的吧

    比如大众点评, 你身处北京市,就显示整个北京市的餐厅排名

    但是在农村,显示最近的城市就是县城。
    jr55475f112iz2tu
        5
    jr55475f112iz2tu  
       2020-12-09 15:25:08 +08:00
    这个是直辖市的问题,在一般的接口里,北京、上海、重庆、天津这些直辖市都是被当成省行政级别的,和四川省同一级
    直辖市下的区县级,就和其他省级区域的市当成了同一级
    murmur
        6
    murmur  
       2020-12-09 15:29:50 +08:00
    @czfy 也不是直辖市,如果是直辖市,就是北京-南充这样的对应关系

    如果你看南充的下属,他有区、有县、甚至还有个市,就离谱

    换个思路,那问题就简单了,可以网上找一个开源的地址选择器组件,把你所有认为属于农村的区域都存下来,这个东西放到 app 里压缩后也不大,直接硬匹配就可以
    mcluyu
        7
    mcluyu  
       2020-12-09 15:35:32 +08:00
    没有叫 city 的字段吗
    Eyon
        8
    Eyon  
    OP
       2020-12-09 15:42:50 +08:00
    @mcluyu 有 city 字段,但是县级城市被认为不是 city
    NotNil1
        9
    NotNil1  
       2020-12-09 16:10:23 +08:00
    有些事情适合枚举列出所有情况,毕竟直辖市就那么几个,省也就那么几个
    lagoon
        10
    lagoon  
       2020-12-09 16:22:23 +08:00
    字符串截取?

    毕竟行政定义上,县和市辖区,是一级的。

    所以你的需求其实是,如果 xxx,显示这级;如果 xxx,显示上一级。

    要么,字符串截取。要么,给个地级市的数据去匹配。
    TimePPT
        11
    TimePPT  
    PRO
       2020-12-09 17:02:29 +08:00
    可以尝试用区域编码判断匹配父级,想怎么匹怎么匹
    判断标准可以参照 gov 的官方文件>《 2020 年 10 月中华人民共和国县以上行政区划代码》 http://www.mca.gov.cn/article/sj/xzqh/2020/2020/2020112010001.html
    Eyon
        12
    Eyon  
    OP
       2020-12-09 17:08:23 +08:00
    @TimePPT


    @lagoon

    其实需求很简单,如果人在城市里,用户的某种需求范围就是整个市
    如果人在农村里,那么用户的某种需求范围就是离他最近的县级城市

    还有一种情况,如果人在农村里,行政区划上属于 a 县,但是距离 b 县城更近,那么用户可以选择需求范围在 a 县还是 b 县
    TimePPT
        13
    TimePPT  
    PRO
       2020-12-09 17:11:18 +08:00
    @Eyon
    「还有一种情况,如果人在农村里,行政区划上属于 a 县,但是距离 b 县城更近,那么用户可以选择需求范围在 a 县还是 b 县」
    这块如果判断远近坑会非常多,比如有一种东西叫「飞地」,你要这么搞除非自己定制一套经纬度电子围栏。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     891 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:06 PVG 04:06 LAX 13:06 JFK 16:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86