图中蓝色部分是地域范围属性表,后面是土地利用属性表,标题都是对的但是内容上是空的
一个地域单元和一个土地利用地类的矢量图合并之后,为什么属性表是空值啊。只有一个是好好的,其他都不行,方法是一样的啊,有没有什么解决方法
图中蓝色部分是地域范围属性表,后面是土地利用属性表,标题都是对的但是内容上是空的
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
这个问题涉及到两个矢量地图文件合并后的属性不匹配的问题。在ArcGIS中,当您尝试将一个矢量数据集与另一个矢量数据集合并时,可能会遇到这种情况,因为这两个数据集可能有不同的字段名称。
首先,我们需要确认两个矢量数据集是否具有相同的结构。这通常意味着它们应该有相似的字段名、数据格式和大小。例如,它们都应该包含省份、城市等基本行政区划信息,以及相应的土地利用类别。此外,它们还应该有一个共同的坐标系统,以便进行空间重叠检查。
其次,我们可以通过比较两个矢量数据集中的字段来确定哪些字段是共享的,并且哪些字段不同。我们可以使用
arcpy.AddFieldDelimiters()
函数来获取字段分隔符,然后使用arcpy.AddFieldIdentifiers()
函数来获取字段列表。如果我们发现字段列表中有不同的字段,则可以考虑添加这些字段到较小的数据集中。以下是修改后的问题和解决方案示例代码:
import arcpy from arcgis.gis import GIS # 创建GIS对象 gis = GIS("Your ArcGIS Online username") # 加载源数据 source_data1 = gis.dataSources.newFromLayer('path/to/data1.shp') source_data2 = gis.dataSources.newFromLayer('path/to/data2.shp') # 获取字段分隔符 field_delimiter1 = source_data1.fields[0].fieldDelimiter field_delimiter2 = source_data2.fields[0].fieldDelimiter # 获取字段列表 fields1 = [field.name for field in source_data1.fields] fields2 = [field.name for field in source_data2.fields] # 检查字段列表是否有重复 if len(set(fields1 + fields2)) != len(fields1 + fields2): # 如果存在重复的字段,则创建一个新的字段列表并添加所有字段 new_fields = list(set(fields1 + fields2)) else: new_fields = fields1 + fields2 # 将新的字段列表应用于两个数据集 new_source_data1 = source_data1.copy() new_source_data2 = source_data2.copy() for field_name in new_fields: new_field = source_data1.fields.newField(field_type=field_name, field_length=len(field_name), field_precision=0, field_scale=0) if field_name == 'State': new_field.fieldType = 'Geometry' new_field.fieldDefinition = 'POLYGON EMPTY' else: new_field.fieldType = 'String' new_source_data1.fields.append(new_field) new_field = source_data2.fields.newField(field_type=field_name, field_length=len(field_name), field_precision=0, field_scale=0) if field_name == 'State': new_field.fieldType = 'Geometry' new_field.fieldDefinition = 'POLYGON EMPTY' else: new_field.fieldType = 'String' new_source_data2.fields.append(new_field) # 将更新的字段应用到数据集 new_source_data1.updateFields() new_source_data2.updateFields() # 更新数据集的字段分隔符 new_source_data1.fields[0].fieldDelimiter = field_delimiter1 new_source_data2.fields[0].fieldDelimiter = field_delimiter2 # 打开目标数据集 target_data = gis.dataSources.newFromLayer('path/to/target_data.shp') # 合并数据集 target_data.mergeData([new_source_data1, new_source_data2]) # 保存更改 target_data.saveChanges()
这个例子展示了如何从两个不同的矢量数据集中提取相同字段,并将它们添加到一个新的数据集中。在这个过程中,我们将每个字段都转换为字符串类型,并确保所有的字段都有适当的长度、精度和精度。最后,我们通过
mergeData()
函数将这两个数据集合并在一起,从而解决了属性表为空的问题。注意,你需要根据你的具体情况进行调整。例如,你可能需要调整字段名、数据格式或其他参数。如果你没有ArcGIS Online账户,那么这段代码可能不会工作。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥30 stm32f103c8t6制作万能红外遥控器
- ¥15 有人会fastcrud写前端页面吗
- ¥15 如何解除Uniaccess管控
- ¥15 微信小程序跳转关联公众号
- ¥15 Java AES 算法 加密采用24位向量报错如何处理?
- ¥15 使用X11可以找到托盘句柄,监控到窗口点击事件但是如何在监听的同时获取托盘中应用的上下文菜单句柄
- ¥45 字符串操作——数组越界问题
- ¥15 Loss下降到0.08时不在下降调整学习率也没用
- ¥15 QT+FFmpeg使用GPU加速解码
- ¥15 为什么投影机用酷喵播放电影放一段时间就播放不下去了?提示发生未知故障,有什么解决办法吗?