# addrparser-divisions-of-China **Repository Path**: sunjure/addrparser-divisions-of-china ## Basic Information - **Project Name**: addrparser-divisions-of-China - **Description**: 中华人民共和国行政区划(五级):省级、地级、县级、乡级和村级。实现离线高效的解析中国范围内的经纬度为省市区信息,省市区信息包括: 行政区划编码、行政区划中文名称、行政区域的中心点经纬度,行政区域的边界点经纬度集合。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2022-12-27 - **Last Updated**: 2022-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # addrparser-divisions-of-China #### 介绍 中华人民共和国行政区划(五级):省级、地级、县级、乡级和村级。实现离线高效的解析中国范围内的经纬度为省市区信息,省市区信息包括: 行政区划编码、行政区划中文名称、行政区域的中心点经纬度,行政区域的边界点经纬度集合。 # addrparser 使用MySQL方式 ```java package com.example.addrparserdemo.test; import com.example.addrparserdemo.util.LocationParserEngineHolder; import tech.spiro.addrparser.common.RegionInfo; import tech.spiro.addrparser.parser.Location; import tech.spiro.addrparser.parser.LocationParserEngine; import java.util.Objects; public class LocationTest { public static void main(String[] args) { final LocationParserEngine engine = LocationParserEngineHolder.getEngine(); if (Objects.isNull(engine)) { System.out.println("位置解析引擎为空"); return; } // 执行解析操作 // 深圳-信利康大厦:113.888526,22.501119 // 香港:114.209324,22.257168 // 台湾:120.873733,23.393628 // 澳门:113.565593,22.11745 Location location = engine.parse(113.565593, 22.11745); if (Objects.isNull(location)) { System.out.println("location is null"); return; } // 获取省市区信息 RegionInfo provInfo = location.getProv(); System.out.println("provInfo = " + provInfo); RegionInfo cityInfo = location.getCity(); System.out.println("cityInfo = " + cityInfo); RegionInfo districtInfo = location.getDistrict(); System.out.println("districtInfo = " + districtInfo); } } ``` 结果: ```java 16:08:28.324 [main] DEBUG com.zaxxer.hikari.HikariConfig - Driver class com.mysql.cj.jdbc.Driver found in Thread context class loader sun.misc.Launcher$AppClassLoader@18b4aac2 16:08:28.695 [main] DEBUG tech.spiro.addrparser.io.rdbms.RdbmsRegionDataInput - Initializing...sql: SELECT code, parent_code, name, level, center, polyline FROM t_region_data 16:08:28.696 [main] DEBUG com.zaxxer.hikari.HikariConfig - UserHikariCP - configuration: 16:08:28.701 [main] DEBUG com.zaxxer.hikari.HikariConfig - allowPoolSuspension................................false 16:08:28.701 [main] DEBUG com.zaxxer.hikari.HikariConfig - autoCommit................................true 16:08:28.701 [main] DEBUG com.zaxxer.hikari.HikariConfig - catalog................................none 16:08:28.702 [main] DEBUG com.zaxxer.hikari.HikariConfig - connectionInitSql................................"set names utf8mb4" 16:08:28.702 [main] DEBUG com.zaxxer.hikari.HikariConfig - connectionTestQuery................................"SELECT 1" 16:08:28.702 [main] DEBUG com.zaxxer.hikari.HikariConfig - connectionTimeout................................30000 16:08:28.702 [main] DEBUG com.zaxxer.hikari.HikariConfig - dataSource................................none 16:08:28.702 [main] DEBUG com.zaxxer.hikari.HikariConfig - dataSourceClassName................................none 16:08:28.702 [main] DEBUG com.zaxxer.hikari.HikariConfig - dataSourceJNDI................................none 16:08:28.703 [main] DEBUG com.zaxxer.hikari.HikariConfig - dataSourceProperties................................{password=} 16:08:28.703 [main] DEBUG com.zaxxer.hikari.HikariConfig - driverClassName................................"com.mysql.cj.jdbc.Driver" 16:08:28.703 [main] DEBUG com.zaxxer.hikari.HikariConfig - exceptionOverrideClassName................................none 16:08:28.703 [main] DEBUG com.zaxxer.hikari.HikariConfig - healthCheckProperties................................{} 16:08:28.703 [main] DEBUG com.zaxxer.hikari.HikariConfig - healthCheckRegistry................................none 16:08:28.703 [main] DEBUG com.zaxxer.hikari.HikariConfig - idleTimeout................................30000 16:08:28.703 [main] DEBUG com.zaxxer.hikari.HikariConfig - initializationFailTimeout................................1 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - isolateInternalQueries................................false 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - jdbcUrl................................jdbc:mysql://localhost:3306/addrparser-demo 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - keepaliveTime................................0 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - leakDetectionThreshold................................0 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - maxLifetime................................1800000 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - maximumPoolSize................................15 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - metricRegistry................................none 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - metricsTrackerFactory................................none 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - minimumIdle................................5 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - password................................ 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - poolName................................"UserHikariCP" 16:08:28.704 [main] DEBUG com.zaxxer.hikari.HikariConfig - readOnly................................false 16:08:28.705 [main] DEBUG com.zaxxer.hikari.HikariConfig - registerMbeans................................false 16:08:28.705 [main] DEBUG com.zaxxer.hikari.HikariConfig - scheduledExecutor................................none 16:08:28.705 [main] DEBUG com.zaxxer.hikari.HikariConfig - schema................................none 16:08:28.705 [main] DEBUG com.zaxxer.hikari.HikariConfig - threadFactory................................internal 16:08:28.705 [main] DEBUG com.zaxxer.hikari.HikariConfig - transactionIsolation................................default 16:08:28.705 [main] DEBUG com.zaxxer.hikari.HikariConfig - username................................"root" 16:08:28.705 [main] DEBUG com.zaxxer.hikari.HikariConfig - validationTimeout................................5000 16:08:28.705 [main] INFO com.zaxxer.hikari.HikariDataSource - UserHikariCP - Starting... 16:08:29.773 [main] DEBUG com.zaxxer.hikari.pool.HikariPool - UserHikariCP - Added connection com.mysql.cj.jdbc.ConnectionImpl@6ca8564a 16:08:29.774 [main] INFO com.zaxxer.hikari.HikariDataSource - UserHikariCP - Start completed. 16:08:29.776 [main] DEBUG tech.spiro.addrparser.io.rdbms.RdbmsRegionDataInput - Initializing: Get connection completely. 16:08:29.876 [UserHikariCP housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - UserHikariCP - Before cleanup stats (total=1, active=1, idle=0, waiting=0) 16:08:29.877 [UserHikariCP housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - UserHikariCP - After cleanup stats (total=1, active=1, idle=0, waiting=0) 16:08:29.891 [UserHikariCP connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - UserHikariCP - Added connection com.mysql.cj.jdbc.ConnectionImpl@54f79fc8 16:08:29.905 [UserHikariCP connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - UserHikariCP - Added connection com.mysql.cj.jdbc.ConnectionImpl@484fcadd 16:08:29.919 [UserHikariCP connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - UserHikariCP - Added connection com.mysql.cj.jdbc.ConnectionImpl@534b8606 16:08:29.940 [UserHikariCP connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - UserHikariCP - Added connection com.mysql.cj.jdbc.ConnectionImpl@61c815aa 16:08:29.955 [UserHikariCP connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - UserHikariCP - Added connection com.mysql.cj.jdbc.ConnectionImpl@2a747d99 16:08:29.955 [UserHikariCP connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - UserHikariCP - After adding stats (total=6, active=1, idle=5, waiting=0) 16:08:31.164 [main] DEBUG tech.spiro.addrparser.io.rdbms.RdbmsRegionDataInput - Initializing: Get preparedStatement/resultSet completely. 16:08:31.164 [main] DEBUG tech.spiro.addrparser.io.rdbms.RdbmsRegionDataInput - Initialized. 16:08:34.011 [main] INFO tech.spiro.addrparser.io.rdbms.RdbmsRegionDataInput - Region Data Report => totalCount: 3727 CITY: 370 DISTRICT: 2854 STREET: 469 PROVINCE: 34 StopWatch '初始化位置解析引擎': running time = 5323026400 ns provInfo = RegionInfo{parentCode=100000, code=820000, name='澳门', level=PROVINCE} cityInfo = RegionInfo{parentCode=820000, code=820100, name='澳门', level=CITY} districtInfo = RegionInfo{parentCode=820100, code=820008, name='圣方济各堂区', level=DISTRICT} Process finished with exit code 0 ``` 使用json文件读取方式: ``` package com.example.addrparserdemo.test; import tech.spiro.addrparser.common.RegionInfo; import tech.spiro.addrparser.io.RegionDataInput; import tech.spiro.addrparser.io.file.JSONFileRegionDataInput; import tech.spiro.addrparser.parser.Location; import tech.spiro.addrparser.parser.LocationParserEngine; import tech.spiro.addrparser.parser.ParserEngineException; /** * 〈功能简述〉
* 〈〉 * * @author Mr.QL * @ClassName ChinaRegionTest * @Date 2022-05-13 11:54 * @Version 1.0 */ public class ChinaRegionTest { public static void main(String[] args) throws ParserEngineException { // china-region.json文件作为基础数据 RegionDataInput regionDataInput = new JSONFileRegionDataInput("D:\\workspace\\studyaddrparser\\addrparser-divisions-of-china\\addrparser-demo\\src\\main\\resources\\path\\china-region.json"); // 创建并初始化位置解析引擎,一般配置为全局单例 LocationParserEngine engine = new LocationParserEngine(regionDataInput); // 初始化,加载数据,比较耗时 engine.init(); // 执行解析操作 Location location = engine.parse(118.750934, 32.038634); // 获取省市区信息 RegionInfo provInfo = location.getProv(); System.out.println("provInfo = " + provInfo); RegionInfo cityInfo = location.getCity(); System.out.println("cityInfo = " + cityInfo); RegionInfo districtInfo = location.getDistrict(); System.out.println("districtInfo = " + districtInfo); } } ``` 结果: ```java com.example.addrparserdemo.test.ChinaRegionTest 16:15:05.708 [main] INFO tech.spiro.addrparser.io.file.JSONFileRegionDataInput - Region Data Report => totalCount: 3725 PROVINCE: 34 CITY: 368 DISTRICT: 2854 STREET: 469 provInfo = RegionInfo{parentCode=100000, code=320000, name='江苏省', level=PROVINCE} cityInfo = RegionInfo{parentCode=320000, code=320100, name='南京市', level=CITY} districtInfo = RegionInfo{parentCode=320100, code=320106, name='鼓楼区', level=DISTRICT} Process finished with exit code 0 ``` # 备注参考: 根据经纬度解析省市区信息工具包 参考 :https://github.com/hsp8712/addrparser 中华人民共和国行政区划(五级):省级、地级、县级、乡级和村级。 参考:https://github.com/modood/Administrative-divisions-of-China 省市区县乡镇三级或四级城市数据,带拼音标注、坐标、行政区域边界范围;2022年04月28日最新采集,提供csv格式文件,支持在线转成多级联动js代码、通用json格式,提供软件转成shp、geojson、sql、导入数据库;带浏览器里面运行的js采集源码,综合了中华人民共和国民政部、国家统计局、高德地图、腾讯地图行政区划数据。 参考:https://gitee.com/xiangyuecn/AreaCity-JsSpider-StatsGov