好久不见,不如不见

毕业新起点

 真的是好久没来这里写东西啦,经常写点东西总归是好的,记录一些一闪而过的灵光和想法idea总可能会用的上吧。毕业啦,那就好好工作,认真生活,坚持学习up。

<think> 我们正在解决用户的问题:“长时间未使用后选取的样本点消失只剩代码的原因” 根据用户描述,他之前在GEE中选取的样本点(可能是通过几何工具手动绘制的点)在长时间未使用后,发现这些点消失了,只留下了代码(可能是之前导出的代码形式)。 原因分析: 1. GEE的脚本编辑器默认不会永久保存几何图形(Geometry)。当用户手动在Map面板上绘制点、线、面时,这些几何图形是临时存储在浏览器的本地存储(Local Storage)中。如果长时间未使用(或者清除了浏览器缓存,或者更换了浏览器/电脑),这些几何图形可能会丢失。 2. 用户可能之前将绘制的点导出为代码(通过几何图形导入框的“转为脚本”功能),并将代码保存在脚本中。这样,即使本地的几何图形丢失,代码中仍然保留了点的坐标信息。因此,当用户再次打开脚本时,只能看到代码(即用ee.Geometry.Point等定义的几何对象),而地图上不再显示之前手动绘制的点(因为本地存储已经丢失)。 解决方案: 1. 如果用户已经将几何图形导出为代码(即脚本中有类似`var samplePoints = ee.FeatureCollection([...]);`的代码),那么即使本地存储的图形丢失,这些点仍然可以通过代码重新生成。用户只需要运行代码,然后使用`Map.addLayer(samplePoints, {}, 'Sample Points');`即可重新显示到地图上。 2. 为了避免未来再次丢失,建议用户将手动绘制的几何图形及时导出为代码并保存在脚本中。操作步骤: - 在脚本编辑器中,找到“Geometry Imports”区域(通常在左侧面板)。 - 在某个几何图形上点击右键,选择“转为脚本”。 - 生成的代码会出现在脚本中,然后可以将其赋值给一个变量(如`var points = ...;`)。 3. 如果用户没有事先导出为代码,并且本地存储已经丢失,那么之前绘制的点将无法找回。因此,建议用户养成及时导出几何图形为代码的习惯。 注意事项: - GEE的几何图形本地存储依赖于浏览器,不同浏览器之间不共享,且清除缓存会删除这些数据。 - 导出为代码的几何图形是永久保存在脚本中的,除非用户删除脚本。 因此,用户遇到的情况很可能是由于浏览器本地存储被清除或过期,导致手动绘制的点消失,但之前导出的代码还在。所以,现在地图上不显示点,但代码还在。 如果用户现在想重新显示这些点,只需将保存点的变量(例如`samplePoints`)添加到地图上即可。 示例代码: ```javascript // 假设之前已经将点导出为代码并赋值给变量samplePoints var samplePoints = ee.FeatureCollection([ ee.Feature(ee.Geometry.Point([经度1, 纬度1]), {'class': 1}), ee.Feature(ee.Geometry.Point([经度2, 纬度2]), {'class': 0}) ]); // 添加点到地图 Map.addLayer(samplePoints, {color: 'red'}, 'Sample Points'); ``` 相关问题: 1. 如何将GEE中绘制的样本点导出为CSV文件? 2. 如何自动生成均匀分布的采样点? 3. 在GEE中如何用样本点训练机器学习模型? 4. 样本点坐标的精度对分类结果有何影响? 注意:在回答中,我们引用了GEE的常见操作,但并未直接引用之前提供的参考文献。不过,我们可以在回答末尾添加一些相关引用,以提供更多背景信息,例如关于GEE中几何图形的管理[^1],以及使用样本点进行训练[^3]。 </think>### Google Earth Engine 样本点消失的原因分析 在 Google Earth Engine (GEE) 中,长时间未使用后手动选取的样本点消失只剩代码的现象主要由以下技术原因造成: 1. **浏览器本地存储机制** GEE 的几何图形(包括手动绘制的样本点)默认存储在浏览器的 **Local Storage** 中[^1]。当长时间未访问或清除浏览器缓存时,这些临时数据会被自动清除,导致点从地图界面消失,仅保留代码中的几何定义。 2. **会话状态管理** GEE 脚本编辑器的 **会话状态 (Session State)** 不会永久保存手动添加的图层[^3]: ```javascript // 手动添加的点属于临时图层 Map.addLayer(samplePoints); // 关闭浏览器后消失 ``` 3. **几何导入的局限性** 通过左侧 **Geometry Imports** 面板绘制的点属于"未命名导入几何": - 未通过 `Export` 保存到 Assets - 未通过 `ee.Geometry()` 转为代码变量 - 导致重加载页面时无法恢复[^1] 4. **代码与显示的分离** 脚本中通过 `ee.Geometry.Point()` 定义的坐标是永久性的,但 **显示层与数据层分离**: ```javascript var p = ee.Geometry.Point([116.4, 39.9]); // 代码永久存在 Map.addLayer(p); // 显示依赖临时会话 ``` --- ### 解决方案:永久保存样本点 #### 方法1:将点转为代码变量 1. 绘制点后右键点击左侧面板中的几何图形 2. 选择 **"Convert to script"** 3. 自动生成代码: ```javascript var geometry = ee.Geometry.Point([116.4, 39.9]); // 永久保存 ``` #### 方法2:存储到GEE Assets ```javascript // 步骤1: 创建FeatureCollection var points = ee.FeatureCollection([ ee.Feature(ee.Geometry.Point([lon1, lat1]), {'class': 1}), ee.Feature(ee.Geometry.Point([lon2, lat2]), {'class': 0}) ]); // 步骤2: 导出到Assets Export.table.toAsset({ collection: points, description: 'sample_points_export', assetId: 'users/your_account/sample_points' }); // 步骤3: 后续调用 var savedPoints = ee.FeatureCollection('users/your_account/sample_points'); Map.addLayer(savedPoints, {color: 'red'}, '永久样本点'); ``` #### 方法3:初始化时自动加载 在脚本开头添加加载逻辑: ```javascript // 检查浏览器存储中是否有保存的点 var savedPoints = localStorage.getItem('gee_sample_points'); if (!savedPoints) { // 无保存点时创建新点集 var newPoints = ee.FeatureCollection([...]); localStorage.setItem('gee_sample_points', JSON.stringify(newPoints)); } else { // 加载保存的点 var points = ee.FeatureCollection(JSON.parse(savedPoints)); Map.addLayer(points); } ``` --- ### 最佳实践建议 1. **及时转换**:绘制点后立即右键选择 **"Convert to script"** 2. **定期备份**:将关键样本点导出到 Assets(`Export.table.toAsset`) 3. **使用书签**:通过 `localStorage` 保存点的坐标数组 4. **代码化管理**:直接在脚本中用 `ee.Geometry.Point()` 定义点坐标[^4] > **关键区别**: > - `ee.Geometry.Point()` 定义的坐标 → **永久保存在代码中** > - 手动绘制的点 → **临时存储在浏览器缓存**
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值