做门户网站的公司有哪些/老鬼seo
1简介
在本模块中,我们将讨论以下概念:
- 如何将您自己的数据集引入 GEE。
- 如何将来自遥感数据的值与您自己的数据相关联。
- 如何从 GEE 导出特征。
2背景
了解动物对环境的反应对于了解如何管理这些物种至关重要。虽然动物被迫做出选择以满足其基本需求,但它们的选择很可能也受到当地天气条件等动态因素的影响。除了直接观察之外,很难将动物行为与天气条件联系起来。在这个单元中,我们将从美洲狮收集的 GPS 项圈数据与通过 GEE 访问的 Daymet 气候数据集的每日温度估计值集成。
这将要求我们将自己的数据引入 GEE,将天气值连接到点位置,并将这些增值数据从 GEE 中带回以进行进一步分析。在加利福尼亚州洛杉矶的顶级旅游目的地之一附近拍摄的山狮的相机陷阱照片。照片:地球岛杂志
2.1 GPS定位数据
Mahoney 等人Movebank.com 上的交互图示例,可让您搜索有关动物运动的数据。
2.2 Daymet 天气数据
Daymet 数据以 1 公里 x 1 公里的空间分辨率提供每天的数据,是美洲狮与景观相互作用的时间和空间尺度的重要资源。总共有七个测量值。这使我们能够检查天气的多个方面,以评估它如何影响行为。Daymet 数据集提供了每日天气参数的网格估计。每天有 7 个地表天气参数可用,空间分辨率为 1 公里 x 1 公里,空间范围为北美。ORNL DAAC 可以通过各种工具和格式访问 Daymet 数据集,从而提供丰富的每日地表气象资源。资料来源: Daymet/NASA
与 GEE 中的 Daymet 图像关联的元数据。
如果您有兴趣了解有关全球可用气候数据的更多信息,请查看 单元6。
3将您自己的数据带入 Earth Engine
在本练习中,我们将讨论如何将您自己的数据移动到 GEE、从数据集中提取值以及从 GEE 中导出这些值。将数据带入 GEE 的过程一直在迅速变化,与大多数事情一样,最好直接转到文档以查看最新更新。该信息可以在这里找到。
3.1清理数据
动物运动数据作为 csv 文件下载。要将它们带入 GEE,我们需要将它们转换为 shapefile。虽然有很多方法可以将 csv 文件转换为 shapefile,但我们将使用 R。下面的代码包含进行此转换所需的所有内容。可以在此处找到有关如何在 R 中将 csv 文件转换为 shapefile 的详细信息。
代码的一些复杂性来自重命名列以删除“.”。为了符合 GEE 对命名约定的要求,这是必要的。虽然此特定细节不在文档中,但它在帮助论坛上的帖子中有所描述。
您不需要运行此代码,它供您将来参考
# Load necessary libraries
library(sp)
library(rgdal)
library(dplyr)# read in CSV of data
baseDir <- "The folder your csv is held in"
data <- read.csv(paste0( baseDir, "/Site fidelity in cougars and coyotes, Utah_Idaho USA (data from Mahoney et al. 2016).csv"))# convert to spatial points data frame
# remove all NA values from lat and long columns
names(data)
noNAs <- data[complete.cases(data[ , 4:5]),]
# filter to select animal of interest
glimpse(noNAs)
cougarF53 <- noNAs %>%filter(individual.local.identifier == "F53") %>%dplyr::select("event.id", "timestamp", "location.long","location.lat")# Unique GEE issue
# GEE does not accept column names with dots So we will rename our columsn
colnames(cougarF53) <- c("id", "timestamp", "lon", "lat")
# check the time line of data collection so we can match those dates in GEE
timeframe <- sort(cougarF53$timestamp)print(paste0("The first time stamp is ", timeframe[1], " the last collection is ", timeframe[length(timeframe)] ))# Create a spatial feature with the sp package
# only keep unique id as data
cougarF53Spatial <- sp::SpatialPointsDataFrame(coords = cougarF53[,3:4], data = cougarF53[,1])
# set coordinate reference system to WGS84, using the proj4str
crs(cougarF53Spatial) <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs "# Export as shapefile
# write a shapefile
writeOGR(cougarF53Spatial, baseDir, "/cougarF53Locations", driver="ESRI Shapefile")
我们写出了 shapefile,每行只有一个列,一个唯一的 id。我们这样做是因为我们计划在 GEE 之外进行大部分分析,因此无需加载所有额外数据。唯一 ID 将允许我们将来自 GEE 的增值数据与原始数据集连接起来。
3.2引入资产
-
坐标参考系统:首先,重要的是要注意 GEE 使用的投影是WGS 1984 EPSG: 4326。因此,您想要带入 GEE 的所有数据都需要相同的坐标参考系统。请记住 WGS1984 是一个地理坐标系。您不希望数据上有投影坐标系。
-
上传 shapefile:在上面的 R 代码中,我们将数据的 csv 文件转换为 shapefile,并定义坐标参考系统 (CRS) 以匹配 GEE 的预期 (WGS 1984)。当您将功能加载到 Google 地球引擎中时,您将添加与您的 GEE 帐户相关联的个人资产。
您将能够在任务窗格中监控上传进度。
上传后,您可以通过代码编辑器左侧的资产窗格编辑资产。这允许您设置共享参数。对于此示例,任何人都可以读取资产。这意味着运行代码的任何人都将能够使用数据集,即使他们不拥有它或没有下载它。
共享个人资产的示例。
上传 shapefile 的过程可能需要一段时间,因此我们提供了一个脚本链接,而不是让您完成该过程,该脚本已经加载了本课程所需的数据。带有预加载数据集的代码。请将此脚本用作本课剩余部分的起点。
运行完此内容后,我们建议您加载自己的 shapefile。这可以是您的数据,或者如果您想要快速简便的数据,请尝试使用Natural Earth Data中的 shapefile 。这是一个用于各种地图比例的地理数据的绝佳站点。上面的链接将带您进入的 1:110m 物理向量非常通用,因此加载速度比数据更丰富的层快得多。
每项资产都具有与您在 Google 云端硬盘上可能拥有的其他功能类似的共享偏好。
import
允许您将新获取的资产添加到脚本中。这与将 imageCollection 导入脚本非常相似。
share
允许您定义谁可以查看和编辑资产。
delete
使用它来清理空间,但请记住,一去不复返了。
加载资产后,通过双击资产面板中的资产名称或将鼠标悬停在名称上时按下出现在功能右侧的小箭头图标,将其导入脚本。将功能重命名为具有描述性的名称。然后在地图上将其可视化,以确保该功能看起来符合您的预期。
在预加载的脚本中,您可以看到我们已经完成了这些步骤。我们还添加了一个打印语句来访问数据结构。
-
- // Imported the data and not add it to the map and print.
- Map.addLayer(cougarF53, {}, "cougar presence data");
- print(cougarF53, "cougar data");
您可以使用检查器工具查看与新资产关联的属性数据。
将这些点可视化后,制作一个包含我们感兴趣区域的几何特征。我们将使用几何特征来过滤我们的气候数据。
您可以通过选择方形几何特征并绘制一个包含这些点的框来完成此操作。
在这些点周围绘制几何特征以过滤气候数据。
3.2.1上传栅格
引入栅格的过程与我们刚刚使用 shapefile 进行的过程相同。图像集合(栅格集)是更复杂的数据类型,还有一些其他要求,您可以在此处阅读。
3.3定义天气变量
在本课中,我们使用 Google Earth Engine 作为将遥感数据(即我们的栅格)与我们的点位置相关联的方法。虽然这个过程在概念上是直截了当的,但它确实需要一些工作才能完成。加载我们的点后,下一步是导入 Daymet 天气变量。
3.3.1调用气候资料日
我们使用的是 NASA 派生的数据集 Daymet V3,因为它具有 1 公里的空间分辨率,并且它可以测量美洲狮所经历的环境条件。我们将通过调用数据集的唯一 ID 并将其过滤到我们的边界框几何图形来导入它。
// Call in image and filter.
var Daymet = ee.ImageCollection("NASA/ORNL/DAYMET_V3")
.filterDate("2014-01-01", "2017-08-01")
.filterBounds(geometry)
.select('tmin')
.map(function(image){return image.clip(geometry)});print(Daymet,"Daymet");
Map.addLayer(Daymet, {}, "Daymet");
打印语句中 Daymet 数据结构的视图。
从打印语句中,我们可以看到这是一个包含 267 张图像的图像集合(尽管您的图像总数可能会随着数据集的变化而变化)。每幅图像都有七个与特定天气测量相关的波段。现在两个数据集都已加载,我们将把美洲狮的发生数据与天气数据相关联。
3.4提取值
加载我们的点和图像后,我们可以调用一个函数,根据美洲狮的已知位置从底层栅格中提取值。我们将使用该ee.Image.sampleRegions
函数来执行此操作。在 Docs 选项卡下搜索ee.Image.sampleRegions()
函数以熟悉它所需的参数。
ee.Image.sampleRegions()
是一个图像的函数,所以如果我们试图在 Daymet 上调用它,ImageCollection
我们会得到一个错误。为了解决这个问题,我们将把 Daymet 图像集合转换为多波段图像。每天的七次测量中的每一次都将成为我们多波段图像中的一个特定波段。这个过程最终将对我们有所帮助,因为每个波段都是由收集日期和显示的变量定义的。我们可以使用这些信息来确定哪些数据与美洲狮在特定日期的位置有关。
重要提示:在图像集合中有许多图像,我们将创建具有大量波段的单个图像。因为 GEE 非常擅长数据操作,所以它可以处理这种类型的请求。
// Convert to a multiband image and clip.
var DaymetImage = Daymet.toBands().filterBounds(geometry);print(DaymetImage, "DaymetImage");
显示从图像集合转换为多波段图像的结果的打印语句。
现在我们有了一个多波段图像,我们可以使用该sampleRegions
函数。您需要考虑此函数的三个参数。
Collection
采样数据将与之关联的矢量数据集。
Properties
定义将保留矢量数据集的哪些列。在这种情况下,我们希望保留“id”列,因为我们将使用它来将此数据集连接回 GEE 之外的原始数据。
Scale
:这是指数据集的空间尺度(像元大小)。比例应始终与栅格数据的分辨率相匹配。如果您不确定栅格的分辨率是多少,请使用搜索栏搜索数据集,该信息将出现在文档中。
// Call the sample regions function.
var samples = DaymetImage.sampleRegions({collection: cougarF53,properties: ['id'],scale: 1000 });
print(samples,'samples');
从打印语句中,我们可以看到我们的点位置现在具有与之关联的天气测量值。同样,您的结果可能看起来略有不同。
3.5 导出
3.5.1将点导出为 Shapefile
我们有一系列与美洲狮 57 已知位置相关的每日天气数据。虽然我们可以在 GEE 中更多地使用这些数据,但很容易将它们导入 R 或 Excel。有几个选项可以定义导出数据的最终位置。一般来说,将数据保存到 Google Drive 帐户是一个安全的选择。我们将使用字典(用大括号表示)来定义export.table.toDrive()
函数的参数。
shapefile 字段限制:一个 shapefile 只能包含 255 个字段;这些数据有 1869 个。因此,我们将数据导出为 csv 文件。
// Export value added data to your Google Drive.
Export.table.toDrive({collection: samples,description:'cougarDaymetToDriveExample',fileFormat: 'csv'
});
当您导出某些内容时,您的任务窗格将亮起。您需要通过选择运行按钮单独运行任务。

export
运行具有函数的脚本后的任务栏示例。
当您选择运行按钮时,将出现以下弹出窗口。这允许您编辑导出的详细信息。
从 GEE 导出特征时出现的用户定义参数示例。
3.5.2导出栅格
在处理所有这些空间数据时,您可能已经意识到,在美洲狮上收集数据的时间段内显示中值的栅格可能是非常有用的信息。有关使用栅格的更多信息,请参阅5
为此,我们将对median()
Daymet 图像集合应用一个 reducer 函数,为每个单元格中的每个参数生成一个中值。就像表格数据一样,我们将把这个多波段图像导出到 Google Drive。一旦我们使用该函数将图像集合转换为图像median()
,我们就可以将其剪辑到geometry
特征对象中。此要素将导出为多波段栅格。
// Apply a median reducer to the dataset.
var Daymet1 = Daymet.median().clip(geometry);print(Daymet1);// Export the image to drive.
Export.image.toDrive({image: Daymet1,description: 'MedianValueForStudyArea',scale: 1000,region: geometry,maxPixels: 1e9
});
有很多选项。最重要的选项之一是max.pixels
设置。一般来说,GEE 不允许您导出超过 10^9 像素的栅格。使用该max.pixels
参数,您可以将其提高到每张图像大约 10^12 像素。如果您为大于 10^12 像素的区域导出数据,您将需要创造性地了解如何从 GEE 中获取信息。有时这涉及将图像分割成更小的部分,或者在 GEE 之外重新评估如此大的图像的有用性。
4结论
虽然 Google 地球引擎可用于行星尺度分析,但它也是一种有效的资源,可用于使用您自己的数据快速访问和分析大量信息。本模块中介绍的方法是为您自己的数据集增加价值的好方法。在此示例中,我们使用了天气数据,但这绝不是唯一的选择!您可以将您的数据连接到 Google 地球引擎中的许多其他数据集。由您决定什么是重要的以及为什么重要。
4.1 完整代码
// Imported the data and not add it to the map and print.
Map.addLayer(cougarF53, {}, "cougar presence data");
print(cougarF53, "cougar data");// Call in image and filter.
var Daymet = ee.ImageCollection("NASA/ORNL/DAYMET_V3")
.filterDate("2014-01-01", "2017-08-01")
.filterBounds(geometry)
.select('tmin')
.map(function(image){return image.clip(geometry)});print(Daymet,"Daymet");
Map.addLayer(Daymet, {}, "Daymet");// Convert to a multiband image and clip.
var DaymetImage = Daymet.toBands().clip(geometry);print(DaymetImage, "DaymetImage");// Call the sample regions function.
var samples = DaymetImage.sampleRegions({collection: cougarF53,properties: ['id'],scale: 1000 });
print(samples,'samples');// Export value added data to your Google Drive.
Export.table.toDrive({collection: samples,description:'cougarDaymetToDriveExample',fileFormat: 'csv'
});// Apply a median reducer to the dataset.
var Daymet1 = Daymet.median().clip(geometry);
print(Daymet1);// Export the image to drive.
Export.image.toDrive({image: Daymet1,description: 'MedianValueForStudyArea',scale: 1000,region: geometry,maxPixels: 1e9
});
相关文章:

【GEE】4、 Google 地球引擎中的数据导入和导出
1简介 在本模块中,我们将讨论以下概念: 如何将您自己的数据集引入 GEE。如何将来自遥感数据的值与您自己的数据相关联。如何从 GEE 导出特征。 2背景 了解动物对环境的反应对于了解如何管理这些物种至关重要。虽然动物被迫做出选择以满足其基本需求&am…...

【C++】特殊类设计+类型转换+IO流
🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…...

JAVA整理学习实例(一)面向对象
JAVA整理学习实例(一)面向对象 注:整理一下之前写的东西,然后在修修补补,水平有限,有错误的请指正。 前言 基础部分的面试大部份是理论和一些语法细节,如果平时没有关注,在面试或者做…...

QT 实现解密m3u8文件
文章目录 概要如何解密M3U8文件呢实现思路和代码序列图网络请求解密 结论 概要 视频文件很多已M3U8文件格式来提供,先复习下什么是M3U8文件!用QT的 mutimedia框架来播放视频时,有的视频加载慢,有的视频加载快,为啥&am…...

论文阅读—— BiFormer(cvpr2023)
论文:https://arxiv.org/abs/2303.08810 github:GitHub - rayleizhu/BiFormer: [CVPR 2023] Official code release of our paper "BiFormer: Vision Transformer with Bi-Level Routing Attention" 一、介绍 1、要解决的问题:t…...

理解 fopen的 rwa r+w+a+ 参数含义
tags: C categories: C 理解 一图胜千言 我愿称之为最强 c - Difference between r and w in fopen() - Stack Overflow; 需要注意里面的a和 a, 区别在于 a 不可以读而 a可以读. c - Difference between r and w in fopen() - Stack Overflow; ModeReadWriteCreate New Fil…...

【强化学习】17 ——DDPG(Deep Deterministic Policy Gradient)
文章目录 前言DDPG特点 随机策略与确定性策略DDPG:深度确定性策略梯度伪代码代码实践 前言 之前的章节介绍了基于策略梯度的算法 REINFORCE、Actor-Critic 以及两个改进算法——TRPO 和 PPO。这类算法有一个共同的特点:它们都是在线策略算法,…...

驱动开发11-2 编写SPI驱动程序-点亮数码管
驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/spi/spi.h>int m74hc595_probe(struct spi_device *spi) {printk("%s:%d\n",__FILE__,__LINE__);char buf[]{0XF,0X6D};spi_write(spi,buf,sizeof(buf));return 0; …...

Java使用pdfbox进行pdf和图片之间的转换
简介 pdfbox是Apache开源的一个项目,支持pdf文档操作功能。 官网地址: Apache PDFBox | A Java PDF Library 支持的功能如下图.引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-app</artifactId><version>…...

机器学习中的关键组件
机器学习中的关键组件 数据 每个数据集由一个个样本组成,大多时候,它们遵循独立同分布。样本有时也叫作数据点或数据实例,通常每个样本由一组称为特征或协变量的属性组成。机器学习会根据这些属性进行预测,预测得到的称为标签或…...

【JVM】JDBC案例打破双亲委派机制
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 JVM 打破双亲委派机制(JDBC案例…...

每天五分钟计算机视觉:池化层的反向传播
本文重点 卷积神经网络(Convolutional Neural Network,CNN)作为一种强大的深度学习模型,在计算机视觉任务中取得了巨大成功。其中,池化层(Pooling Layer)在卷积层之后起到了信息压缩和特征提取的作用。然而,池化层的反向传播一直以来都是一个相对复杂和深奥的问题。本…...

Docker的安装、基础命令与项目部署
文章目录 前言一、docker安装与MySQL部署1.Linux环境下docker的安装(1)基于CentOS7(2)基于Ubuntu 二、docker基础1.常见命令(1)快速创建一个mysql容器(MySQL得一键安装)。࿰…...

Nodejs和npm的使用方法和教程
Nodejs简介 Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具! ( 运行环境,是不是很熟悉,对。就是 java JRE,Java 运行时环境) Node.js 在浏览器之外运行 V8 Java…...

机器学习---支持向量机的初步理解
1. SVM的经典解释 改编自支持向量机解释得很好 |字节大小生物学 (bytesizebio.net) 话说,在遥远的从前,有一只贪玩爱搞破坏的妖怪阿布劫持了善良美丽的女主小美,智勇双全 的男主大壮挺身而出,大壮跟随阿布来到了妖怪的住处&…...

【unity实战】Unity实现2D人物双击疾跑
最终效果 前言 我们要实现的功能是双击疾跑,当玩家快速地按下同一个移动键两次时能进入跑步状态 我假设快速按下的定义为0.2秒内,按下同一按键两次 简单的分析一下需求,实现它的关键在于获得按键按下的时间,我们需要知道第一次…...

Spring面试题:(二)基于xml方式的Spring配置
xml配置Bean的常见属性 id属性 name属性 scope属性 lazy-init属性 init-method属性和destroy属性 initializingBean方法 Bean实例化方式 ApplicationContext底层调用BeanFactory创建Bean,BeanFactory可以利用反射机制调用构造方法实例化Bean,也可采用工…...

XR Interaction ToolKit
一、简介 XR Interaction Toolkit是unity官方的XR交互工具包。 官方XRI示例地址:https://github.com/Unity-Technologies/XR-Interaction-Toolkit-Examples 2023.3.14官方博客,XRIT v2.3 https://blog.unity.com/engine-platform/whats-new-in-xr-int…...

spring-boot中实现分片上传文件
一、上传文件基本实现 1、前端效果图展示,这里使用element-ui plus来展示样式效果 2、基础代码如下 <template><div><el-uploadref"uploadRef"class"upload-demo":limit"1":on-change"handleExceed":auto-…...

【ICN综述】信息中心网络隐私安全
ICN基本原理: 信息中心网络也是需要实现在不可信环境下可靠的信息交换和身份认证 信息中心网络采用以数据内容为中心的传输方式代替现有IP 网络中以主机为中心的通信方式,淡化信息数据物理或逻辑位置的重要性,以内容标识为代表实现数据的查找…...

基于STC12C5A60S2系列1T 8051单片机EEPROM应用
基于STC12C5A60S2系列1T 8051单片机EEPROM应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC12C5A60S2系列1T 8051单片机EEPROM介绍基于STC12C5A60S2系列1T 8051单…...

手撕排序之直接选择排序
前言: 直接选择排序是排序中比较简单的排序,同时也是时间复杂度不是很优的排序。 思想: 本文主要讲解直接选择排序的优化版本。 我们经过一次遍历直接将该数列中最大的和最小的值挑选出来,如果是升序,就将最小的和…...

洛谷 P1359 租用游艇
题目链接 P1359 租用游艇 普及 题目描述 长江游艇俱乐部在长江上设置了 n n n 个游艇出租站 1 , 2 , 3 , . . . , n 1,2,3,...,n 1,2,3,...,n,游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 i i i 到游艇出租站…...

springboot中没有主清单属性解决办法
在执行一个 spring boot 启动类时,提示 没有主清单属性 一般这个问题是没加 spring-boot-maven-plugin 插件的问题,但是项目中已经加了 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifa…...

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)
目录 一、前言 二、static关键字是什么? 三、static关键字修饰的对象是什么? 四、C 语言中的 static 🍎static的C用法 🍉static的重点概念 🍐static修饰局部变量 💦static在修饰局部变量和函数的作用 &a…...

windwos10搭建我的世界服务器,并通过内网穿透实现联机游戏Minecraft
文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …...

【实战Flask API项目指南】之七 用JWT进行用户认证与授权
实战Flask API项目指南之 用JWT进行用户认证与授权 本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧! 前言 当小菜踏入Flask后端开发…...

鸿蒙LiteOs读源码教程+向LiteOS中添加一个简单的基于线程运行时的短作业优先调度策略
【⭐据说点赞收藏的都会收获好运哦👍】 一、鸿蒙Liteos读源码教程 鸿蒙的源码是放在openharmony文件夹下,openharmony下的kernel文件夹存放操作系统内核的相关代码和实现。 内核是操作系统的核心部分,所以像负责:资源管理、任…...

axios的使用与封装详细教程
目录 一、axios使用方式二、axios在main.js配置 一、axios使用方式 在 Spring Boot Vue 的项目中使用 Axios,你需要在 Vue 项目中安装 Axios 库,因为 Axios 是一个前端 JavaScript 库,用于发送 HTTP 请求和处理响应数据,而与 Sp…...

C++二叉搜索树
本章主要是二叉树的进阶部分,学习搜索二叉树可以更好理解后面的map和set的特性。 1.二叉搜索树概念 二叉搜索树的递归定义为:非空左子树所有元素都小于根节点的值,非空右子树所有元素都大于根节点的值,而左右子树也是二叉搜索树…...