栅格化原理

把某个点根据经纬度放在整数经纬度记录的格子里,并把格子编号与点对应起来。

第一步确定每个格子的长和宽,即经度变化量和纬度变换量:

假设测试点的经纬度是(114度, 22.5度)

划定栅格划分的经纬度范围(大范围)为
经度范围:lon1=113.75194度,lon2=114.624187度
纬度范围:lat1=22.447837度,lat2=22.864748度
则中间点的经纬度是((lon1+lon2)/2, (lat1+lat2)/2)

那么起始点为经度和纬度取小的那个点
(latstart,lonstart)=(min(lat1,lat2),min(lon1,lon2))

规定每个栅格的大小(单位m)为500m,
下面来计算每个栅格的经度变化量和纬度变化量

假设地球是一个半径为R的圆,
那么地球的(lon1+lon2)/2度的经度圈的半径为R,绕其走一圈,路程为2* pi* R,纬度变化量为360度;

地球的(lat1+lat2)/2度的纬度圆的半径为R* cos((lat1+lat2)/2),绕其走一圈,路程为2* pi* R* cos((lat1+lat2)/2),经度变化量为360度。

则可以得到一组对应关系
纵向变化路程与纬变化量对应关系:2* pi* R --> 360度;
横向变化路程与经度变化量对应关系:2* pi* R* cos((lat1+lat2)/2) --> 360度。

那么纵向路程为500m时,纬度变化量为(500* 360度)/2* pi* R
横向路程为500m时,经度变化量为(500* 360度)/2* pi* R* cos((lat1+lat2)/2)

接着计算测试点(114度, 22.5度)所在栅格的经纬度编号
经度栅格编号=(114度-(起始点经度-栅格经度变化量/2))/栅格经度变化量
这里减的是(起始点经度-栅格经度变化量/2),因为这里假设起始点是其所在栅格的右上角点,(起始点经度-栅格经度变化量/2)是起始点所在栅格中心点的经度。
纬度栅格编号同理

计算测试点所在栅格的中心点的经纬度
中心点经度 = 测试点所在栅格编号*栅格经度变化量 +起始点所在栅格中心点经度
中心点纬度同理

#栅格化代码
import math
#定义一个测试点的经纬度
testlon = 114
testlat = 22.5#划定栅格的划分范围
lon1 = 113.75194
lon2 = 114.624187
lat1 = 22.447837
lat2 = 22.864748latStart = min(lat1, lat2);
lonStart = min(lon1, lon2);#定义每个栅格大小(单位m)
accuracy = 500;#计算每个栅格的经纬度增加量大小▲Lon和▲Lat
deltaLon = accuracy * 360 / (2 * math.pi * 6371004 * math.cos((lat1 + lat2) * math.pi / 360));
deltaLat = accuracy * 360 / (2 * math.pi * 6371004);#计算测试点所在栅格的经纬度编号
LONCOL=divmod(float(testlon) - (lonStart - deltaLon / 2) , deltaLon)[0]
LATCOL=divmod(float(testlat) - (latStart - deltaLat / 2) , deltaLat)[0]#计算测试点所在栅格的中心点经纬度
HBLON = LONCOL*deltaLon + (lonStart - deltaLon / 2)#格子编号*格子宽+起始横坐标-半个格子宽=格子中心横坐标
HBLAT = LATCOL*deltaLat + (latStart - deltaLat / 2)# 测试点所在栅格经纬度编号,测试点所在栅格中心点经纬度,每个栅格的经纬度变化量
LONCOL,LATCOL,HBLON,HBLAT,deltaLon,deltaLat

按照指定度数进行栅格化

import numpy as npdef wgs84_grid(lat_min, lat_max, lon_min, lon_max, grid_size):"""将指定的 WGS84 坐标系下的区域栅格化"""# 计算经度和纬度的划分数量lat_steps = int(np.ceil((lat_max - lat_min) / grid_size))lon_steps = int(np.ceil((lon_max - lon_min) / grid_size))# 构造栅格网格latitudes = np.linspace(lat_min, lat_max, lat_steps+1)longitudes = np.linspace(lon_min, lon_max, lon_steps+1)grid = np.zeros((lat_steps, lon_steps), dtype=bool)# 遍历每个栅格,判断其是否在指定区域内for i in range(lat_steps):for j in range(lon_steps):lat1, lat2 = latitudes[i], latitudes[i+1]lon1, lon2 = longitudes[j], longitudes[j+1]# 判断当前栅格是否与指定区域相交if lat1 <= lat_max and lat2 >= lat_min and lon1 <= lon_max and lon2 >= lon_min:grid[i,j] = Truereturn grid, latitudes, longitudes# 测试代码
if __name__ == '__main__':# 北京市范围:39.442758, 40.215446, 115.420363, 117.507645# 栅格大小:0.05 度grid, latitudes, longitudes = wgs84_grid(39.442758, 40.215446, 115.420363, 117.507645, 0.05)print('Grid shape:', grid.shape)print('Latitude steps:', len(latitudes))print('Longitude steps:', len(longitudes))print('Grid:\n', grid)

按照指定距离进行栅格化

import numpy as np
from geopy import distancedef wgs84_grid_by_distance(lat_min, lat_max, lon_min, lon_max, grid_size):"""将指定的 WGS84 坐标系下的区域栅格化"""# 计算经度和纬度的划分数量dist_lat = distance.distance((lat_min, lon_min), (lat_max, lon_min)).kmdist_lon = distance.distance((lat_min, lon_min), (lat_min, lon_max)).kmlat_steps = int(np.ceil(dist_lat / grid_size))lon_steps = int(np.ceil(dist_lon / grid_size))# 构造栅格网格latitudes = np.linspace(lat_min, lat_max, lat_steps+1)longitudes = np.linspace(lon_min, lon_max, lon_steps+1)grid = np.zeros((lat_steps, lon_steps), dtype=bool)# 遍历每个栅格,判断其是否在指定区域内for i in range(lat_steps):for j in range(lon_steps):lat1, lat2 = latitudes[i], latitudes[i+1]lon1, lon2 = longitudes[j], longitudes[j+1]# 判断当前栅格是否与指定区域相交if lat1 <= lat_max and lat2 >= lat_min and lon1 <= lon_max and lon2 >= lon_min:grid[i,j] = Truereturn grid, latitudes, longitudes# 测试代码
if __name__ == '__main__':# 北京市范围:39.442758, 40.215446, 115.420363, 117.507645# 栅格距离:1 公里grid, latitudes, longitudes = wgs84_grid_by_distance(39.442758, 40.215446, 115.420363, 117.507645, 1)print('Grid shape:', grid.shape)print('Latitude steps:', len(latitudes))print('Longitude steps:', len(longitudes))print('Grid:\n', grid)

chatgpt:栅格化原理和代码相关推荐

  1. 万字综述梳理ChatGPT----一文搞懂弄潮儿ChatGPT技术原理、行业现状、投资前景

    本文是笔者自学ChatGPT的总结与思考,类型为综述文章,适合想全面了解ChatGPT或对人工智能感兴趣的小伙伴~~ 目录先行,自行找需,全文三万六千余字.分为三大模块,追求效率可跳转感兴趣部分直接开 ...

  2. 一文读懂chatGPT模型原理(无公式)

    每天给你送来NLP技术干货! 来自:JioNLP 点击这里进群->加入NLP交流群 (本文是chatGPT原理介绍,但没有任何数学公式,可以放心食用) 前言 这两天,chatGPT模型真可谓称得 ...

  3. 在PyTorch中进行双线性采样:原理和代码详解

    ↑ 点击蓝字 关注视学算法 作者丨土豆@知乎 来源丨https://zhuanlan.zhihu.com/p/257958558 编辑丨极市平台 在pytorch中的双线性采样(Bilinear Sa ...

  4. 【资源】Faster R-CNN原理及代码讲解电子书

    <Faster R-CNN原理及代码讲解>是首发于GiantPandaCV公众号的教程,针对陈云大佬实现的Faster R-CNN代码讲解,Github链接如下: https://gith ...

  5. 视觉SLAM开源算法ORB-SLAM3 原理与代码解析

    来源:深蓝学院,文稿整理者:何常鑫,审核&修改:刘国庆 本文总结于上交感知与导航研究所科研助理--刘国庆关于[视觉SLAM开源算法ORB-SLAM3 原理与代码解析]的公开课. ORB-SLA ...

  6. multinormalNB多项式朴素贝叶斯原理及代码

    https://blog.csdn.net/u011239443/article/details/76176743 multinormalNB多项式朴素贝叶斯原理及代码 https://www.cnb ...

  7. DeepLearning tutorial(1)Softmax回归原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43157801 DeepLearning tutorial(1)Softmax回归原理简介 ...

  8. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...

  9. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...

最新文章

  1. 导入第三方工程报错的处理方法
  2. 微软打造了全球最大的Git代码库
  3. Insertion Sort Aizu - ALDS1_1_A
  4. python装饰器参数讲解_python装饰器的详细解析
  5. webpack-dev-server 搭建本地服务以及浏览器实时刷新
  6. MySQL(基础技能)
  7. Java基础--多态
  8. mysql常用的语句_MySQL常用语句集锦
  9. numeric比较大小 数据库_Liquibase 数据库版本管理工具:3. changeSet 变更集详解
  10. oracle 数据库官网下载流程
  11. 一名优秀项目经理需具备的五种基本素质及八大管理技能
  12. [数值计算-2]:数值计算算法好坏的判断标准
  13. 中国石油大学(北京)-《 公共社交礼仪 》-​​​​​​​第二阶段在线作业
  14. matlab ga工具箱 使用教程,MATLAB7.0 GA工具箱详细讲解及实例演示.pdf
  15. 【统计学】三大相关系数之肯德尔相关系数(kendall correlation coefficient)
  16. 小辩《降薪求职,到底该不该?》
  17. 【Cucumber】【问题集锦】
  18. Qua Vadis Eclipse? 第一部分
  19. python微信转账记录_python 处理微信对账单数据的实例代码
  20. 【SVL官方说明文档】

热门文章

  1. 根治偏头痛及各种头痛病症
  2. 如何打造零信任时代的身份管理系统?
  3. quasar使用keep alive警告 Component inside <Transition> renders non-element root node
  4. 查看字符的所占字节数
  5. 微信小程序点赞成功,取消点赞、评论。
  6. 图片处理-----毛玻璃效果
  7. .find()的用法
  8. [计算机一级MS备考]
  9. 爬取网易云音乐50000+首歌曲
  10. 别 了,余 额 宝!