当前位置:首页>python>地理绘图 | Python 绘制土地利用分类图——CLCD 数据

地理绘图 | Python 绘制土地利用分类图——CLCD 数据

  • 2026-02-07 08:18:37
地理绘图 | Python 绘制土地利用分类图——CLCD 数据

土地利用是地理研究的核心主题之一。本文将带你使用 Python 绘制专业的土地利用分类图,展现一个区域的农田、森林、水域等土地类型的空间分布。

引言:土地利用数据的价值

土地利用/土地覆盖(Land Use/Land Cover, LULC)数据是理解人类活动与自然环境关系的重要基础。通过土地利用分类图,可以直观地看到一个区域有多少农田、多少森林、多少城市建设用地,这对于城市规划、生态保护、农业管理都有重要意义。

CLCD(China Land Cover Dataset)是武汉大学开发的高精度土地覆盖数据集,覆盖 1990-2024 年,空间分辨率达到 30 米,将中国的土地分为 9 大类:农田、森林、灌木、草地、水域、冰雪、裸地、不透水面(城市建设用地)和湿地。

今天,小编将使用 Python 的地理空间数据处理工具,为任意区域绘制一张专业的土地利用分类图。最终效果包含完整的地图要素:底图、边界、标注、经纬度网格、指北针、比例尺和图例。

第一步:环境准备与 geodata 数据包

在开始绘图之前,需要导入必要的库并配置参数。这个项目的一大亮点是使用了小编专门开发的 geodata 数据管理包,它让地理数据的加载变得简单而优雅。

geodata 包:让数据管理变得优雅

在传统的地理数据处理中,经常遇到这样的困扰:代码里到处都是硬编码的文件路径,换个电脑就得全部修改;DEM 数据、矢量数据、土地利用数据散落在各个文件夹,管理混乱;每次加载数据都要写一大堆重复的代码。一次小编开发了一个包:geodata 包

geodata 包就是为了解决这些问题而生的。 它的核心理念很简单:把数据和代码打包在一起,通过统一的 API 访问。

geodata 的目录结构

geodata/
├── __init__.py              # 包入口
├── loader.py                # 核心加载器类
└── data/                    # 数据仓库
    ├── DEM数据/
    │   ├── dem_1km.tif     # 1公里分辨率
    │   └── dem_250m.tif    # 250米分辨率
    ├── 90mDEM/
    │   └── 90mdem.tif      # 90米分辨率
    ├── DEM30m/
    │   └── COPDEM.tif      # 30米高精度
    ├── 土地利用/
    │   └── CLCD_v01_2024_albert.tif  # CLCD 2024
    └── 矢量数据/
        ├── 省_Areas.shp
        ├── 市_Areas.shp
        └── 县_Areas.shp

这个结构清晰地组织了不同类型的地理数据。从全国尺度的 1km DEM,到县级尺度的 30m 高精度 DEM,再到 CLCD 土地利用数据和三级行政区划矢量数据,应有尽有。

GeoDataLoader 核心类

geodata 包的核心是 GeoDataLoader 类,它提供了三个主要方法:

from geodata import GeoDataLoader

# 创建加载器实例
loader = GeoDataLoader()

# 方法一:加载 CLCD 土地利用数据
clcd = loader.load_clcd(2024)  # 加载 2024 年数据

# 方法二:加载矢量边界数据
provinces = loader.load_vector("省""Areas")  # 省级边界
cities = loader.load_vector("市""Areas")     # 市级边界
counties = loader.load_vector("县""Areas")   # 县级边界

# 方法三:加载 DEM 数据(可选)
dem_250m = loader.load_dem("250m")  # 250米分辨率
dem_30m = loader.load_dem("30m")    # 30米高精度

geodata 的三大优势:

  1. 零配置:安装后直接使用,无需设置路径
  2. 跨平台:Windows、Linux、macOS 通用
  3. 统一接口:所有数据类型使用一致的加载方法

完整的环境配置代码

有了 geodata 包,代码变得非常简洁:

import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import matplotlib.patches as mpatches
import cartopy.crs as ccrs
import geopandas as gpd
import rasterio
from rasterio.mask import mask
import numpy as np
from geodata import GeoDataLoader

# 创建数据加载器
loader = GeoDataLoader()

# 目标区域配置
TARGET_LEVEL = "市"# 行政级别:省/市/县
TARGET_NAME = "毕节市"# 区域名称
CLCD_YEAR = 2024# 数据年份

# 图框配置
EXPAND_RATIO = 0.05# 边界外扩 5%
LON_INTERVAL = 30/60# 经度间隔 30 分钟
LAT_INTERVAL = 30/60# 纬度间隔 30 分钟

# 字体配置
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False

配置参数的设计思想

这里的参数设置体现了灵活性和通用性:

  • TARGET_LEVEL 和 TARGET_NAME:让系统可以处理任意行政级别的区域,从省到县都可以
  • EXPAND_RATIO = 0.05:地图边界外扩 5%,确保相邻区域的标注完整显示
  • 经纬度间隔:30 分钟(0.5 度)适合县级尺度,可根据需要调整

geodata 包的实现原理

geodata 使用 Python 的 pathlib 模块自动定位数据文件。Path(__file__).parent / "data" 这行代码获取包的安装路径,然后拼接出数据文件的完整路径。这样,无论包安装在哪里,都能正确找到数据文件。

# geodata/loader.py 的核心实现
classGeoDataLoader:
def__init__(self):
        self.data_dir = Path(__file__).parent / "data"
        self.clcd_dir = self.data_dir / "土地利用"
        self.vector_dir = self.data_dir / "矢量数据"

defload_clcd(self, year=2024):
        clcd_path = self.clcd_dir / f"CLCD_v01_{year}_albert.tif"
return rasterio.open(clcd_path)

这种设计让数据管理变得透明而可靠,只需关注可视化本身,而不用被数据路径的琐事困扰。

第二步:定义 CLCD 官方配色方案

土地利用分类图的配色至关重要。不同的土地类型需要用不同的颜色来区分,而且这些颜色应该符合人们的直觉认知——绿色代表植被,蓝色代表水域,红色代表城市建设用地。

CLCD 数据集提供了官方的配色方案,将其定义为一个字典:

# CLCD 官方分类配色方案
CLCD_CLASSES = {
1: {'name''农田''color''
#fae3c8'},      # 浅黄色
2: {'name''森林''color''#446f33'},      # 深绿色
3: {'name''灌木''color''#33a02c'},      # 中绿色
4: {'name''草地''color''#abd37b'},      # 浅绿色
5: {'name''水域''color''#1e69b4'},      # 蓝色
6: {'name''冰雪''color''#a6cee3'},      # 浅蓝色
7: {'name''裸地''color''#cfbda3'},      # 灰褐色
8: {'name''不透水面''color''#e24c42'},  # 红色(城市)
9: {'name''湿地''color''#2898e8'}       # 青蓝色
}

defcreate_clcd_cmap():
"""创建 CLCD 专用配色方案"""
    colors = [CLCD_CLASSES[i]['color'for i in sorted(CLCD_CLASSES.keys())]
    cmap = mcolors.ListedColormap(colors)
# 边界值: 0.5, 1.5, 2.5, ..., 9.5
    bounds = [i - 0.5for i in range(1, len(CLCD_CLASSES) + 2)]
    norm = mcolors.BoundaryNorm(bounds, cmap.N)
return cmap, norm

配色的科学性

这套配色方案经过精心设计:

  • 植被梯度:森林(深绿)→ 灌木(中绿)→ 草地(浅绿),颜色深浅反映植被密度
  • 水体系统:水域(蓝色)→ 湿地(青蓝色)→ 冰雪(浅蓝色),都在蓝色系中
  • 人工地表:农田(浅黄色)和不透水面(红色)使用暖色调,与自然植被的冷色调形成对比
  • 裸地:灰褐色,中性色调,表示无植被覆盖的自然地表

ListedColormap 与 BoundaryNorm

ListedColormap 创建一个离散的配色方案,每个类别对应一个固定的颜色。BoundaryNorm 定义了类别之间的边界,确保值 1 映射到第一个颜色,值 2 映射到第二个颜色,以此类推。这种组合非常适合分类数据的可视化。

第三步:加载矢量边界与 CLCD 数据

接下来,需要加载两类数据:矢量边界(定义研究区域)和 CLCD 栅格数据(土地利用分类)。

# 加载矢量边界
gdf = loader.load_vector(TARGET_LEVEL, "Areas")
target_gdf = gdf[gdf['name'] == TARGET_NAME]

# 加载 CLCD 数据
src = loader.load_clcd(CLCD_YEAR)
print(f"CLCD 原始坐标系: {src.crs}")

# 将矢量转换到 CLCD 的坐标系进行裁剪
target_gdf_proj = target_gdf.to_crs(src.crs)
temp_nodata = int(src.nodata if src.nodata isnotNoneelse255)

# 裁剪 CLCD 数据到目标区域
out_image, out_transform = mask(
    src, 
    target_gdf_proj.geometry, 
    crop=True
    nodata=temp_nodata
)

坐标系转换的必要性

CLCD 数据使用 Albers 等积投影(一种适合中国的投影坐标系),而矢量边界通常使用 WGS84 地理坐标系。要用矢量边界裁剪 CLCD,必须先将矢量转换到 CLCD 的坐标系。

mask 函数的作用

mask() 函数是 rasterio 库的核心功能之一。它接收一个栅格数据集和一个矢量几何体,返回裁剪后的栅格数据。crop=True 参数让它裁剪到最小边界矩形,大大减少数据量,提高后续处理速度。

第四步:坐标系重投影

裁剪后的 CLCD 数据仍然在 Albers 投影坐标系中,但为了与底图和矢量边界正确对齐,需要将它重投影到 WGS84 地理坐标系。这是整个流程中最关键的技术步骤。

from rasterio.warp import calculate_default_transform, reproject, Resampling

dst_crs = 'EPSG:4326'# WGS84 地理坐标系

# 计算目标转换参数
transform_wgs84, width_wgs84, height_wgs84 = calculate_default_transform(
    src.crs,                    # 源坐标系
    dst_crs,                    # 目标坐标系
    out_image.shape[2],         # 源宽度
    out_image.shape[1],         # 源高度
    *rasterio.transform.array_bounds(out_image.shape[1], out_image.shape[2], out_transform)
)

# 创建目标数组
clcd_wgs84 = np.empty((height_wgs84, width_wgs84), dtype=out_image.dtype)

# 执行重投影
reproject(
    source=out_image[0],
    destination=clcd_wgs84,
    src_transform=out_transform,
    src_crs=src.crs,
    dst_transform=transform_wgs84,
    dst_crs=dst_crs,
    resampling=Resampling.nearest  # 最近邻插值,保持分类值不变
)

# 计算重投影后的地理范围
left, bottom, right, top = rasterio.transform.array_bounds(
    height_wgs84, width_wgs84, transform_wgs84
)
data_extent = [left, right, bottom, top]

print(f"重投影完成: {src.crs} -> {dst_crs}")

为什么要重投影?

如果不重投影,直接在 Albers 坐标系中绘制 CLCD 数据,会出现以下问题:

  1. 与 WGS84 坐标系的底图无法对齐,导致 CLCD 数据显示在错误的位置
  2. 与 WGS84 坐标系的矢量边界无法匹配,边界线和 CLCD 数据错位
  3. 经纬度网格无法正确显示

Resampling.nearest 的重要性

对于分类数据,必须使用最近邻插值(nearest neighbor)。如果使用双线性或三次插值,会产生中间值(如 1.5、2.3),破坏分类的离散性。最近邻插值确保每个像素的值仍然是整数(1、2、3...),对应明确的土地类型。

calculate_default_transform 的作用

这个函数自动计算重投影所需的参数:新的仿射变换矩阵、新的宽度和高度。它确保重投影后的栅格覆盖相同的地理区域,且像素大小合理。

第五步:数据预处理与统计

重投影完成后,需要对数据进行预处理,并统计各土地类型的分布情况。

# 数据预处理
clcd_data = clcd_wgs84.astype('float32')
clcd_data[clcd_data == temp_nodata] = np.nan  # 无效值转为 NaN

# 统计各类别
unique_values, counts = np.unique(clcd_data[~np.isnan(clcd_data)], return_counts=True)
print(f"CLCD 数据形状: {clcd_data.shape}")
print(f"包含的土地类型: {[int(v) for v in unique_values]}")

# 计算地图范围(区域边界外扩 5%)
target_bounds = target_gdf.total_bounds
width = target_bounds[2] - target_bounds[0]
height = target_bounds[3] - target_bounds[1]

map_extent = [
    target_bounds[0] - width * EXPAND_RATIO,
    target_bounds[2] + width * EXPAND_RATIO,
    target_bounds[1] - height * EXPAND_RATIO,
    target_bounds[3] + height * EXPAND_RATIO
]

为什么要统计类别?

统计各土地类型有两个作用:

  1. 验证数据:确认数据加载和处理正确,包含预期的土地类型
  2. 优化图例:图例只显示数据中实际存在的类别,而不是全部 9 类。如果某个区域没有冰雪,图例就不显示冰雪,让图例更简洁

地图范围的外扩

外扩 5% 是一个经过实践检验的最佳值。它让地图不会显得过于拥挤,相邻区域的标注有足够的空间显示,同时又不会让目标区域显得太小。

第六步:绘制地图

将 CLCD 数据渲染成彩色的土地利用分类图。地图绘制是一个图层叠加的过程,每个图层都有其特定的作用和顺序。

# 创建图形和坐标轴
fig = plt.figure(figsize=(1210))
ax = plt.axes(projection=ccrs.PlateCarree())
ax.set_extent(map_extent, crs=ccrs.PlateCarree())

# 第一层:添加底图
ax.add_image(tiler, 8)

# 第二层:白色背景(确保 CLCD 区域可见)
ax.add_geometries(
    target_gdf.geometry,
    crs=ccrs.PlateCarree(),
    facecolor='white',
    edgecolor='none',
    zorder=4
)

# 第三层:绘制 CLCD 分类数据
cmap, norm = create_clcd_cmap()
clcd_masked = np.ma.masked_invalid(clcd_data)

im = ax.imshow(
    clcd_masked, 
    origin='upper'
    extent=data_extent, 
    transform=ccrs.PlateCarree(),
    cmap=cmap,
    norm=norm,
    alpha=0.85,
    zorder=5,
    interpolation='nearest'
)

# 第四层:绘制目标区域边界
ax.add_geometries(
    target_gdf.geometry, 
    crs=ccrs.PlateCarree(), 
    facecolor='none'
    edgecolor='black'
    linewidth=1.5
    zorder=10
)

图层顺序的设计

这个图层顺序经过精心设计:

  1. 底图(zorder=0):提供地理背景,显示海洋、湖泊等水体
  2. 白色背景(zorder=4):在目标区域铺一层白色,确保 CLCD 数据在任何底图上都清晰可见
  3. CLCD 数据(zorder=5):土地利用分类的核心图层
  4. 边界线(zorder=10):清晰标识研究区域的范围

alpha=0.85 的微妙之处

将 CLCD 图层设置为 85% 不透明度,让底图的水体部分微微透出来。这样,CLCD 数据中的水域(蓝色)与底图的水体(也是蓝色)相互呼应,增强视觉效果。

interpolation='nearest' 的必要性

对于分类数据,必须使用最近邻插值。如果使用双线性或三次插值,matplotlib 会在不同类别之间创建平滑过渡,产生不存在的中间颜色,破坏分类的清晰性。

第七步:添加地图要素

一张专业的地图必须包含完整的地图要素:边界、标注、经纬度网格、指北针、比例尺和图例。这些元素让地图不仅美观,更具有科学价值。

# 添加区域标注
target_center = target_gdf.geometry.representative_point().iloc[0]
ax.text(
    target_center.x, target_center.y, TARGET_NAME, 
    transform=ccrs.PlateCarree(),
    fontfamily='SimSun'
    fontsize=14
    fontweight='bold'
    ha='center', va='center',
    zorder=15,
    path_effects=[pe.withStroke(linewidth=3, foreground='white', alpha=0.7)]
)

# 设置经纬度网格
fplt.set_map_ticks(ax, map_extent, dx=LON_INTERVAL, dy=LAT_INTERVAL)
ax.tick_params(axis='both', direction='out', length=5, width=1)

# 添加指北针和比例尺
fplt.add_compass(ax, 0.950.88, size=20, style='arrow')

# 自动计算比例尺长度
map_width_km = (map_extent[1] - map_extent[0]) * 111
target_length = map_width_km / 4
standard_lengths = [510202550751001502002505001000]
scale_length = min(standard_lengths, key=lambda x: abs(x - target_length))
fplt.add_scale_bar(ax, 0.050.05, length=scale_length)

# 创建图例(只显示实际存在的类别)
legend_elements = []
for value in sorted(unique_values):
if int(value) in CLCD_CLASSES:
        class_info = CLCD_CLASSES[int(value)]
        legend_elements.append(
            mpatches.Patch(
                facecolor=class_info['color'], 
                edgecolor='black',
                linewidth=0.5,
                label=class_info['name']
            )
        )

legend = ax.legend(
    handles=legend_elements,
    loc='lower right',
    title=f'土地利用类型({CLCD_YEAR}年)',
    title_fontproperties={'family''SimSun''size'9'weight''bold'},
    prop={'family''SimSun''size'8},
    framealpha=0.95,
    edgecolor='black'
)
legend.set_zorder(20)  # 确保图例在所有元素之上

文字描边的重要性

path_effects=[pe.withStroke(linewidth=3, foreground='white', alpha=0.7)] 给文字添加白色描边。这个技巧让文字在任何背景上都清晰可读——无论背景是深色的森林还是浅色的农田。

比例尺的智能计算

比例尺长度根据地图宽度自动计算(约为地图宽度的 1/4),然后从标准长度列表中选择最接近的值。这确保比例尺长度总是"整数"(如 50km、100km),而不是奇怪的数字(如 73km)。

图例的优化

图例只显示数据中实际存在的土地类型。如果某个区域没有冰雪或湿地,图例就不显示这些类别,让图例更简洁、更有针对性。

第八步:导出与应用

最后一步是将地图导出为高分辨率图片,用于报告、论文或演示。

# 导出图片
filename = f"{TARGET_NAME}_CLCD_{CLCD_YEAR}.jpg"
plt.savefig(filename, dpi=1200, bbox_inches="tight", facecolor='white')
print(f"已保存: {filename}")
plt.close()

1200 DPI 的意义

DPI(Dots Per Inch)表示每英寸的像素数。1200 DPI 是高质量印刷的标准,远超屏幕显示所需的 72-150 DPI。这样的图片可以直接用于学术论文、书籍出版,甚至大幅海报。

bbox_inches='tight' 的作用

这个参数让 matplotlib 自动裁剪掉图片周围的空白区域,确保导出的图片紧凑而不浪费空间。

总结

通过这个内容,完成了从原始 CLCD 数据到专业土地利用分类图的完整流程。这个过程涉及多个关键技术:

数据处理技术:

  • 矢量数据的加载和空间查询
  • 栅格数据的裁剪和重投影
  • 坐标系转换和对齐
  • 无效值处理和数据统计

可视化技术:

  • 离散配色方案的创建
  • 多图层的叠加和顺序管理
  • 地图要素的添加和布局
  • 高分辨率图片的导出

设计思想:

  • 数据与代码的解耦(geodata 包)
  • 参数化配置,提高灵活性
  • 自动化计算,减少手动调整
  • 用户友好的输出和提示

基于PyGIS绘制研究区土地利用类型概况图,完全脱离GIS相关软件,相比传统的ArcGIS绘制研究区概况图更加省时省力,而且支持批量导出,批量渲染,更加方便快捷。

后续小编会更新不同尺度的研究区地形概况图。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 19:41:25 HTTP/2.0 GET : https://f.mffb.com.cn/a/465200.html
  2. 运行时间 : 0.220327s [ 吞吐率:4.54req/s ] 内存消耗:4,541.57kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=e4fd9d8b797ee3ffa148e0c1b6295010
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001147s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001600s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.009753s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.005404s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001612s ]
  6. SELECT * FROM `set` [ RunTime:0.001200s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001382s ]
  8. SELECT * FROM `article` WHERE `id` = 465200 LIMIT 1 [ RunTime:0.001166s ]
  9. UPDATE `article` SET `lasttime` = 1770550885 WHERE `id` = 465200 [ RunTime:0.003090s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000581s ]
  11. SELECT * FROM `article` WHERE `id` < 465200 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001081s ]
  12. SELECT * FROM `article` WHERE `id` > 465200 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001113s ]
  13. SELECT * FROM `article` WHERE `id` < 465200 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001945s ]
  14. SELECT * FROM `article` WHERE `id` < 465200 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002360s ]
  15. SELECT * FROM `article` WHERE `id` < 465200 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005330s ]
0.224232s