ArcGIS地形图配准并生成三维模型(附练习数据下载)

本文详细介绍了如何使用ArcGIS对地形图进行配准,生成三维模型的过程,包括数据处理、坐标配准、矢量化、创建DEM、制作地形图以及创建三维模型的步骤,并提供了练习数据供学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请添加图片描述
01 前言

由于这个是第9届全国大学生 GIS 技能大赛上午的试题,都是一些很重要的基本操作,但是综合性要求还是比较高,小编默认练习这个试题的都是大佬啦,所以我会把一些要注意的东西给点一下,大概操作步骤是给出了,但是没有像之前的文章一样一个点击就给出一个步骤图,毕竟一些简单的步骤各位小伙伴也是熟记于心,放出来也是画蛇添足,让大家不厌其烦。

02 数据说明

topo_map.jpg:雷尼尔山国家公园的扫描地形图。雷尼尔山国家公园位于美国华盛顿州,

地理坐标系是 WGS1984,投影是 UTM 分度带投影(后面矢量化需要用到哦)。雷尼尔山国家公园的经度范围在 西经 121 度-西经 122 度之间(确定投影坐标系带号)。扫描图上的高程值单位是英尺,1英尺=0.3048米(高程字段转换单位)。

03 分析要求

1.使扫描图有正确的坐标值和坐标系。

扫描图上的横线和竖线是方里格网,间隔是 2km,左上角的交叉点坐标值(596000,5194000), 请创建一份正确的扫描地形图数据,命名为“TopoMap”并且附上RMS误差表。

解答:

首先我们打开数据,查看坐标系,UTM10度带,符合该公园的经度位置,因为UTM带号是东经180°自西向东开始计算的。接下来我们右键菜单栏空白处加载地理配准(适合给栅格数据添加空间参考),不是空间校正(给矢量数据进行空间位置变换)哦,这两个工具界面不仅很像,功能也大同小异,初学者容易混淆。

我们点击图片图片按钮,放大数据到左上角网格交叉点处右键选择“输入X、Y坐标”:(596000,5194000),一般这种我们至少要4个点才能保证这个配准结果的准确性,所以我们分别给左下角、右上角、右下角输入X、Y坐标,前面给了提示方里格网间隔是2000米,小编做了一个表格(虽然有点麻烦但是不容易出错哦):请添加图片描述
越往后面会发现坐标原始值越接近我们即将要输入的配准坐标值,这是因为前面的配准点对整个图像起到了整体空间位置改变。添加完成后,点击地理配准下拉框【校正】,对地图进行校正和导出,记得在名称中输入:TopoMap哦。

### Python 函数使用教程 #### 1. 定义函数 在 Python 中,定义一个函数需要使用 `def` 关键字。函数名后面跟随括号和冒号,接着是从下一行开始缩进的函数体。 ```python def my_function(): print("Hello from a function") ``` 此代码创建了一个名为 `my_function` 的简单函数[^2]。 #### 2. 参数传递 Python 支持多种方式来向函数传入参数: - **位置参数**:按照顺序依次匹配形参。 ```python def greet(name, message): print(f"{message}, {name}!") greet('Alice', 'Good morning') ``` - **关键字参数**:通过指定名称的方式提供实参,允许改变调用时的实际参数顺序。 ```python greet(message='Good evening', name='Bob') ``` - **默认值参数**:如果未给定某个特定参数,则采用预先设定好的默认值。 ```python def say_hello(to="everyone"): print(f"Hello {to}") say_hello() ``` - **可变长度参数**:支持不定数量的位置参数或关键字参数。 对于任意多个非关键词参数,可以使用星号前缀的形式收集到元组中;而对于任意多的关键字参数则可以用双星号接收成字典形式。 ```python def make_pizza(*toppings): """打印顾客点的所有配料""" print("\nMaking pizza with the following toppings:") for topping in toppings: print("- " + topping) make_pizza('pepperoni') def build_profile(first, last, **user_info): profile = {} profile['first_name'] = first profile['last_name'] = last for key, value in user_info.items(): profile[key] = value return profile build_profile('albert', 'einstein', location='princeton', field='physics') ``` #### 3. 返回值 函数可以通过 `return` 语句返回处理后的数据给调用者。如果没有显式的 `return` 或仅执行了不带表达式的 `return` ,那么该函数会隐含地返回 None 值。 ```python def add(a, b): result = a + b return result sum_value = add(5,7) print(sum_value) # 输出 12 ``` #### 4. 局部变量与全局变量 局部变量是在函数内部声明并使用的变量,在离开作用域之后就会被销毁。而全局变量则是指在整个程序范围内都有效的变量。 当希望修改外部环境中的对象(如列表、字典),可以在函数体内直接操作这些容器类型的元素而不必担心它们会被丢弃掉。 但是要注意的是,默认情况下无法在一个函数里重新赋值给外面已存在的同名变量除非先加上 global 关键词声明它为全局变量。 ```python global_var = "I'm Global" def test_scope(): local_var = "I'm Local" print(local_var) test_scope() try: print(local_var) # 这将会引发 NameError 错误因为local_var只存在于test_scope这个环境中 except Exception as e: print(e) def modify_global(): global global_var global_var += ", modified inside function." modify_global() print(global_var) ``` #### 5. Lambda 表达式 Lambda 是一种简洁的方式来创建匿名的小型函数。这种语法非常适合用于那些只需要一次性的短小功能实现场景。 ```python double = lambda x : x * 2 multiply = lambda x,y:x*y print(double(5)) # 结果为 10 print(multiply(6,7)) # 结果为 42 ``` #### 6. 高阶函数 高阶函数是指能够接受其他函数作为输入参数或者把另一个函数当作输出结果的函数。常见的内置高阶函数有 map(), filter(), reduce() 等等。 map() 接受两个参数:一个是函数,另一个是要映射的数据序列。它会对每一个项目应用所提供的转换逻辑并将得到的新集合返回出来。 filter() 同样也带有这两个部分——筛选条件以及待过滤的对象集。不过这里所给出的操作应该是布尔判断性质的东西以便决定哪些成员应该保留下来形成最终的结果数组。 reduce() 则来自 functools 库,需单独导入才能正常使用。它的职责在于累积计算一系列数值之间的关系直至得出单一的答案为止。 ```python from functools import reduce numbers = [1, 2, 3] squared_numbers = list(map(lambda n:n*n , numbers)) even_numbers = list(filter(lambda n:(n%2==0), squared_numbers)) product_of_all_elements = reduce((lambda x, y: x * y), even_numbers) print(squared_numbers) # [1, 4, 9] print(even_numbers) # [4] print(product_of_all_elements)# 4 ``` #### 7. 递归函数 递归指的是函数在其自身的定义过程中直接或间接地调用了自己的一种编程技巧。为了防止无限循环的发生,通常会在每次迭代之前设置好终止条件。 下面是一个经典的例子展示了如何利用递归来解决斐波那契数列问题: ```python def fibonacci(n): if n <= 0: return "Input should be positive integer only!" elif n == 1 or n == 2 : return 1 else: return fibonacci(n-1)+fibonacci(n-2) for i in range(1,11): print(f"Fib({i})={fibonacci(i)}",end=', ') # Fib(1)=1, Fib(2)=1, Fib(3)=2, Fib(4)=3, Fib(5)=5, Fib(6)=8, Fib(7)=13, Fib(8)=21, Fib(9)=34, Fib(10)=55, ``` 此外还有二分查找算法也是典型的运用到了递归思想的应用案例之一.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值