{"id":21039053,"url":"https://github.com/image-py/geonumpy","last_synced_at":"2025-05-15T16:32:20.057Z","repository":{"id":109166557,"uuid":"201572813","full_name":"Image-Py/geonumpy","owner":"Image-Py","description":"treat gis data with numpy","archived":false,"fork":false,"pushed_at":"2022-11-12T14:34:53.000Z","size":65,"stargazers_count":23,"open_issues_count":1,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-03T11:12:31.934Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Image-Py.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-10T03:16:22.000Z","updated_at":"2024-07-03T04:15:59.000Z","dependencies_parsed_at":"2023-03-09T20:30:27.072Z","dependency_job_id":null,"html_url":"https://github.com/Image-Py/geonumpy","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Image-Py%2Fgeonumpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Image-Py%2Fgeonumpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Image-Py%2Fgeonumpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Image-Py%2Fgeonumpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Image-Py","download_url":"https://codeload.github.com/Image-Py/geonumpy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254377257,"owners_count":22061105,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-19T13:37:30.651Z","updated_at":"2025-05-15T16:32:20.044Z","avatar_url":"https://github.com/Image-Py.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# geonumpy\ngeonumpy 是一个 GIS，遥感影像处理库，实现了矢量，遥感影像读取，存储，预处理，拼接，重采样，常规指标计算，地图绘制等功能。\n\n\n\n### 安装\n\ngdal, fiona, shapely, geopandas这几个依赖库不但是由python实现，所以比较难以安装\n\ngeonumpy 暂时没有上传pypi, 请下载后使用 pip install -e 命令加入PythonPath\n\n- Windows系统\n  - clone或者下载源码\n  - `pip install --upgrade setuptools`\n  - `python -m pip install --upgrade pip`\n  - 分别下载对应本机版本的包[gdal](https://www.lfd.uci.edu/~gohlke/pythonlibs/#GDAL)、[fiona](https://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona)、[shapely](https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely)，然后分别执行`pip install package_name.whl`安装\n  - geopandas通过`pip install geopandas`或者去查看[官方文档](http://geopandas.org/)\n  - 最后执行`pip install -e geonumpy`安装完毕\n- like-unix系统(ubuntu / centos / mac)\n  - `git clone https://github.com/Image-Py/geonumpy; ./geonumpy/install.sh`\n\n\n### 文档\n[**geonumpy 文档**]()\n\n1. [geonumpy api 文档](doc/index.md#geonumpy-API-文档)\n2. [geonumpy 用户手册](doc/index.md#geonumpy-用户手册)\n\n\n\n## 功能简介\n\n这里简单介绍 geonumpy 的部分功能，可以让读者快速有一个认识，更多，具体功能，请参阅文档。\n\n\n\n### 影像读取\n\n```python\npath = '../data/landsat/LC08_L1TP_122033_20190506_20190506_01_RT_B5.TIF'\nlandsat = gio.read_tif(path)\n\n# landsat is a GeoArray object which subclass the numpy.ndarray\n\u003e\u003e\u003e landsat.shape\n(7821, 7691)\n\n# but with crs\n\u003e\u003e\u003e landsat.crs   \n4326\n\n# and transform matrix\n\u003e\u003e\u003e landsat.mat  \narray([[ 4.556850e+05,  3.000000e+01,  0.000000e+00],\n       [ 4.423215e+06,  0.000000e+00, -3.000000e+01]])\n\nplt.imshow(landsat, cmap='gray')\nplt.show()\n```\n\n![landsat](http://idoc.imagepy.org/gis/02.png)\n\n\n\n### 去条带\n\n```python\npath = '../data/landsat-gap/LE07_L1TP_123037_20180721_20180816_01_T1_sr_ndvi.tif'\nimg = gio.read_tif(path)\n# 去条带, img==-999 是掩膜，-999为无效值\ndegapimg = gpt.degap(img.copy(), img==-9999, 10)\n\n# plot two images ...\n```\n![](http://idoc.imagepy.org/gis/16.png)\n\n\n\n### 影像拼接\n\n![](http://idoc.imagepy.org/gis/06.png)\n\n```python\n# 读取山东省 shapefile\nshandong = gio.read_shp('../data/shape/shandong.shp')\n# 转为 web 墨卡托 投影\nshandong = shandong.to_crs(3857)\n# 缩放到 2048*1536大小，边距0.05，计算相关空间信息\nbox = gutil.shp2box(shandong, (2048,1536), 0.05, 1)\n# 用空间信息实例化 GeoArray 对象\npaper = gnp.frombox(*box, dtype=np.int16)\n# 读取所有影像的 0 通道\nfs = glob('../data/modis/*.hdf')\nrasters = [gio.read_hdf(i, 0) for i in fs]\n# 将 rasters 投影到 paper\ngmt.match_multi(rasters, paper, out='in')\n\nplt.imshow(paper)\nplt.show()\n```\n\n![](http://idoc.imagepy.org/gis/04.png)\n\n这里我们使用一个 shapefile 转换到 web 墨卡托坐标系，并用矢量图形确定了图像空间信息，然后将图像块投影到目标图像上，从而实现拼接。\n\n\n\n### 矢量图绘制\n\n```python\nimport geonumpy.io as gio\nimport geonumpy.draw as gdraw\n\n# 读取山东省矢量图\nshandong = gio.read_shp('../data/shape/shandong.shp')\n# 投影成 web 墨卡托\nshandong = shandong.to_crs(3857)\n# 从矢量图计算图像空间信息，尺寸3600*2400，边距十分之一\nbox = gutil.shp2box(shandong, (3600, 2400), 0.1, 1)\n# 从空间信息实例化 GeoArray 对象\npaper = gnp.frombox(*box, dtype=np.uint8)\n# 底图赋值为白色\npaper[:] = 255\n# 绘制多边形，颜色为0，线条宽度为2\ngdraw.draw_polygon(paper, shandong, 0, 2)\n# 绘制刻度，左右80，上下50，单位间隔1，坐标系4326，使用times字体，32好，颜色0，线条宽度2，刻度高5\ngdraw.draw_ruler(paper, 80, 50, -80, -50, 1, 4326, ('times', 32), 0, 2, 5)\n# 绘制文字标签，用name字段，颜色0，黑体，32好，中心对齐\ngdraw.draw_lab(paper, shandong, 'name', 0, ('simhei', 32), 'ct')\n# 绘制比例尺，右侧180，底部100的位置，宽度占十分之三宽度，高度30，times字体，48号，颜色0，单位km，线条宽度3， 右对齐\ngdraw.draw_unit(paper, -180, -100, 0.3, 30, ('times', 48), 0, 'km', 3, anc='r')\n# 绘制标题文字，在180， 120的位置，颜色0，楷体，128号，绘制山东省\ngdraw.draw_text(paper, '山东省', 180, 120, 0, ('simkai', 128))\n# 在右上角240，240的位置，黑体，100号，线条宽度2，箭头中心线高度100，颜色0，绘制指北针\ngdraw.draw_N(paper, -240, 240, ('simhei', 100), 2, 100, 0)\n\nfrom PIL import Image\nImage.formarray(paper).show()\n```\n\n![](http://idoc.imagepy.org/gis/08.png)\n\ngeonumpy 提供了为地图定制的一套绘图函数，可以方便的绘制比例尺，指北针，图例等元素。\n\n\n\n## 更多功能\n\ngeopandas 还在开发过程中，更多功能请查阅文档，也欢迎提交 issue 或贡献代码。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimage-py%2Fgeonumpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimage-py%2Fgeonumpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimage-py%2Fgeonumpy/lists"}