python根据两组GPS经纬度excel坐标数据,计算其中一组坐标点方圆1000米内另一组坐标点的个数

# -*- coding: utf-8 -*-
"""
Created on Wed Jul  7 14:57:44 2021
@author: Administrator
"""
import xlrd
import math
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

#将excel的两列转化为二个列表
worksheet = xlrd.open_workbook(u'C:/Users/Administrator/Desktop/data1.xlsx')
sheet_names= worksheet.sheet_names()
#print(sheet_names)
for sheet_name in sheet_names:
    sheet = worksheet.sheet_by_name(sheet_name)
    rows = sheet.nrows # 获取行数
    cols = sheet.ncols # 获取列数,尽管没用到
    all_content1 = []
    for i in range(1,rows) : #excel第一行是列名,从第二列开始取数
        cell1 = sheet.cell_value(i, 0) # 取第一列列数据
        try:
            all_content1.append(cell1)
        except ValueError as e:
            pass
for sheet_name in sheet_names:
    sheet = worksheet.sheet_by_name(sheet_name)
    rows = sheet.nrows # 获取行数
    cols = sheet.ncols # 获取列数,尽管没用到
    all_content2 = []
    for i in range(1,rows) :
        cell2 = sheet.cell_value(i, 1) # 取第二列列数据
        try:
            all_content2.append(cell2)
        except ValueError as e:
            pass    
length1=len(all_content1) #计算数据列表的长度
data=zip(all_content1,all_content2) #使用zip函数将两个列表打包成一个元组


worksheet1 = xlrd.open_workbook(u'C:/Users/Administrator/Desktop/data2.xlsx')
sheet_names1= worksheet1.sheet_names()

for sheet_name1 in sheet_names1:
    sheet1 = worksheet1.sheet_by_name(sheet_name1)
    rows1 = sheet1.nrows # 获取行数
    cols1 = sheet1.ncols # 获取列数
    all_content3 = []
    for i in range(1,rows1) : #excel第一行是列名,从第二列开始取数
        cell3 = sheet1.cell_value(i, 0) # 取第一列列数据
        try:
            all_content3.append(cell3)
        except ValueError as e:
            pass
for sheet_name2 in sheet_names1:
    sheet2 = worksheet1.sheet_by_name(sheet_name2)
    rows2 = sheet2.nrows # 获取行数
    cols2 = sheet2.ncols # 获取列数,尽管没用到
    all_content4 = []
    for i in range(1,rows2) :
        cell4 = sheet2.cell_value(i, 1) # 取第二列列数据
        try:
            all_content4.append(cell4)
        except ValueError as e:
            pass   
data1=zip(all_content3,all_content4)
'''for each in data1:
    print(each)'''
length2=len(all_content3)#计算事故列表的长度

for i in range(length1):
    t=0.00017966296 #20m对应的经纬度
    n=50 #决定搜索半径为20n米,即方圆1000米内
    D=t*n
    count=0
    x1=all_content1[i]
    y1=all_content2[i]
    j=0
    while j<length2:
        x2=all_content3[j]
        y2=all_content4[j]
        d=math.sqrt(math.pow((x2-x1),2)+math.pow((y2-y1),2)) 
        if d<D:
            count+=1
        j+=1
    #print(i,count)
    print('表1中编号为%d的点方圆%d米内共有%d个表2中的点'%(i+1,20*n,count))
    '''with open('C:/Users/Administrator/Desktop/点数.txt','a',encoding='utf-8') as f:
          text='%d\n'%count
          f.write(text)'''

1
2

点图
结果

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值