1. GeoHash 是空间索引的一种方式,其基本原理是将地球理解为一个二维平面,通过把二维的空间经纬度数据编码为一个字符串,可以把平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码。以经纬度为(121.43737,31.192932)为例。

第一步:将经纬度转换为二进制

编码规则为:先将纬度范围(-90, 90)平分成两个区间(-90, 0)和(0, 90),如果目标维度位于前一个区间,则编码为 0,否则编码为 1,然后根据目标纬度所落的区间再平均分成两个区间进行编码,以此类推,直到精度满足要求,经度也用同样的算法。

序号

纬度范围

划分区间0

划分区间1

31.192932所属区间

1

(-90,90)

(-90,0)

(0,90)

1

2

(0,90)

(0,45)

(45,90)

0

3

(0,45.0)

(0,22.5)

(22.5,45.0)

1

4

(22.5,45.0)

(22.5,33.75)

(33.75,45.0)

0

5

(22.5,33.75)

(22.5,28.125)

(28.125,33.75)

1

……

……

……

……

……

最后得到纬度的二进制编码为:101011000101110, 用同样的方式可以得到经度(121.43737)的二进制编码:110101100101101

第二步:将经纬度的二进制编码合并,从偶数 0 开始,经度占偶数位,纬度占奇数位。经度

110101100101101,纬度 101011000101110,得到的二进制编码为:111001100111100000110011110110

 

索引

0

1

2

3

4

5

6

7

8

9

10

11

12

21

22

23

24

25

26

27

28

29

经纬度

1

1

1

0

0

1

1

0

0

1

1

1

0

0

1

1

1

1

0

1

1

0

第三步:将合并后的二进制数做 Base32 编码

按照每 5 位一组,分成 6 组,每组计算其对应的十进制数值,按照 Base32 表进行编码。

11100 11001 11100 00011 00111 10110 转换成十进制是 28 25 28 3 7 22,查表编码得到最终结果,wtw37q。

林老师想编写一个 Python 程序,输入编码后的字符串,输出该编码对应的经纬度范围,运行结果如图 a 所示:

图a

(1) Python 程序如下,请在划线处完成填空。

def qj(l,r,a):        #将二进制 a 转成对应的经纬度范围#该代码省略

def find(c):        #在 base32 表中查找对应的十进制数

    for i in :

        if base32[i]==c:

            return i base32="0123456789bcdefghjkmnpqrstuvwxyz" s=input("请输入编码:")

res="" jd=[]

wd=[]

for i in range(len(s)):

   

    ans=""

    j=0

    while:

        ans=

        n=n//2

        j+=1

    res=res+ans

for i in range(len(res)):

    if i%2==0:

        jd+=res[i]

    else:

        wd+=res[i]

print("经度对应的二进制:",jd,"纬度对应的二进制:",wd)

print("经度范围:",qj(-180,180,jd),"纬度范围:",qj(-90,90,wd))

(2) 若经纬度编码是 wm3,那么对应的经度二进制是
【考点】
过程与自定义函数; 循环结构语句及程序实现; 进制及数制转换;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
1. 叶圣陶杯作文大赛开始了,语文老师收集了参赛同学的作文,作品的文件名按“学号&姓名.docx” 格式提交。学号为 8 位,第 10 位开始为姓名,如“20210902&王源.docx”。老师编写了一段程序以便快速找出哪些同学未提交以便于进行通知处理。在处理时发现,可能会存在“ 20210901+王俊凯.docx”“20210901-王俊凯.docx”两种不当的格式。
(1) 读取文件名并返回,请在划线处填入合适的代码import os

def readname(): #读取某个文件夹内所有文件的文件名

    filepath="pics//"

    #读取到的文件名以字符串的形式,作为元素存储在列表 allname 中

    allname=os.listdir(filepath)  

    #os.listdir()用于返回指定的文件夹包含的文件或文件夹的名字的列表

    return  

(2) 修改文件中的“+”和“-”,请在划线处填入合适的代码

def checkname(name):

    s=""

    for i in name:

        if i=="+" or i=="-":

            s+="&"

        else:

             

    s=s[:-5]     #去掉后四位,即去掉后缀名".docx"

    return s

(3) 主程序,请在划线处填入合适的代码

name=readname()

student=["王俊凯","王源","张明","赵祖一","吴天","顾玲玲","方奔奔","张强"] yes=[];no=[];s=0;result={}

for item in name:

    item=checkname(item)

     

    yes.append(stu) #将学生的姓名加入列表

    s=s+1

for m in student:

    if:

        no.append(m)

(4) 输出结果

result[" 应 提 交 人 数 :"]=len(student)

result[" 已 提 交 人 数 :"]=   ▲    

result["已提交的同学:"]=yes

result["还未提交的同学:"]=no

print(result)

划线处可以填入的代码是            (多选,填字母)

A. len(yes) B. s C. len(no) D. len(name)
综合题 困难