拂衣天氣(微天氣)—行政區劃資料(一)

拂衣志發表於2024-05-04

前言

微天氣程式中存在如下幾個功能需要使用到行政區劃資料:

  • 城市列表,需要支援城市搜尋
  • 根據經緯度獲區域(城市)的天氣資料
  • 地圖座標拾取並獲取所處區域(城市)資訊,同時獲取天氣資料

對於城市的天氣資料,不使用和風天氣的城市列表,而是自行維護,透過空間位置(經緯度)進行關聯。對於城市位置的定義,本可以選擇如行政中心或市中心,但我沒有這樣的資料,就直接用城市區劃範圍的中心點代替。不準確不重要,過程已經滿足了,且後續是可以替換的。

其實完全可以使用官方提供的城市資料和GeoAPI覆蓋這些功能,但既然我是做GIS開發的,而且手裡也有可以用作研究學習的資料,為啥不用呢。

今天突然發現,其實我可以爬一下和風的資料,這樣就可以拿到城市選擇的經緯度資料了 @time 2023.10.10

About

行政區劃解析程式,輸入shape檔案,寫入Postgresql.

大體完整的四級行政區劃資料組織

github link: fuyi-district-parse

資料情況

資料原源於網路,由於時間久遠,我已經忘記了是如何獲取到的

202208142058324

202208142106822

名詞解釋

省級行政區

中國的一級行政區,或稱國家一級行政區或省級行政區,是指直屬中央政府管轄的行政區劃,在歷史上曾有不同的稱呼。如:省、自治區、直轄市、特別行政區。

地級行政區

地級行政區即“地區級別行政區”,是現行中華人民共和國行政區劃中常規的第二級行政區劃單位,包括地級市、地區、盟、自治州等。地級行政區隸屬於省、自治區、直轄市等省級行政區之下;下轄若干個縣、區、縣級市、旗等縣級行政區。作為特例,東莞市、中山市、嘉峪關市、儋州市等四個地級市下轄街道辦事處與鄉鎮,不轄縣、區,因此也稱作“直筒子(地級)市”。地級行政區的級別為正廳級,所以非正廳級的省直轄的行政區劃不算作地級行政區,例如:湖北省轄的仙桃市、天門市、潛江市;河南省轄的濟源市等等。直轄市下轄的區,雖然是正廳級,但未列入地級行政區的統計。

縣級行政區

縣為中華人民共和國行政區劃單位之一,縣級行政區指行政地位與“縣”相同的行政區劃單位的總稱,其管轄鄉級行政區。為鄉、鎮的上一級行政區劃單位。中華人民共和國成立後,隨著行政督察區名稱的變更,除各直轄市均隸屬於專區(行政督察專區)、地區或地級行政區,現除各直轄市、海南省直管縣外均為地級行政區的下一級行政區。

  • 按省、縣、鄉三級行政區劃制度劃分,縣級行政區屬於第二級行政區,為直轄市的下級行政區劃單位。
  • 按省、地、縣、鄉四級行政區劃制度劃分,縣級行政區屬於第三級行政區,屬於省、自治區所轄地級行政區的下級行政區劃單位。

鄉級行政區

鄉,中華人民共和國現行基層行政區劃單位,區劃層次介於縣與村之間。“鄉”為縣、縣級市下的主要行政區劃型別之一。中國行政區劃史上,“鄉”一直為縣的行政區劃單元,因此現行處同一層次的區劃單位歸入鄉級行政區。中國自改革開放以來,由於城市的快速擴張,行政區劃制度出現了大的變革。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)

省級行政區-shapefile

地級行政區

存在錯亂資料,可以使用行政區程式碼識別(code),需要擷取前6位

地級行政區

縣級行政區

存在錯亂資料,可以使用行政區程式碼識別(code),需要擷取前6位

縣級行政區-shapefile

鄉級行政區

鄉級行政區-shapefile

成果

記錄數:46652

點資料為各個行政區中心點

資料解析成果-shapefile_to_postgis

資料表

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;

相關文章