前言
微天氣程式中存在如下幾個功能需要使用到行政區劃資料:
- 城市列表,需要支援城市搜尋
- 根據經緯度獲區域(城市)的天氣資料
- 地圖座標拾取並獲取所處區域(城市)資訊,同時獲取天氣資料
對於城市的天氣資料,不使用和風天氣的城市列表,而是自行維護,透過空間位置(經緯度)進行關聯。對於城市位置的定義,本可以選擇如行政中心或市中心,但我沒有這樣的資料,就直接用城市區劃範圍的中心點代替。不準確不重要,過程已經滿足了,且後續是可以替換的。
其實完全可以使用官方提供的城市資料和GeoAPI覆蓋這些功能,但既然我是做GIS開發的,而且手裡也有可以用作研究學習的資料,為啥不用呢。
今天突然發現,其實我可以爬一下和風的資料,這樣就可以拿到城市選擇的經緯度資料了 @time 2023.10.10
About
行政區劃解析程式,輸入shape檔案,寫入Postgresql.
大體完整的四級行政區劃資料組織
github link: fuyi-district-parse
資料情況
資料原源於網路,由於時間久遠,我已經忘記了是如何獲取到的
名詞解釋
省級行政區
中國的一級行政區,或稱國家一級行政區或省級行政區,是指直屬中央政府管轄的行政區劃,在歷史上曾有不同的稱呼。如:省、自治區、直轄市、特別行政區。
地級行政區
地級行政區即“地區級別行政區”,是現行中華人民共和國行政區劃中常規的第二級行政區劃單位,包括地級市、地區、盟、自治州等。地級行政區隸屬於省、自治區、直轄市等省級行政區之下;下轄若干個縣、區、縣級市、旗等縣級行政區。作為特例,東莞市、中山市、嘉峪關市、儋州市等四個地級市下轄街道辦事處與鄉鎮,不轄縣、區,因此也稱作“直筒子(地級)市”。地級行政區的級別為正廳級,所以非正廳級的省直轄的行政區劃不算作地級行政區,例如:湖北省轄的仙桃市、天門市、潛江市;河南省轄的濟源市等等。直轄市下轄的區,雖然是正廳級,但未列入地級行政區的統計。
縣級行政區
縣為中華人民共和國行政區劃單位之一,縣級行政區指行政地位與“縣”相同的行政區劃單位的總稱,其管轄鄉級行政區。為鄉、鎮的上一級行政區劃單位。中華人民共和國成立後,隨著行政督察區名稱的變更,除各直轄市均隸屬於專區(行政督察專區)、地區或地級行政區,現除各直轄市、海南省直管縣外均為地級行政區的下一級行政區。
- 按省、縣、鄉三級行政區劃制度劃分,縣級行政區屬於第二級行政區,為直轄市的下級行政區劃單位。
- 按省、地、縣、鄉四級行政區劃制度劃分,縣級行政區屬於第三級行政區,屬於省、自治區所轄地級行政區的下級行政區劃單位。
鄉級行政區
鄉,中華人民共和國現行基層行政區劃單位,區劃層次介於縣與村之間。“鄉”為縣、縣級市下的主要行政區劃型別之一。中國行政區劃史上,“鄉”一直為縣的行政區劃單元,因此現行處同一層次的區劃單位歸入鄉級行政區。中國自改革開放以來,由於城市的快速擴張,行政區劃制度出現了大的變革。1980年代以後“鄉改鎮”、“鄉改街道”的現象越來越普遍。
在鄉級行政區劃中,鄉(包括鎮)設有一級人民政府,屬於基層政權;鄉的行政區劃單位為村(含民族村)。但很多鄉設有社群,鄉的區劃單位設定與鎮、街道看不出實質性差異。
目的
解析所有資料檔案,實現最終入庫
使用GeoTools實現
資料庫表結構:
-
行政區劃資訊(district_info)
- id:自增Id(bigserial)
- name:行政區劃名稱
- grade:行政區劃等級(省級行政區:1, 地級行政區:2, 縣級行政區:3,)
- code:行政區程式碼
- center_point:中心點(geometry::point)
- bounds:行政區邊界(geometry)
注:
- 資料入庫前審查,保證行政區程式碼唯一
- 使用grade區分省、市、縣、鄉鎮
- 對於省、市、縣code列,統一進行前6位擷取(不滿6位字元所在資料,直接丟棄),對於鄉鎮則統一進行前9位進行擷取(不滿9位字元所在資料,直接丟棄)
省級行政區
存在錯亂資料,可以使用行政區程式碼識別(adcode)
地級行政區
存在錯亂資料,可以使用行政區程式碼識別(code),需要擷取前6位
縣級行政區
存在錯亂資料,可以使用行政區程式碼識別(code),需要擷取前6位
鄉級行政區
成果
記錄數:46652
點資料為各個行政區中心點
資料表
PostGIS
CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA public;
行政區劃
--
-- Name: district_info_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
--
CREATE SEQUENCE public.district_info_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public.district_info_id_seq OWNER TO postgres;
-- Table: public.district_info
-- DROP TABLE IF EXISTS public.district_info;
CREATE TABLE IF NOT EXISTS public.district_info
(
name character varying COLLATE pg_catalog."default",
grade integer,
code character varying COLLATE pg_catalog."default",
center_point geometry(Point,4326),
bounds geometry(MultiPolygon,4326),
create_time timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
uid character varying COLLATE pg_catalog."default",
id bigint NOT NULL DEFAULT nextval('district_info_id_seq'::regclass),
CONSTRAINT district_info_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.district_info
OWNER to postgres;
COMMENT ON TABLE public.district_info
IS '行政區劃資訊表';
COMMENT ON COLUMN public.district_info.name
IS '行政區名稱';
COMMENT ON COLUMN public.district_info.grade
IS '行政區等級,目前支援:(1:省級行政區,2;市級行政區,3:縣級行政區,4:鄉級行政區)';
COMMENT ON COLUMN public.district_info.code
IS '行政區編碼。其中,縣級與縣級以上行政區編碼為6位,縣級以下(即鄉級)行政區編碼為9位';
COMMENT ON COLUMN public.district_info.center_point
IS '行政區中心點,資料座標系:4326';
COMMENT ON COLUMN public.district_info.bounds
IS '行政區邊界,資料座標系:4326';
COMMENT ON COLUMN public.district_info.uid
IS '唯一標識,便於資料遷移';
--
-- Name: district_info_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
--
ALTER SEQUENCE public.district_info_id_seq OWNED BY public.district_info.id;
日誌
...
org.fuyi.district.DistrictParseApplication
/home/fuyi/GeoDatabase/China
-------------------
/home/fuyi/GeoDatabase/China/重慶市/重慶市_市界.shp
current element size: 12
-------------------
/home/fuyi/GeoDatabase/China/重慶市/重慶市_省界.shp
current element size: 4
-------------------
/home/fuyi/GeoDatabase/China/重慶市/重慶市_縣界.shp
current element size: 75
-------------------
/home/fuyi/GeoDatabase/China/重慶市/重慶市_鄉鎮邊界.shp
current element size: 1218
-------------------
/home/fuyi/GeoDatabase/China/新疆自治區/新疆自治區_省界.shp
current element size: 4
-------------------
/home/fuyi/GeoDatabase/China/新疆自治區/新疆自治區_縣界.shp
current element size: 111
-------------------
/home/fuyi/GeoDatabase/China/新疆自治區/新疆自治區_鄉鎮邊界.shp
current element size: 1410
-------------------
/home/fuyi/GeoDatabase/China/新疆自治區/新疆自治區_市界.shp
current element size: 28
-------------------
/home/fuyi/GeoDatabase/China/湖北省/湖北省_市界.shp
current element size: 28
-------------------
/home/fuyi/GeoDatabase/China/湖北省/湖北省_省界.shp
current element size: 6
-------------------
/home/fuyi/GeoDatabase/China/湖北省/湖北省_縣界.shp
current element size: 150
-------------------
/home/fuyi/GeoDatabase/China/湖北省/湖北省_鄉鎮邊界.shp
current element size: 1679
-------------------
/home/fuyi/GeoDatabase/China/陝西省/陝西省_市界.shp
current element size: 24
-------------------
/home/fuyi/GeoDatabase/China/陝西省/陝西省_縣界.shp
current element size: 158
-------------------
/home/fuyi/GeoDatabase/China/陝西省/陝西省_省界.shp
current element size: 7
-------------------
/home/fuyi/GeoDatabase/China/陝西省/陝西省_鄉鎮邊界.shp
current element size: 1559
-------------------
/home/fuyi/GeoDatabase/China/廣東省/廣東省_省界.shp
current element size: 7
-------------------
/home/fuyi/GeoDatabase/China/廣東省/廣東省_縣界.shp
current element size: 160
-------------------
/home/fuyi/GeoDatabase/China/廣東省/廣東省_市界.shp
current element size: 31
-------------------
/home/fuyi/GeoDatabase/China/廣東省/廣東省_鄉鎮邊界.shp
current element size: 1902
-------------------
/home/fuyi/GeoDatabase/China/雲南省/雲南省_鄉鎮邊界.shp
current element size: 1594
-------------------
/home/fuyi/GeoDatabase/China/雲南省/雲南省_省界.shp
current element size: 5
-------------------
/home/fuyi/GeoDatabase/China/雲南省/雲南省_縣界.shp
current element size: 165
-------------------
/home/fuyi/GeoDatabase/China/雲南省/雲南省_市界.shp
current element size: 27
-------------------
/home/fuyi/GeoDatabase/China/寧夏省/寧夏省_市界.shp
current element size: 12
-------------------
/home/fuyi/GeoDatabase/China/寧夏省/寧夏省_鄉鎮邊界.shp
current element size: 326
-------------------
/home/fuyi/GeoDatabase/China/寧夏省/寧夏省_縣界.shp
current element size: 36
-------------------
/home/fuyi/GeoDatabase/China/寧夏省/寧夏省_省界.shp
current element size: 4
-------------------
/home/fuyi/GeoDatabase/China/內蒙古自治區/內蒙古自治區_鄉鎮邊界.shp
current element size: 1498
-------------------
/home/fuyi/GeoDatabase/China/內蒙古自治區/內蒙古自治區_市界.shp
current element size: 35
-------------------
/home/fuyi/GeoDatabase/China/內蒙古自治區/內蒙古自治區_省界.shp
current element size: 7
-------------------
/home/fuyi/GeoDatabase/China/內蒙古自治區/內蒙古自治區_縣界.shp
current element size: 173
-------------------
/home/fuyi/GeoDatabase/China/海南省/海南省_縣界.shp
current element size: 27
-------------------
/home/fuyi/GeoDatabase/China/海南省/海南省_省界.shp
current element size: 1
-------------------
/home/fuyi/GeoDatabase/China/海南省/海南省_市界.shp
current element size: 19
-------------------
/home/fuyi/GeoDatabase/China/海南省/海南省_鄉鎮邊界.shp
current element size: 214
-------------------
/home/fuyi/GeoDatabase/China/山東省/山東省_省界.shp
current element size: 5
-------------------
/home/fuyi/GeoDatabase/China/山東省/山東省_鄉鎮邊界.shp
current element size: 1984
-------------------
/home/fuyi/GeoDatabase/China/山東省/山東省_市界.shp
current element size: 27
-------------------
/home/fuyi/GeoDatabase/China/山東省/山東省_縣界.shp
current element size: 167
-------------------
/home/fuyi/GeoDatabase/China/浙江省/浙江省_省界.shp
current element size: 6
-------------------
/home/fuyi/GeoDatabase/China/浙江省/浙江省_市界.shp
current element size: 18
-------------------
/home/fuyi/GeoDatabase/China/浙江省/浙江省_縣界.shp
current element size: 110
-------------------
/home/fuyi/GeoDatabase/China/浙江省/浙江省_鄉鎮邊界.shp
current element size: 1431
-------------------
/home/fuyi/GeoDatabase/China/青海省/青海省_省界.shp
current element size: 5
-------------------
/home/fuyi/GeoDatabase/China/青海省/青海省_鄉鎮邊界.shp
current element size: 470
-------------------
/home/fuyi/GeoDatabase/China/青海省/青海省_縣界.shp
current element size: 72
-------------------
/home/fuyi/GeoDatabase/China/青海省/青海省_市界.shp
current element size: 19
-------------------
/home/fuyi/GeoDatabase/China/江蘇省/江蘇省_鄉鎮邊界.shp
current element size: 1634
-------------------
/home/fuyi/GeoDatabase/China/江蘇省/江蘇省_省界.shp
current element size: 5
-------------------
/home/fuyi/GeoDatabase/China/江蘇省/江蘇省_市界.shp
current element size: 26
-------------------
/home/fuyi/GeoDatabase/China/江蘇省/江蘇省_縣界.shp
current element size: 138
-------------------
/home/fuyi/GeoDatabase/China/江西省/江西省_市界.shp
current element size: 27
-------------------
/home/fuyi/GeoDatabase/China/江西省/江西省_鄉鎮邊界.shp
current element size: 1927
-------------------
/home/fuyi/GeoDatabase/China/江西省/江西省_縣界.shp
current element size: 137
-------------------
/home/fuyi/GeoDatabase/China/江西省/江西省_省界.shp
current element size: 7
-------------------
/home/fuyi/GeoDatabase/China/西藏自治區/西藏自治區_縣界.shp
current element size: 91
-------------------
/home/fuyi/GeoDatabase/China/西藏自治區/西藏自治區_省界.shp
current element size: 5
-------------------
/home/fuyi/GeoDatabase/China/西藏自治區/西藏自治區_市界.shp
current element size: 14
-------------------
/home/fuyi/GeoDatabase/China/西藏自治區/西藏自治區_鄉鎮邊界.shp
current element size: 737
-------------------
/home/fuyi/GeoDatabase/China/天津市/天津市_縣界.shp
current element size: 32
-------------------
/home/fuyi/GeoDatabase/China/天津市/天津市_省界.shp
current element size: 2
-------------------
/home/fuyi/GeoDatabase/China/天津市/天津市_市界.shp
current element size: 4
-------------------
/home/fuyi/GeoDatabase/China/天津市/天津市_鄉鎮邊界.shp
current element size: 360
-------------------
/home/fuyi/GeoDatabase/China/臺灣省/臺灣省_村名.shp
current element size: 0
-------------------
/home/fuyi/GeoDatabase/China/臺灣省/臺灣省_鄉鎮名稱.shp
current element size: 0
-------------------
/home/fuyi/GeoDatabase/China/臺灣省/臺灣省_縣名稱.shp
current element size: 0
-------------------
/home/fuyi/GeoDatabase/China/廣西省/廣西省_省界.shp
current element size: 3
-------------------
/home/fuyi/GeoDatabase/China/廣西省/廣西省_市界.shp
current element size: 25
-------------------
/home/fuyi/GeoDatabase/China/廣西省/廣西省_縣界.shp
current element size: 142
-------------------
/home/fuyi/GeoDatabase/China/廣西省/廣西省_鄉鎮邊界.shp
current element size: 1433
-------------------
/home/fuyi/GeoDatabase/China/香港特別行政區/香港特別行政區_鄉鎮邊界.shp
current element size: 8
-------------------
/home/fuyi/GeoDatabase/China/香港特別行政區/香港特別行政區_縣界.shp
current element size: 21
-------------------
/home/fuyi/GeoDatabase/China/香港特別行政區/香港特別行政區_省界.shp
current element size: 2
-------------------
/home/fuyi/GeoDatabase/China/香港特別行政區/香港特別行政區_市界.shp
current element size: 1
-------------------
/home/fuyi/GeoDatabase/China/安徽省/安徽省_市界.shp
current element size: 34
-------------------
/home/fuyi/GeoDatabase/China/安徽省/安徽省_鄉鎮邊界.shp
current element size: 1832
-------------------
/home/fuyi/GeoDatabase/China/安徽省/安徽省_省界.shp
current element size: 6
-------------------
/home/fuyi/GeoDatabase/China/安徽省/安徽省_縣界.shp
current element size: 149
-------------------
/home/fuyi/GeoDatabase/China/河南省/河南省_市界.shp
current element size: 38
-------------------
/home/fuyi/GeoDatabase/China/河南省/河南省_鄉鎮邊界.shp
current element size: 2722
-------------------
/home/fuyi/GeoDatabase/China/河南省/河南省_縣界.shp
current element size: 209
-------------------
/home/fuyi/GeoDatabase/China/河南省/河南省_省界.shp
current element size: 7
-------------------
/home/fuyi/GeoDatabase/China/黑龍江省/黑龍江省_市界.shp
current element size: 20
-------------------
/home/fuyi/GeoDatabase/China/黑龍江省/黑龍江省_省界.shp
current element size: 3
-------------------
/home/fuyi/GeoDatabase/China/黑龍江省/黑龍江省_縣界.shp
current element size: 150
-------------------
/home/fuyi/GeoDatabase/China/黑龍江省/黑龍江省_鄉鎮邊界.shp
current element size: 1874
-------------------
/home/fuyi/GeoDatabase/China/澳門特別行政區/澳門特別行政區_市界.shp
current element size: 1
-------------------
/home/fuyi/GeoDatabase/China/澳門特別行政區/澳門特別行政區_省界.shp
current element size: 2
-------------------
/home/fuyi/GeoDatabase/China/澳門特別行政區/澳門特別行政區_鄉鎮邊界.shp
current element size: 4
-------------------
/home/fuyi/GeoDatabase/China/澳門特別行政區/澳門特別行政區_縣界.shp
current element size: 9
-------------------
/home/fuyi/GeoDatabase/China/吉林省/吉林省_省界.shp
current element size: 4
-------------------
/home/fuyi/GeoDatabase/China/吉林省/吉林省_縣界.shp
current element size: 82
-------------------
/home/fuyi/GeoDatabase/China/吉林省/吉林省_鄉鎮邊界.shp
current element size: 1134
-------------------
/home/fuyi/GeoDatabase/China/吉林省/吉林省_市界.shp
current element size: 19
-------------------
/home/fuyi/GeoDatabase/China/北京市/北京市_縣界.shp
current element size: 32
-------------------
/home/fuyi/GeoDatabase/China/北京市/北京市_鄉鎮邊界.shp
current element size: 395
-------------------
/home/fuyi/GeoDatabase/China/北京市/北京市_市界.shp
current element size: 4
-------------------
/home/fuyi/GeoDatabase/China/北京市/北京市_省界.shp
current element size: 3
-------------------
/home/fuyi/GeoDatabase/China/四川省/四川省_鄉鎮邊界.shp
current element size: 4933
-------------------
/home/fuyi/GeoDatabase/China/四川省/四川省_市界.shp
current element size: 32
-------------------
/home/fuyi/GeoDatabase/China/四川省/四川省_省界.shp
current element size: 7
-------------------
/home/fuyi/GeoDatabase/China/四川省/四川省_縣界.shp
current element size: 237
-------------------
/home/fuyi/GeoDatabase/China/上海市/上海市_省界.shp
current element size: 3
-------------------
/home/fuyi/GeoDatabase/China/上海市/上海市_鄉鎮邊界.shp
current element size: 251
-------------------
/home/fuyi/GeoDatabase/China/上海市/上海市_縣界.shp
current element size: 24
-------------------
/home/fuyi/GeoDatabase/China/上海市/上海市_市界.shp
current element size: 4
-------------------
/home/fuyi/GeoDatabase/China/甘肅省/甘肅省_縣界.shp
current element size: 137
-------------------
/home/fuyi/GeoDatabase/China/甘肅省/甘肅省_市界.shp
current element size: 33
-------------------
/home/fuyi/GeoDatabase/China/甘肅省/甘肅省_省界.shp
current element size: 7
-------------------
/home/fuyi/GeoDatabase/China/甘肅省/甘肅省_鄉鎮邊界.shp
current element size: 1601
-------------------
/home/fuyi/GeoDatabase/China/福建省/福建省_市界.shp
current element size: 18
-------------------
/home/fuyi/GeoDatabase/China/福建省/福建省_鄉鎮邊界.shp
current element size: 1272
-------------------
/home/fuyi/GeoDatabase/China/福建省/福建省_省界.shp
current element size: 4
-------------------
/home/fuyi/GeoDatabase/China/福建省/福建省_縣界.shp
current element size: 109
-------------------
/home/fuyi/GeoDatabase/China/河北省/河北省_市界.shp
current element size: 26
-------------------
/home/fuyi/GeoDatabase/China/河北省/河北省_鄉鎮邊界.shp
current element size: 2574
-------------------
/home/fuyi/GeoDatabase/China/河北省/河北省_省界.shp
current element size: 8
-------------------
/home/fuyi/GeoDatabase/China/河北省/河北省_縣界.shp
current element size: 225
-------------------
/home/fuyi/GeoDatabase/China/貴州省/貴州省_鄉鎮邊界.shp
current element size: 1791
-------------------
/home/fuyi/GeoDatabase/China/貴州省/貴州省_縣界.shp
current element size: 122
-------------------
/home/fuyi/GeoDatabase/China/貴州省/貴州省_市界.shp
current element size: 16
-------------------
/home/fuyi/GeoDatabase/China/貴州省/貴州省_省界.shp
current element size: 5
-------------------
/home/fuyi/GeoDatabase/China/湖南省/湖南省_省界.shp
current element size: 6
-------------------
/home/fuyi/GeoDatabase/China/湖南省/湖南省_市界.shp
current element size: 28
-------------------
/home/fuyi/GeoDatabase/China/湖南省/湖南省_鄉鎮邊界.shp
current element size: 2662
-------------------
/home/fuyi/GeoDatabase/China/湖南省/湖南省_縣界.shp
current element size: 169
-------------------
/home/fuyi/GeoDatabase/China/山西省/山西省_縣界.shp
current element size: 154
-------------------
/home/fuyi/GeoDatabase/China/山西省/山西省_市界.shp
current element size: 28
-------------------
/home/fuyi/GeoDatabase/China/山西省/山西省_鄉鎮邊界.shp
current element size: 1580
-------------------
/home/fuyi/GeoDatabase/China/山西省/山西省_省界.shp
current element size: 5
-------------------
/home/fuyi/GeoDatabase/China/遼寧省/遼寧省_縣界.shp
current element size: 123
-------------------
/home/fuyi/GeoDatabase/China/遼寧省/遼寧省_市界.shp
current element size: 21
-------------------
/home/fuyi/GeoDatabase/China/遼寧省/遼寧省_省界.shp
current element size: 4
-------------------
/home/fuyi/GeoDatabase/China/遼寧省/遼寧省_鄉鎮邊界.shp
current element size: 1659
Process finished with exit code 0
參考
- wiki-中華人民共和國行政區劃程式碼
- geotools-shapeplugin
-- alter table district_info alter column center_point
-- type Geometry(Point, 4326) USING ST_SetSRID(center_point, 4326);
-- ALTER TABLE district_info ALTER COLUMN bounds TYPE Geometry(MultiPolygon, 4326) USING ST_SetSRID(bounds, 4326);
select st_astext(center_point), * from district_info where grade = 1 order by id limit 1000 ;
select st_area(bounds) as area, * from district_info where grade = 1 and name like '%海南%';
-- delete from district_info;
select code, count(*) as _count from district_info group by code order by _count desc;
select * from district_info;