精华内容
下载资源
问答
  • 通过经纬度查询行政区划,这个服务通过读取本地二进制文件匹配出某个经纬度行政区划编号,然后通过编号在Google DataStore之中查询行政区划信息,经过我的观察,性能还算不错,按照Google App Engine后台的统计...

            现在我的闭关已经接近尾声,按照最初的计划我准备拿出一个月左右的时间研究JavaScript的代码混淆的,后来因为对Google App Engine的引擎的研究日渐深入,而且也觉得代码混淆比我想象的要复杂,因此,取消了研究代码混淆的计划,而专注于网站相关的研究。

            本文要介绍的是我在Google App Engine上实现的3个REST接口服务:

            1.通过经纬度查询行政区划的服务,传递一个经纬度坐标,返回的结果为该位置的行政区划,通常来讲,用来实现地图上的“面包屑导航”功能。

            2.通过IP查询经纬度,传递一个IP(或者不传,缺省使用连接客户端的IP),返回结果为该IP的位置文字描述和经纬度

            3.加载一个简单的笑话信息,这是一个很简单搞笑的功能。

            本来,这些功能在地图人网站上原本就有,不过以前是我使用ASP.NET开发的,和网站运行在一个主机上,为避免主机性能受影响这些接口没有公布,而且在接口程序上做了站内限制,现在我将地图人网站的所有类似服务都迁移到了Google App Engine上,而Google App Engine的性能和稳定性是比较可靠的,因此我将这些服务公布出来供大家参考引用。

            上次,因为网站的18万条数据因为GAE的一个BUG没有能够成功上传到GAE上,因此,影响了网站服务代码的迁移,不过我最近才知道,原来GAE是可以访问本地文件的(汗!我可能是被‘云’弄得晕乎乎了,连本地文件都不敢访问了),而我的那些数据包含明显的规律,使用本地文件访问比数据库更快,因此我毅然决定重写代码,依靠访问文件的方式来提供服务,跳过了那个BUG,并且带来更好的性能。

            不过Google的单个文件大小最多为1M,这一点挺害人的,毕竟18W条的数据要压缩成1M的文件可不容易,因此我很费劲的研究了几晚上的Python二进制文件读写,以及数据类型什么的,最后终于成功的将数据压缩到800K,这样才能够完美的提供通过经纬度查询行政区划。

            下面介绍一下每个服务的调用过程和实现,需要说明的是,除了第三个服务在上一篇文章《闭关纪要20.在Google App Engine之中解析RSS》之中已经公开了源码之外,其他的两个服务因为和数据相关,公开源码也没有意义,因此就不公开,不过第二个服务通过IP查询的,我的主要源码就是使用的别人的开源代码做了简单的整合,根据我的思路,很容易就可以自己实现了。

            1.通过经纬度查询行政区划,这个服务通过读取本地二进制文件匹配出某个经纬度的行政区划编号,然后通过编号在Google DataStore之中查询行政区划信息,经过我的观察,性能还算不错,按照Google App Engine后台的统计显示,平均CPU时间消耗为80,算是比较少的,虽然这个服务看起来比较复杂。服务调用示例:

            http://dituren-service.appspot.com/services/rgeo_ll?ll=39.94691582580937,116.38320347900391&c=onRgeoLoaded

            其中,参数ll是逗号分隔经纬度,注意是纬度在前,经度在后,参数c是REST回调函数名称,上例返回的内容为:

            onRgeoLoaded({area:'北京市-西城区',regionCode:'110102'});

            返回的对象之中,area属性是减号分隔的按层级的地区名称,regionCode属性是行政区划编码,如果没有成功匹配到行政区划,将以空参数调用回调函数

            需要注意的是,因为这个接口仅仅进行国内行政区划的查询,因此建议仅仅对纬度范围(从3到54),经度范围(从73到136)范围内的内容进行查询匹配,否则,白白连接一下,没有任何意义;

            2.通过IP查询经纬度,这个服务首先要感谢gohsy,我的IP查询功能采用他的代码,而且连IP库也是采用他的版本,我本来想替换一个更全(至少文件更大)的IP库的,可惜后来发现超过1M的文件传不上去,而gohsy的IP库文件居然刚好是1M,不知道他怎么弄的,我就不客气的使用了,在采用这个库实现了通过IP得到一个地址的文字描述之后,我通过Google的地址解析服务去匹配经纬度,这个思路很清晰,不过我会在数据库之中缓存Google的地址解析结果,避免频繁的向Google请求地址匹配造成性能和稳定性问题,这个服务因为存在获取URL内容的功能,因此性能不稳定,从统计来看,平均CPU时间消耗为140,不过这个服务才运行了几个小时,随着缓存地址匹配数据的增多,平均CPU占用一定会下降。服务调用示例:

            http://dituren-service.appspot.com/services/ip_lookup?c=onIpLookupLoaded&ip=202.204.59.204

            其中,参数ip就是一个IP(废话),如果IP参数不存在,则直接缺省采用客户端连接IP,参数c是REST回调函数名称,返回的内容为:

            onIpLookupLoaded({ip:'202.204.59.204',address:'北京市 北京科技大学',lat:39.987700,lon:116.361576,zoom:14})

            返回的对象之中,ip属性就是当前IP,不管是否传递了ip参数,都会返回一个IP,address属性是在IP库之中查询的结果字符串,lat,lon是经纬度信息,zoom属性是较合适的显示缩放等级,因为匹配有精度的问题,例如匹配到“北京科技大学”和匹配到“北京市”都有经纬度,不过显示给用户的缩放登机最好是有所不同的,这个缩放等级是按照Google的地图做标准的,如果在51ditu接口上使用,考虑用17-zoom。

            需要注意的是,因为IP查询采用网上的IP库,地址匹配采用Google的接口,我仅仅做一个简单的整合,因此,不能对数据的正确性和准确率作出保证,呵呵

            3.加载一个笑话,本来这个功能就是上不得台盘的一个小玩意,不能和上面的两个接口相比,不过,我也随便的介绍一下,这个功能源码已经公开在《闭关纪要20.在Google App Engine之中解析RSS

            有时候,因为网速的问题,地图加载缓慢(地图API通常都比较大,而且地图相关的附加功能多),让用户等待地图下载的过程之中,在地图显示区域先加载个笑话或其他文字内容是不错的,不过要求这个内容要在主体内容加载之前开始加载(否则就失去意义了),而且要求加载比较快,尽量不要进一步拖慢页面加载速度,在主体内容加载完成之后,就显示主体内容,原来的临时内容被替换。

            因为页面上不能每次打开都是同样的内容(如果是这样的话,直接写在静态页面上就可以了,而且让用户每次都看一个内容也就失去了打发等待页面加载时间的意义)所以页面内容还要自动变换,不过最好可供变换的内容不要太多,就可以使用缓存的优势使加载速度更快。

            基于以上的思路,开发了一个以下服务,客户端动态的变化一个随机数字id,向这个服务发送请求,这个服务返回指定id的内容:

            http://dituren-service.appspot.com/services/joke_random?c=onJokeLoaded&id=12

            参数id是传递过来的随机整数,注意为什么不在服务端随机显示呢,因为在服务端随机显示的话就无法启用缓存了;参数c是REST回调函数名称,本服务返回的内容示例为:

            onJokeLoaded({title:"贵族幼儿园面试",content:"小露丝去考贵族幼儿园,面试时老师取出一张10元的钞票问:这是什么?小露丝很快回答:这是奶奶给乞丐的废纸.老师说:好了,不用考了,你已被录取了。"})

            title参数是标题,content参数是内容(全是废话),页面上先定义好onJokeLoaded函数,将笑话显示在指定的地方,页面主体内容加载完成后,再擦除内容就可以实现了。

            以上就是我的网站上提供的3个相关的服务的说明,这些服务并没有考虑使用XML格式,而是采用REST的JavaScript格式,是希望可以直接调用而不会遭遇跨域的问题(因为这些服务都是在专用域名service.dituren.cn上的,和我自己的网站也不是在同一个域)以上服务返回的内容全部是UTF-8格式的JavaScript内容,调用的时候需要注意编码问题

            本文仅仅是对这些服务接口本身进行介绍,后面我会将这些服务封装成简单的用户可以在直接使用的脚本对象,这些对象将会在我正准备更新的K_Map(原来名字叫K_ReverterMap的一些地图相关的类)之中公布,现在想起来K_Map的一些类已经好久没有更新过了。

            这以后,我还会逐步的增加相关的服务,例如根据经纬度查询天气信息什么的,反正相关的东西,我都可以拿来研究!

    展开全文
  • 其中奇数位的规律如下表所示: 偶数位的规律如下表所示: 逆地理编码 逆地理编码指的是将经纬度坐标转换为具体的标准的行政区划信息,以高德逆地理编码接口为例,坐标点118.797405,32.044227响应的结果如下: { ...

    前言

    GeoHash是很多基于LBS(Location Based Services)服务不可绕过的解决方案之一,网上关于GeoHash的介绍和算法很多,资源也算比较丰富。这篇文章主要是介绍如何利用GeoHash或者进行逆地理编码(经纬度坐标转换行政区划)的实现。

    1. 以中文地址【江苏省南京市玄武区梅园新村街道总统府】为例,省级【江苏省】,市级【南京市】,区县级【玄武区】,街道乡镇级【梅园新村街道】,详细地址【总统府】。由于没有地图服务没有提供街道乡镇级的行政区划polygon数据(行政区划边界的坐标点集合),所以本文利用geoHash进行的逆地理编码的方式,只能到区县级。
    2. 第四级和详细地址信息,变更相对会比较频繁,需要人工接入,维护成本比较大。

    理解GeoHash

    GeoHash是按照固定的算法,将经纬度信息转换为Base32码表中的一串字符。具体的算法网上资源较多,不进行详细介绍。逻辑并不是非常复杂,大概逻辑如下:

    1. 按照经度范围[-180°,180°],纬度范围[-90°,90°]对目标经纬度进行计算;二分经度和纬度范围区间,分别判断经度和纬度,在右侧集合则为1,在左侧集合则为0;循环进行此计算。
    2. 将所得经纬度1和0结果,经度在偶数位(从0位计算),纬度在奇数位进行拼接,5位二进制结果为一组,转换为十进制数后,再转换为对应Base32码表中数字,即得到对应GeoHash值。

    推荐一个github上GeoHash的实现:
    GeoHash算法实现

    GeoHash精度

    GeoHash使用5位计算结果(左右区间)作为一个精度,例如wtw6kf共有6个Base32编码表的字母或数字,代表这个geoHash值的精度为6。

    GeoHash特征

    • 以一个坐标点118.797405,32.044227为例,该坐标点实际上是无数个精度更高(小数点后精确位到6位以后)的坐标点集合;将其放大理解,可以看作为一个二维矩形,此二维矩形的4角的坐标值分别应为:
    坐标位置经度纬度
    西南点118.79740532.044227
    西北点118.79740532.044227999999…
    东北点118.797405999999…32.044227999999…
    东南点118.797405999999…32.044227
    • 通过对坐标点的理解, GeoHash的值可以理解为,是无数个经纬度坐标的集合。通过多个经纬度坐标在不同精度的GeoHash计算后,都可以得到一个相同GeoHash的值的规律;可得知,GeoHash的覆盖面积会比经纬度单点的覆盖面积大,只有当GeoHash计算精度越大时,其覆盖面积越小,越近似于经纬度单点的覆盖面积。同类的思路,在我们高等数学中,使用微分计算不规则曲线图形面积时的方法,最终也是极限接近结果。
    • 以坐标点118.797405,32.044227(实际地理位置为:江苏省南京市总统府)的6位精度geoHash值wtsqr3为例,其二维矩形4角的坐标值分别为:
    坐标位置经度纬度
    西南点118.79516601562532.0416259765625
    西北点118.79516601562532.047119140625
    东北点118.8061523437532.047119140625
    东南点118.8061523437532.0416259765625

    在地图上表现为:
    在这里插入图片描述
    在线绘制地址围栏

    可见该GeoHash块的覆盖面积已经将地理位置江苏省南京市总统府完全覆盖,并且也会覆盖更多其他地区。

    GeoHash规律

    • 通过GeoHash的运算规则和全球经纬度范围,可以推导出不同精度的GeoHash块父子级规律:即精度为n的GeoHash会有32个精度为n+1的GeoHash块。例如当GeoHash值精度为1,全世界地图都会被32个GeoHash值覆盖。例如精度为1的GeoHash值w,其会覆盖我国大部分国土。
      在这里插入图片描述
      在线标选GeoHash块

    • 当GeoHash精度为2时,其展示效果如下:
      在这里插入图片描述
      当GeoHash精度为3时,其展示效果如下:
      在这里插入图片描述
      所以如果要遍历GeoHash时,不需要进行经纬度的再次运算,可以根据GeoHash奇偶数的规律,进行GeoHash值的生成。其中奇数位的规律如下表所示:
      在这里插入图片描述
      偶数位的规律如下表所示:
      在这里插入图片描述

    逆地理编码

    逆地理编码指的是将经纬度坐标转换为具体的标准的行政区划信息,以高德逆地理编码接口为例,坐标点118.797405,32.044227响应的结果如下:

    {
    	"status": "1",
    	"regeocode": {
    		"addressComponent": {
    			"city": "南京市",
    			"province": "江苏省",
    			"adcode": "320102",
    			"district": "玄武区",
    			"towncode": "320102002000",
    			"streetNumber": {
    				"number": "292号",
    				"location": "118.797317,32.044008",
    				"direction": "南",
    				"distance": "25.7166",
    				"street": "长江路"
    			},
    			"country": "中国",
    			"township": "梅园新村街道",
    		"citycode": "025"
    		},
    		"formatted_address": "江苏省南京市玄武区梅园新村街道总统府"
    	},
    	"info": "OK",
    	"infocode": "10000"
    }
    

    高德逆地理编码接口在线测试

    此篇博文只介绍可以模拟到行政区划的省/直辖市二级市区/县/三级市的方式。如果想要详细地址(这个需要GPS终端进行实际定位,再转换火星坐标系进行记录)或者乡/镇/街道级别的地址信息,人工维护成本比较大,以笔者不算太长的地图服务接触时间来看,我们国家因城市化速度较快等原因,第四级的行政区划变更速度比较频繁。

    实现逆地理编码的基本思路

    1.全国范围内6位精度GeoHash计算

    1. 如果按照GeoHash的算法,需要使用全国的示例点进行计算得到结果,这个计算量和工作量非常巨大,基本上可以考虑放弃。
    2. 按照上述的GeoHash规律,我们可以轻易的通过GeoHash奇偶数表获取全国所有的6位精度GeoHash值。
    3. 首先确定全国2位精度GeoHash块(甚至3位)有多少,此数据可以直接通过画图来获取粗略结果,如下图所示:
      在这里插入图片描述
    4. 可见全国(不包含中国南海三沙市)的2位精度GeoHash块约为29块,那么,计算得出的6位精度和7位精度GeoHash值数量分别应为:

    6位精度数量:29 * 25 * 25* 25* 25 = 30408704
    7位精度数量:29 * 25 * 25* 25* 25 * 25= 973078528

    1. 6位精度的Geohash值可以麻烦大部分数据需求,7位精度Geohash值主要市为了解决区/县/三级市行政区划边界点与6位精度GeoHash块重合现象,7位精度的GeoHash值并不需要完全计算。

    2.获取全国范围内区/县/三级市级别行政区划地址围栏点

    1. 首先感谢高德,行政区划地址围栏坐标点的数据需要从高德开放平台获取(高德开放平台地址围栏点比腾讯地图提供的要精准),申请一个高德的Key,批量拉去数据即可。注意编写脚本时建议写入文本文件或者直接写入数据库,数据量比较大。
    2. 高德在线测试获取行政区划围栏点
      拉取数据时,注意区/县/三级市级别行政区划名称有可能会重复,建议使用adcode字段进行区分。
    3. 拉取得围栏点在地图中示例(江苏省南京市玄武区)如下,比较可靠:
      在这里插入图片描述

    3.计算6位精度GeoHash块与区/县/三级市级别行政区划关联关系

    1. 使用java7原生API可以判断GeoHash块(二维矩形)与区/县/三级市级别行政区划是否包含或相交,主要使用如下2个类:
    import java.awt.Polygon;
    import java.awt.geom.Area;
    
    1. 判断是否包含:
      在这里插入图片描述

    2. 判断是否相交:
      在这里插入图片描述

    • 如果包含,则记录该区县级别行政区划信息与对应精度的GeoHash值的关联关系;
    • 如果不包含也不相交,则不保留关系;
    • 如果相交,则遍历当前精度的GeoHash值下一精度GeoHash值,重复2 3步骤,直到包含关系,并存储GeoHash值和对应行政区划信息。
    1. 注意:
      由于数据量和计算量大,在编写脚本遍历时,尽量减少O(n)n的大小,例如GeoHash值tz仅在新疆范围内,遍历tz开头的6位精度GeoHash值时,可以仅将新疆地区行政区划参与计算。建议脚本中计算完毕部分数据就写入本地或者数据库,脚本写的粗糙的话,跑计算时很有可能会OOM。

    4.将GeoHash结果值与行政区划关联关系数据存储

    1. 使用散列表存储所有的GeoHash值与行政区划关联关系。
    2. 根据GeoHash的规律,参考坐标118.797405,32.044227各精度GeoHash值:
    精度GeoHash值
    1w
    2wt
    3wts
    4wtsq
    5wtsqr
    6wtsqr3
    7wtsqr33
    8wtsqr33x

    为了减少单个散列表中数据量过大问题,可以按照2位精度或者3位精度GeoHash值区分存储,具体策略可以根据具体场景自行调整。

    5.跟据坐标点的GeoHash值查询行政区划信息

    1. 将目标坐标点进行7位精度GeoHash值计算
    2. 根据GeoHash值获取对应散列表数据,查询获取结果。

    结尾

    以上查询过程很简单,复杂度O(1)即可拿到对应行政区划数据,不过1-4步骤的数据初始化过程需要人工介入次数较多;在部分边界点处理上,出现7位精度GeoHash仍然是相交而不是包含时,可以选择人工处理或上升到8位精度,按照大部分业务需求不建议上升至9位精度以上计算;如果采用人工处理,可以根据GeoHash覆盖点大小直接确定行政区划归属。

    展开全文
  • 使用空间算法,点是否包含在某一个行政区划内,遍历计算第一步筛选出的三级行政区划围栏点,最终确认目标经纬度坐标所在第三级行政区划。这一步计算不推荐使用mysql来完成(原因见mysql GIS支持章节),推荐java ...

    前言

    姐妹篇:利用GeoHash实现逆地理编码(经纬度坐标转换行政区划)

    MySQL从4.x版本开始就对GIS(Geographic Information System)的数据类型进行支持,并且也有对应的空间索引;MBR(Minimum Bounding Rectangle)相关算法也是地图服务常见问题的一个解决方案。同姐妹篇利用GeoHash实现逆地理编码一样,本篇文章主要介绍,如何通过MBR和mysql的GIS数据类型实现逆地理编码,同样精确度也只能达到**区/县**级行政区划解析结果。

    理解MBR

    MBR全称是Minimum Bounding Rectangle,直译就是最小边界矩形。通常是指,针对一个不规则二维图形的边界,绘制出其最小的边界矩形;并且依托这个矩形产生了一系列算法。

    MBR计算

    MBR的计算方式非常简单,将一系列边界点进行遍历,获取这一系列边界点【最大经度】【最小经度】【最大纬度】【最小纬度】。那么构成这个MBR图形的四个坐标点应分别为:

    坐标位置经度纬度
    西南点【最小经度】【最小纬度】
    西北点【最小经度】【最大纬度】
    东北点【最大经度】【最大纬度】
    东南点【最大经度】【最小纬度】

    行政区划MBR示例

    在线绘制地址围栏
    江苏省(以最大polygon数据为主,去除其他岛屿等独立polygon数据,数据来源高德,再次感谢高德)示例,其为不规则图形,在地图中绘制效果如下:
    在这里插入图片描述
    遍历所有边界点,计算得到其最大最小经纬度分别为:

    名称
    最大经度121.975185
    最小经度116.362723
    最大纬度35.124513
    最小纬度30.757840

    对应其MBR四个坐标点分别为:

    坐标位置经度纬度
    西南点116.36272330.757840
    西北点116.36272335.124513
    东北点121.97518535.124513
    东南点121.97518530.757840

    MBR结果在地图中绘制效果如下:
    在这里插入图片描述
    如图所示,该MBR图形是江苏省行政区划的最小边界外界矩形。

    mysql GIS支持

    GIS(Geographic Information System)是地图信息系统,mysql 5.6版本及5.6以上版本,提供了地图信息系统相关数据结构的支持。

    注意:
    1> mysql的GIS相关函数和数据类型在进行压力测试时,即使有空间索引存在,其表现并不好;在并发数较高时,会迅速消耗数据库服务器CPU资源,最终成为整个调用链路的瓶颈,并且无法通过加机器等横向扩展方式解决。
    2> mongoDB也存在GIS的支持,并且吞吐量比mysql要高很多,如果是中小型系统,建议选用mongoDB而不是mysql进行GIS相关计算。
    3> 最终推荐:GIS相关计算在应用服务器上进行,横向扩展方便。相关算法可选用或参考java awt包中几何图形算法。

    几何数据类型

    mysql提供了基本上可以覆盖所有地理模型的几何数据类型,如下图所示:
    在这里插入图片描述
    mysql 8.0版本Geometry数据类型官方文档
    比较常用的例如:

    1. Point 点 以x,y平面直角坐标系建立的坐标点
    2. Polygon 多边形 以多个坐标点顺序连接构成闭环的2维多边形
    3. MultiPolygon 多多边形 多个2维多边形

    类似省、市、区县的行政区划边界点,可以直接使用MultiPolygon数据类型存储入数据库。

    几何数据类型相关函数

    mysql 5.6版本GIS函数官方文档
    mysql 8.0版本GIS函数官方文档
    简单介绍一下我们使用场景中需要的函数ST_CONTAINS()或者ST_WITHIN()
    **ST_CONTAINS()**函数是用于判断某一个二维几何数据结构是否包含另一个二维几何数据结构,返回1代表在包含,返回0代表不包含。(我们使用到的场景是判断一个经纬度坐标点是否在某一行政区划多边形内)**ST_WITHIN()**函数与其表述方式相反,结果相反。
    在这里插入图片描述

    逆地理编码

    逆地理编码指的是,将经纬度坐标转换为具体的标准的行政区划信息;以高德逆地理编码接口为例,坐标点118.797405,32.044227响应的结果如下:

    {
    	"status": "1",
    	"regeocode": {
    		"addressComponent": {
    			"city": "南京市",
    			"province": "江苏省",
    			"adcode": "320102",
    			"district": "玄武区",
    			"towncode": "320102002000",
    			"streetNumber": {
    				"number": "292号",
    				"location": "118.797317,32.044008",
    				"direction": "南",
    				"distance": "25.7166",
    				"street": "长江路"
    			},
    			"country": "中国",
    			"township": "梅园新村街道",
    		"citycode": "025"
    		},
    		"formatted_address": "江苏省南京市玄武区梅园新村街道总统府"
    	},
    	"info": "OK",
    	"infocode": "10000"
    }
    

    高德逆地理编码接口在线测试
    精确度只有三级,同姐妹篇【利用GeoHash实现逆地理编码

    实现逆地理编码的基本思路

    1.获取全国范围内所有级别行政区划地址围栏点

    1. 首先感谢高德,行政区划地址围栏坐标点的数据需要从高德开放平台获取(高德开放平台地址围栏点比腾讯地图提供的要精准),申请一个高德的Key,批量拉去数据即可。注意编写脚本时建议写入文本文件或者直接写入数据库,数据量比较大。
    2. 高德在线测试获取行政区划围栏点
      拉取数据时,注意区/县/三级市级别行政区划名称有可能会重复,建议使用adcode字段进行区分。
    3. 拉取得围栏点在地图中示例(江苏省南京市玄武区)如下,比较可靠:
      在这里插入图片描述
    4. 省、市、区县行政区划围栏点数据存储进mysql,落地结构为MultiPolygon。

    2.计算全国范围所有级别行政区划MBR数据

    1. 遍历全国行政区划围栏点数据,分别获取省、市、区县/三级市行政区划MBR数据并通过mysql进行存储。
    2. 计算方式:遍历行政区划围栏点数据即可;比较简单,不再赘述。
    3. MBR数据同样落地在mysql中。

    3.实现逆地理编码接口

    1. 根据目标经纬度坐标,遍历省级行政区划MBR数据;如果目标经纬度坐标在多个省份匹配最大经纬度坐标和最小经纬度坐标范围内,则遍历匹配省份的下一级(市级)行政区划MBR数据,同理找到可能匹配的区县/三级市新政区划。
    2. 使用空间算法,点是否包含在某一个行政区划内,遍历计算第一步筛选出的三级行政区划围栏点,最终确认目标经纬度坐标所在第三级行政区划。这一步计算不推荐使用mysql来完成(原因见mysql GIS支持章节),推荐java awt包来完成。
    import java.awt.Polygon;
    

    函数:
    在这里插入图片描述

    结尾

    此篇文章主要是用于记录另一种逆地理编码的实现思路,可优化空间较大。
    姐妹篇:利用GeoHash实现逆地理编码

    展开全文
  • 自己整合的中国各省市县区的经纬度信息,示例: {"code":"620105","lat":"36.10975375497273","level":"区县","lng":"103....说明: code 为行政区划代码, lat 纬度 lng 经度 name 区县名称 level 区县等级(省市县)
  • 全国行政区划经纬度,省市区县三级,可直接导入mysql数据库。
  • 整个四川镇级行政区划经纬度边界以及行政区划编码,其中办事处,街道办 ,街道,镇,乡等关键字已经被去除,但是有行政区划编码就能识别
  • 2018年最新行政区划数据库包区县含经纬度2018年最新行政区划数据库包区县含经纬度2018年最新行政区划数据库包区县含经纬度2018年最新行政区划数据库包区县含经纬度
  • 全国行政区划数据(含经纬度边界)
  • 详细的中国县区以上行政区划经纬度坐标
  • 行政区划到街道带经纬度拼音,首字母和缩写
  • 腾讯地图行政区划转Mysql数据库表,新加地区拼音行政区域经纬度经纬度字段,方便计算距离,经纬度只记录到三级。
  • 行政区划-省市区邮编区号拼音经纬度-全面标准数据库。某宝的上最新旗舰版。包含.csv、.json、.xls、.sql(mydsql)
  • ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='省 行政区划表'; MULTIPOLYGON((( 110.991 26.3642, 110.94 26.3767, 110.922 26.2566, 110.756 26.25, ...111.259 26.049, 111.283 26.2623, 110....
    <select id="selectByLevel" parameterType="string" resultMap="BaseResultMap">
      select
       <include refid="Base_Column_List" />
       from base_region where ST_Contains(shape,point(${point})) =1
       order by F_LEVEL asc
    </select>

    CREATE TABLE `base_region` (
      `OBJECTID` decimal(11,0) NOT NULL,
      `F_REGION_CODE` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      `F_REGION_NAME` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      `LX` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      `LY` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      `RX` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      `RY` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      `CENTERX` decimal(38,8) DEFAULT NULL,
      `CENTERY` decimal(38,8) DEFAULT NULL,
      `SHAPE` geometry DEFAULT NULL,
      `SE_ANNO_CAD_DATA` blob,
      `F_PINGYIN` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      `F_LEVEL` decimal(11,0) DEFAULT NULL,
      `F_ID` decimal(11,0) NOT NULL,
      `F_PARENT_REGION_CODE` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      PRIMARY KEY (`OBJECTID`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='省 行政区划表';


    MULTIPOLYGON(((
    110.991 26.3642, 110.94 26.3767, 110.922 26.2566, 110.756 26.25, ...111.259 26.049, 111.283 26.2623, 110.991 26.3642
    ), (
    105.151 24.9596, 105.145 24.9561, 105.143 24.9589, 105.151 24.9596
    )))

    st_union(
     POLYGON(
     ST_GeomFromText('LINESTRING(
     110.991 26.3642, 110.94 26.3767, 110.922 26.2566, 110.756 26.25, ...111.259 26.049, 111.283 26.2623, 110.991 26.3642
     )')), POLYGON(ST_GeomFromText('LINESTRING(
     105.151 24.9596, 105.145 24.9561, 105.143 24.9589, 105.151 24.9596
     )')) ),point(121.332378,31.07106) )

     

    POLYGON((
    121.965 29.2166, 121.992 29.278, 121.924 29.2859, 121.922 29.4205, ... 121.961 29.0567, 121.97 29.1584, 121.959 29.1976, 121.965 29.2166
    ))

    ST_Contains(POLYGON(ST_GeomFromText('LINESTRING (
    121.965 29.2166, 121.992 29.278, 121.924 29.2859, 121.922 29.4205, ... 121.961 29.0567, 121.97 29.1584, 121.959 29.1976, 121.965 29.2166
    )')),point(113.44938950,37.27924910) )=1

     

    展开全文
  • mysql 2021年全国最新行政区划表(省市区县、含有经纬度
  • 全国行政区划省市区的三级分类,经纬度信息及拼音信息。sql文件
  • 数据来源:国家统计局 数据截至日期:2021/04/20 数据包含:行政区划代码、行政区划名称、级别、经纬度 数据文件格式:MySQL
  • 全国省市县区乡镇行政区划数据库带经纬度 110100 北京市 110000 北京 116.405289 39.904987 2 tr_0 tr_110000 1 110101 东城区 110100 东城 116.418755 39.917545 3 tr_0 tr_110000 tr_110100 3 110102 西城区 ...
  • 2017全国行政区划省市区完整版附经纬度及拼音,系统已投入使用
  • 获取最新2020全国行政区划经纬度

    千次阅读 2020-06-14 13:27:54
    获取最新2020全国行政区划经纬度,使用民政部最新数据、高德api、SpringBoot。
  • 高德行政区划边界及经纬度获取 前言 近来由于工作需要,需要提取某些城市的经纬度坐标,稍微搜索了一下,发现百度地图和高德地图都提供了相关的函数和例子.那么剩余的工作也就比较简单了,保存坐标,然后转换为WGS坐标,...
  • { "id": "110117", "parentId": "110100", "name": "平谷区", "mergerName": "中国,北京,北京市,平谷区", "shortName": "平谷", "mergerShortName": "中国,北京,北京,平谷", "levelType": "3", ...
  • 行政区划数据库_with 经纬度-省市区-邮编-区号-拼音-简称

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,510
精华内容 604
关键字:

经纬度转行政区划