6.2 POI数据的组织与应用(课后练习)-2024-2025学年《信息技术》高中·选择性必修1 数据与数据结构(浙教版)

2024-10-10
| 4页
| 150人阅读
| 0人下载

资源信息

学段 高中
学科 信息技术
教材版本 高中信息技术浙教版选修1 数据与数据结构
年级 -
章节 6.2 POI数据的组织与应用
类型 作业-同步练
知识点 -
使用场景 其他
学年 2024-2025
地区(省份) 全国
地区(市) -
地区(区县) -
文件格式 DOCX
文件大小 66 KB
发布时间 2024-10-10
更新时间 2024-10-10
作者 匿名
品牌系列 -
审核时间 2024-10-10
下载链接 https://m.zxxk.com/soft/47843750.html
价格 0.50储值(1储值=1元)
来源 学科网

内容正文:

作业练习 课程基本信息 学科 信息技术 年级 高二 学期 春季 课题 POI数据的组织与应用 教科书 数据与数据结构 学生信息 姓名 学校 班级 学号 作业练习 1.地球上任意位置可以用纬度、经度描述,纬度区间是[-90,90],经度区间是[-180,180]。如:浙江省绍兴市越城区鲁迅故里的纬度是29.9924099,经度为120.58552218。为表达位置间的邻近关系,引入了地理区域编码,GeoHash算法的基本思想如下: 将地理上某点经纬度分别转换成二进制编码。例如,对于给定纬度lat(29. 9924099),编码规则为: •将区间[-90,90]二分为[-90,0),[0,90],称为左、右区间,lat属于右区间[0,90],标记为1; •将区间[0,90]二分为 [0,45),[45,90],lat属于左区间 [0,45),标记为0; •重复上述过程,不断划分区间,lat属于左区间则记录0,属于右区间则记录1。直到达到指定编码长度length(一般为5的倍数)为止。 类似地,可对经度lng(120. 58552218)进行二进制编码。 Base32编码合成为地理区域字符串。以编码长度length=10为例,如前述计算得到,鲁迅故里的纬度编码为10101 01010,经度编码为11010 10110。地理区域字符串生成规则: •生成新串:奇数位放经度,偶数位放纬度,将2串编码组合:11100 11001 10011 01100; 分组转换:将11100 11001 10011 01100每5位一组转成1个十进制整数,分别对应为28、25、19、12; •Base32编码:使用数字0~9、小写字母(去掉字母a, i, l, o)这32个字符进行Base32编码(见下表)。十进制整数28、25、19、12对应的编码组合就是“wtmd”,即为该位置的地理区域字符串。 (1)规定编码长度length为5,经度lng为120. 12508258,则经度lng的二进制编码为 。 (2)根据上述描述,设计了一个“利奇马”台风中心途经经纬度转换为地理区域字符串的算法。该算法Python程序实现如下,请在划线处填入合适的代码: m = 18 #台风途经地点为18个 length = 20 #纬度、经度二进制编码长度均为length a = [#利奇马台风途经区域,每个区域纬度、经度数据 28.195851,121.502351, #台风登陆前 #29.9919578,120.58526959, #测试用绍兴市 28.297677,121.405765, #温岭市 28.399405,121.203395, #雁荡山 28.501034,121.10221, #仁乡 28.195851,121.502351, #富山乡 28.606624,121.005624, #郑家坑 28.699941,120.899839, #仙居县 28.995563,120.706668, #广度乡 29.096609,120.605483, #磐安县 29.294367,120.600883, #新昌 28.195851,121.502351, #嵊州 29.495762,120.605483, #诸暨 29.696754,120.499698, #越城区 29.897341,120.301927, #富阳 30.097521,120.205341, #杭州 30.205448,120.209941, #萧山 30.301283,120.209941, #拱墅区 30.404997,120.205341 #余杭 ] b = [] #依次记录每个区域的GeoHash编码 base32 = "0123456789bcdefghjkmnpqrstuvwxyz" #Base32编码 #对经度或者纬度二进制编码:value是输入经度或者纬度,upper,lower是区间上下界。 #纬度区间是[-90,90],经度区间是[-180,180] def DoubleToBits(value=0.0, lower=0.0, upper=0.0): ret = "" i = 1 middle = 0 while i <= length: middle = (upper + lower) / 2 if ① : lower = middle ret = ret + "1" else: upper = middle ret = ret + "0" i = i + 1 return ret #对所有区域的经纬度进行计算,并将其GeoHash编码存储到b数组中 for i in range(m): lat = a[2 * i] lng = a[2 * i + 1] s = "" strLat = DoubleToBits(lat, -90, 90) #纬度转换为二进制 strLon = DoubleToBits(lng, -180, 180) #经度转换为二进制 for j in range(length): #将2串二进制编码组合 s = ② n = 0 code = "" for j in range(len(s)): ③ if j % 5 == 4: code = code + base32[n] n = 0 b.append(code) #输出所有区域的GeoHash编码 print(b) 参考答案: (1)11010101011011000001 (2)①value >= middle ②s + strLon[j] + strLat[j] ③n = n * 2 + int(s[j]) 学科网(北京)股份有限公司 $$

资源预览图

6.2 POI数据的组织与应用(课后练习)-2024-2025学年《信息技术》高中·选择性必修1 数据与数据结构(浙教版)
1
6.2 POI数据的组织与应用(课后练习)-2024-2025学年《信息技术》高中·选择性必修1 数据与数据结构(浙教版)
2
相关资源
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。