马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目录
媒介
一、地名数据库
1、数据库模型
2、数据表布局
二、实践之旅,发现同名地名
1、省、市同名
2、市、县同名
3、 区县、州里同名
4、州里和村委会同名
三、总结
媒介
我们故国地大物博,从北到南,从东到西。故国位于亚洲东部,太平洋西岸。北起漠河附近的黑龙江江心,南到南沙群岛的曾母暗沙。西起帕米尔高原,东至黑龙江、乌苏里江会合处。陆地面积960万平方千米,陆上界限2万多千米。让我们从地理的视角来看辽阔的故国,我国的国土南北凌驾的纬度近50度,中国东西凌驾经度60多度。最东端在黑龙江和乌苏里江的主航道中央线的相交处(135°2′30’’E)。最西端在帕米尔高原附近(73°29'59.79"E)。最南端在立地暗沙(3°31‘00'N',东经112°17’09”E),为中国南海南沙群岛区域的一座暗沙,是实际上的中国国土的最南端。最北端在漠河以北黑龙江主航道的中央线上(53°33′N,124°20′E)。在这么辽阔的疆域上,我们从行政管理大将他们分为以下的行政区域,截至2020年底,中国共有34个省级行政区(包罗23个省、5个自治区、4个直辖市、2个特殊行政区)、333个地级行政区、2844个县级行政区、38741个州里级行政区。北京是中国的都城。
再往下,还有我们生活的的村名委员会等最基础的群众自治构造。从有国家开始,我们便有了区域的分别。不知道各位有没有注意到身边的行政区划之美,通过地理信息的来展示我们的地名之美,本日开始第一篇,重要将讲解地名篇,地名同名之美。我们都来看一下我们国家的省、市、区、县、州里、乡村6级中有哪些是相同的,来看看有没有你的家乡,假如在这系列的数据中找到了你的家乡,可以在评论区中留言哦。
本文将以地名数据库为例,联合舆图讲解怎样利用SQL语言来查询同名的行政区划。首先介绍地名数据库,包罗省(直辖市、自治区、特殊行政区)、市、县(区)、州里、村等根本信息。然后联合GIS信息来介绍这些同名的地名具体位置。发现GIS之美,用舆图将故事。假如你也感兴趣,欢迎在评论区一起讨论吧。
一、地名数据库
首先在进行同名地名的统计时,我们会用到地名数据库,这里我们从互联网上下载相关数据后,构建基础的空间数据库。以此来进行同名的地名库检索。避免新的朋友对内容不太熟悉,这里还是再次介绍一下地名数据库。
1、数据库模型
这里利用的数据库,总的数据量一共有652097(65W)左右,由于包含时空信息,因此将这些数据保存到PostGIS数据库中。利用空间字段来进行存储是为了可以在后续进行地名的空间信息查询。首先介绍一下空间表。
保存的数据信息大致如下:
以上是地名数据库的物理模型和示例数据信息。相识大要的物理布局后对于后续的数据查询就会有统一的熟悉。
2、数据表布局
为了后续进行SQL的讲解,这里将给出具体的地名表物理脚本,如下所示:
- CREATE TABLE "public"."biz_village" (
- "id" int8 NOT NULL,
- "province_name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
- "city_code" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,
- "city_name" varchar(512) COLLATE "pg_catalog"."default",
- "area_code" varchar(64) COLLATE "pg_catalog"."default",
- "area_name" varchar(512) COLLATE "pg_catalog"."default",
- "township_code" varchar(64) COLLATE "pg_catalog"."default",
- "township_name" varchar(512) COLLATE "pg_catalog"."default",
- "village_code" varchar(64) COLLATE "pg_catalog"."default",
- "village_name" varchar(512) COLLATE "pg_catalog"."default",
- "address" varchar(512) COLLATE "pg_catalog"."default",
- "type" varchar(32) COLLATE "pg_catalog"."default",
- "lng" varchar(24) COLLATE "pg_catalog"."default",
- "lat" varchar(24) COLLATE "pg_catalog"."default",
- "geom" "public"."geometry",
- CONSTRAINT "pk_biz_village" PRIMARY KEY ("id")
- );
- CREATE INDEX "idx_biz_village_areacode" ON "public"."biz_village" USING btree (
- "area_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
- );
- CREATE INDEX "idx_biz_village_city_code" ON "public"."biz_village" USING btree (
- "city_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
- );
- CREATE INDEX "idx_biz_village_geom" ON "public"."biz_village" USING gist (
- "geom" "public"."gist_geometry_ops_2d"
- );
- CREATE INDEX "idx_biz_village_geom_gp" ON "public"."biz_village" USING gist (
- (geom::geography) "public"."gist_geography_ops"
- );
- COMMENT ON COLUMN "public"."biz_village"."id" IS '主键';
- COMMENT ON COLUMN "public"."biz_village"."province_name" IS '省份名称';
- COMMENT ON COLUMN "public"."biz_village"."city_code" IS '市级编码';
- COMMENT ON COLUMN "public"."biz_village"."city_name" IS '市级名称';
- COMMENT ON COLUMN "public"."biz_village"."area_code" IS '区县编码';
- COMMENT ON COLUMN "public"."biz_village"."area_name" IS '区县名称';
- COMMENT ON COLUMN "public"."biz_village"."township_code" IS '乡镇编码';
- COMMENT ON COLUMN "public"."biz_village"."township_name" IS '乡镇名称';
- COMMENT ON COLUMN "public"."biz_village"."village_code" IS '乡村编码';
- COMMENT ON COLUMN "public"."biz_village"."village_name" IS '乡村名称';
- COMMENT ON COLUMN "public"."biz_village"."address" IS '地址';
- COMMENT ON COLUMN "public"."biz_village"."type" IS '类型';
- COMMENT ON COLUMN "public"."biz_village"."lng" IS '经度';
- COMMENT ON COLUMN "public"."biz_village"."lat" IS '纬度';
- COMMENT ON COLUMN "public"."biz_village"."geom" IS 'geom';
复制代码 同名的地名,其实就是从上面的几个维度进行对比,需要利用到的字段就是省份名称(直辖市名称、自治区名称、特殊行政区名称)、市名称、区县名称、州里名称、村委会名称等几个字段进行对比。由于行政区划属于基础数据,在别的业务中也会有相应的利用,而在不同级别的地名中,包含的信息又不一样,如下所示:
- 1733486534197293058 河北省 130400000000 邯郸市 130481000000 武安市 130481207000 管陶乡 130481207209 赵水沟村委会 河北省邯郸市武安市管陶乡赵水沟村委会 220 113.842658700000001 36.849781950000001 0101000020E6100000278CC11EEE755C4095FDA9A7C56C4240
- 1733486534201487362 河北省 130400000000 邯郸市 130481000000 武安市 130481207000 管陶乡 130481207210 寺峪沟村委会 河北省邯郸市武安市管陶乡寺峪沟村委会 220 113.855604799999995 36.838809660000003 0101000020E61000003D93A23AC2765C406BA26C1D5E6B4240
- 1733486534201487363 河北省 130400000000 邯郸市 130481000000 武安市 130481207000 管陶乡 130481207211 梨树脑村委会 河北省邯郸市武安市管陶乡梨树脑村委会 220 113.855597299999999 36.825900550000000 0101000020E6100000F0822D1BC2765C40CCFFF51BB7694240
- 1733486534205681666 河北省 130400000000 邯郸市 130481000000 武安市 130481207000 管陶乡 130481207212 野峪村村委会 河北省邯郸市武安市管陶乡野峪村村委会 220 113.853874200000007 36.806809370000003 0101000020E61000007CF9F8DFA5765C40D120898745674240
- 1733486534205681667 河北省 130400000000 邯郸市 130481000000 武安市 130481207000 管陶乡 130481207213 龙井村委会 河北省邯郸市武安市管陶乡龙井村委会 220 113.788396000000006 36.846837120000004 0101000020E610000006137F1475725C402CB8A328656C4240
- 1733486534205681668 河北省 130400000000 邯郸市 130481000000 武安市 130481207000 管陶乡 130481207214 禅房村委会 河北省邯郸市武安市管陶乡禅房村委会 220 113.853874200000007 36.806809370000003 0101000020E61000007CF9F8DFA5765C40D120898745674240
- 1733486534205681669 河北省 130400000000 邯郸市 130481000000 武安市 130481207000 管陶乡 130481207215 马洺村委会 河北省邯郸市武安市管陶乡马洺村委会 220 113.868096199999997 36.807365900000001 0101000020E61000000A325DE38E775C40EB330CC457674240
复制代码 以上面的实例数据为例,不同级别的行政区的后缀不一样。比如是某某省、某某市、某某县等等,因此我们需要在上面的数据中将不同的后缀去掉厥后进行比较。比如中寨镇、中寨村等。把镇和村去掉后才知道名字是否相同。在下面的例子中我们将基于前面的物理表布局以及上面的实例数据来进行同名地名的筛选。
二、实践之旅,发现同名地名
在上一节中,我们对涉及的地名数据库的物理表布局、实例数据进行了具体的讲解。下面我们可以将在全国范围内,寻找同名的行政区划信息。跟我博主一步一步来进行吧。
1、省、市同名
首先是省级行政区的名称和市级行政区同名的环境。很容易理解,这里我们需要利用的两个字段分别是省级行政区名称和市级行政区名称。将敏感词如省、市去掉后,看全国哪些地方会有这种环境。我们在PostGIS数据库中利用如下的SQL来完成查询。
- select province_name,city_name from biz_village
- where SPLIT_PART(province_name, '省', 1) = SPLIT_PART(city_name, '市', 1)
- OR SPLIT_PART(province_name, '市', 1) = SPLIT_PART(city_name, '区', 1)
- group by province_name,city_name;
复制代码 在数据库客户端软件执行以上sql后,可以看到以下的执行结果,在我国的行政区划上,省级行政区名称和市级行政区名字相同的之后吉林了,是我国的东北三省之一的省份:
2、市、县同名
看完省、市同名的环境,接下来我们来看一下市级行政区划和县级行政区划的同名环境。这种环境应该黑白经常见的。与查询省、市同名的sql语句不同,执行市、县同名的查询语句如下:
- select max(province_name) p_name,city_name,area_name from biz_village
- where SPLIT_PART(city_name, '市', 1) = SPLIT_PART(area_name, '县', 1)
- OR SPLIT_PART(city_name, '市', 1) = SPLIT_PART(area_name, '区', 1)
- group by city_name,area_name
- order by p_name asc
复制代码 在客户端执行完成之后,在终端可以看到以下的执行结果:
- p_name city_name area_name
- 安徽省 黄山市 黄山区
- 安徽省 芜湖市 芜湖县
- 甘肃省 白银市 白银区
- 河北省 邢台市 邢台县
- 河北省 承德市 承德县
- 河南省 新乡市 新乡县
- 河南省 安阳市 安阳县
- 河南省 濮阳市 濮阳县
- 湖北省 荆州市 荆州区
- 湖南省 长沙市 长沙县
- 湖南省 衡阳市 衡阳县
- 湖南省 邵阳市 邵阳县
- 湖南省 湘潭市 湘潭县
- 湖南省 岳阳市 岳阳县
- 吉林省 通化市 通化县
- 江苏省 淮安市 淮安区
- 江西省 吉安市 吉安县
- 江西省 南昌市 南昌县
- 辽宁省 辽阳市 辽阳县
- 辽宁省 铁岭市 铁岭县
- 辽宁省 朝阳市 朝阳县
- 辽宁省 抚顺市 抚顺县
- 山东省 东营市 东营区
- 四川省 广安市 广安区
- 新疆维吾尔自治区 乌鲁木齐市 乌鲁木齐县
- 新疆维吾尔自治区 克拉玛依市 克拉玛依区
复制代码 可以看到在全国行政区划中,市、县行政区名称相同的一共有26个城市。比如我们熟悉的安徽省黄山市黄山区、湖南省长沙市长沙县、新疆维吾尔自治区乌鲁木齐市乌鲁木齐区等等。湖南省和辽宁省的同名地名较多。
长沙市长沙县
辽宁省铁岭市铁岭县
3、 区县、州里同名
接下来来看下区、县和州里同名的行政区划有多少个?依然先给出区、县同名的查询SQL,具体的SQL语句如下:
通过以上的执行结果可以看到,区县和州里同名的环境较多,一共有322条。分布的范围也更广。

湖南省衡阳市南岳区南岳镇
4、州里和村委会同名
在文章的最后,来看一下,州里和村委会同名的在全国范围内又有多少个,肯定比区县和州里同名的环境多很多。执行sql如下:
- select max(province_name) p_name,max(city_name) city_name,max(area_name) area_name,township_name,village_name from biz_village
- where SPLIT_PART(township_name, '镇', 1) = SPLIT_PART(village_name, '村民委员会', 1)
- group by township_name,village_name
- order by p_name asc;
复制代码 在客户端软件中执行上面sql后可以看到在全国范围内一共有1256条数据。
注:以上的查询示例仅包含大多数的环境,还有一些特殊的环境没有考虑在内,比如一些民族自治县和旗、盟等区划。假如各人感兴趣,可以在实际例子中进行深度开辟,自行调解。
三、总结
以上就是本文的重要内容,本文将以地名数据库为例,联合舆图讲解怎样利用SQL语言来查询同名的行政区划。首先介绍地名数据库,包罗省(直辖市、自治区、特殊行政区)、市、县(区)、州里、村等根本信息。然后联合GIS信息来介绍这些同名的地名具体位置。发现GIS之美,用舆图将故事。通过探寻发现同名的地名,期待您发现更多风趣的地理知识。行文匆匆,定有不足之处,在此恳请各位专家和朋友在评论区不吝赐教,不甚荣幸。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |