Questions tagged «python»

Python是许多GIS程序中使用的一种开源解释型编程语言。


1
使用GDAL创建纳米DEM
也许是一个奇怪的问题,但是在我提出实际问题之前,让我先简单介绍一下背景知识: 简而言之(据我所知),原子力显微镜(AFM)使研究人员可以在微米和纳米级扫描区域。它通过使用各种探针“扫描”区域来工作。由于我对此没有真正的了解,因此我难以解释的更多内容。我所知道的,引起我好奇的是,结果实际上是“高度”值的“网格”(一个512x512值的矩阵,描述了该点的高度)。 然后我想:好吧,除了比例尺,这实际上是一个数字高程模型!而且,这意味着,如果我可以设法创建GIS工具所理解的DEM文件,则可以对其应用GIS分析! 实际上,我的其他重要工作是在拥有AFM机器的实验室中进行的,并且正在她的一个项目中使用它。我从她那里得到了一些扫描文件,并使用Python(struct和numpy)进行了管理,以解析这些二进制文件,而我现在得到的是一个numpy数组,大小为512x512,填充有int16值。 我下一步要计划的是什么,而我需要帮助的是“映射到适当的DEM”部分。我对DEMS有一些了解,但是当涉及到DEMS的实际生成时,我还是很新的。 我在想的是我必须以某种方式对数据进行地理参考,为此,我需要一个自定义(平面)坐标系。我设想我的坐标系将以微米或纳米为单位。然后,只需查找用AFM扫描的区域的大小即可(我相信这是在二进制文件中的某个位置,假设已知道这一点)。 更新:我也以不同的分辨率进行了几次扫描,但扫描范围相同。例如我有关于两次扫描的信息: 放大图片: Scan Size: 51443.5 nm X Offset: 0 nm Y Offset: 0 nm 较小(详细)图像: Scan Size: 5907.44 nm X Offset: 8776.47 nm Y Offset: 1486.78 nm 我的想法是,我的自定义坐标系应以0,0为原点,对于较大的图像,我可以为像素0,0分配(0,0)的坐标值,为像素512,512分配坐标值(51443.5、51443.5 )(想必您已获得所需其他点的图片)。 然后,较大的图像会将像素(0,0)映射到(8776.47,1486.78),将(512,512)映射到(8776.47 + 5907.44,1486.78 + 5907.44) 那么第一个问题是:如何为这样的坐标系创建proj4 def?即:如何将这些“现实世界的坐标”分配给我的自定义坐标系统(或者,如果我遵循野蛮人的建议并使用局部坐标系统并围绕单位说谎(即,将纳米视为千米) 然后,我必须将我的numpy二维数组转换为地理参考DEM文件格式。我当时在考虑使用GDAL(或更确切地说是Python绑定)。 然后,第二个问题是:如何从诸如我的“任意”数据创建地理参考DEM?最好在Python中使用开放源代码库。 剩下的就应该相当容易了,只是使用正确的分析工具即可。问题是,这项任务是由我自己的好奇心驱动的,因此我不确定我应该对纳米级DEM实际做什么。这乞求 第三个问题:如何处理纳米DEM?可以进行什么样的分析,什么是进行DEM分析的合适工具,最后:根据该数据制作具有山体阴影和轮廓线的地图是否可行? 我欢迎所有建议和指示,但是请记住,我正在寻找免费替代方法,因为这是一个严格的基于兴趣的项目,没有预算或资金(而且我无法使用任何许可的GIS应用程序)。此外,我确实知道出售这些AFM机器的公司Bruker会提供一些软件,但是使用它不会很有趣。

1
如何在PyPy中使用GDAL?
我正在尝试使用pypy优化我的python代码。虽然我能够导入大多数库并成功运行,但是我却无法导入GDAL库。在Python 2.7中导入时,相同的库运行良好。 我尝试将GDAL位置添加到PYTHONPATH,甚至尝试将GDAL Python绑定下载到PyPy目录,但是pypy不想识别GDAL,并且出现以下错误。 Traceback (most recent call last): File "app_main.py", line 51, in run_toplevel File "ImportENC-P.py", line 50, in <module> from osgeo import gdal, ogr, osr File "B:\PYPY\site-packages\osgeo\__init__.py", line 21, in <module> _gdal = swig_import_helper() File "B:\PYPY\site-packages\osgeo\__init__.py", line 13, in swig_import_helper import _gdal ImportError: No module named _gdal
14 python  gdal 

1
Python增加我的.mxd文件大小
我有一个运行以下程序的地理处理脚本。 arcpy.AddMessage("TEST...") 是的,只需一行代码。 当我运行脚本并保存文件大小增加时,空白的.mxd对我而言开始为391kb。 391 kb 431 kb 451 kb 471 kb and so on... 地理处理python脚本似乎每次都会将文件大小增加20-30 kb。 我已经在执行某些操作并将文件大小增加40-60 kb的实际脚本上运行了该测试... 我还运行了一个空白脚本,除了运行它外没有其他功能,但文件大小仍增加了20-30kb ... 从我能找到的ESRI Tech 文件大小增加可能是由于大量地理处理结果存储在ArcCatalog的ArcToolbox的“结果”选项卡中引起的。 按照本文中的步骤,我将文件大小从589 kb减少到293 kb,方法是将其保存到新的.mxd文件中 您的想法,经验?有没有人找到一种从python脚本自动删除结果标签的方法,这样我就不必每次都保存一个新的.mxd了? 更新: @AHIGH我尝试按照AHIGH的建议尝试使用Geoprocessing选项。似乎并没有阻止文件大小的增加。 @ artwork21如果我转到地理处理>结果并删除结果,这将减少文件大小。无论如何,是否有自动化的过程,以便在脚本运行后自动删除结果? ESRI:使用地理处理选项控制工具的执行 无论临时结果设置如何,仍然在ArcMap目录中的所有工具结果都将保存到磁盘。这是因为地理处理必须假设通过保存地图文档,您想要保存ArcMap目录中的所有内容 我希望保存所有内容,但文件大小过大的结果除外... 如果您不想保存地图文档,但是想要将数据保存在单个图层中,请右键单击该图层,然后单击“数据”>“永久”。 并不是一个切实可行的解决方案... 在10.1中,有一些新功能可以使我解决问题。猜猜将不得不尝试促使我的公司尽快升级到10.1。 Python工具 解决方法: 在“地理处理”>“地理处理选项”>“结果管理”>“保持结果小于:”>设置为“从不保存”。 这将阻止文件大小增加。 或者,您可以尝试编写脚本,以使其运行独立于Arcmap(即在不打开的情况下)。 您可以编写效率更高的代码,运行速度更快。就像一次运行多个mxd的脚本一样。
14 python  arcmap  memory 


5
聚类轨迹((x,y)点的GPS数据)并挖掘数据
在分析GPS数据集时,我有2个问题。 1)提取轨迹我有一个庞大的数据库,记录着形式的GPS坐标(latitude, longitude, date-time)。根据连续记录的日期时间值,我试图提取此人遵循的所有轨迹/路径。例如; 比方说,时间到了M,结(x,y)对一直在不断变化N。之后N,(x,y)成对的变化减小,此时我得出结论,从时间M到N可以称为轨迹。提取轨迹时遵循的一种体面方法吗?有什么可以建议的知名方法/方法/算法吗?您是否想建议我以有效的方式维护这些观点的数据结构或格式?也许,对于每个轨迹,找出速度和加速度会有用吗? 2)挖掘轨迹一旦我遵循了所有轨迹/采取了路径,如何比较/组合它们?我想知道起点或终点是否相似,那么中间路径如何比较? 如何比较2条路径/路线,并得出结论是否相似。此外; 如何将相似的路径聚集在一起? 如果您能指出我对这件事的研究或类似内容,我将不胜感激。 开发将使用Python,但是欢迎各种库建议。 我正在打开完全相同的问题/programming/4910510/comparing-clustering-trajectories-gps-data-of-xy-points-and-mining-the-data在StackOverflow中。以为我会在这里得到更多答案...

7
如何在GIS中实现按值绘制地图?
我最近一直在做一些有关制图的背景阅读,偶然发现了一些有趣的替代值-按字母 顺序排列的地图。 在此对概念进行了更详细的描述,并提供了全文(不公开)[此处] 2。 在indiemaps 博客上有一些有关实现的详细信息: ...以上所有图形都是使用ActionScript 3制作的,仅使用文本编辑器和最新的免费Flex SDK ... 您如何在GIS软件包(ArcGIS?QuantumGIS?)中实现类似的功能?还是R和ggplot2?还是Python?

4
从坐标多边形以KM为单位的面积
我在(python形状)的坐标中有多边形,看起来像这样 POLYGON ((24.8085317 46.8512821, 24.7986952 46.8574619, 24.8088238 46.8664741, 24.8155239 46.8576335, 24.8085317 46.8512821)) 我想以km ^ 2计算此多边形的面积。用Python做到这一点的最佳方法是什么?
14 python  polygon  area  shapely 

3
Gdal:用另一个栅格裁剪一个栅格
我正在编写一个简单的实用程序,将一批多波段Geotiff栅格文件裁剪到相同(较小)的区域。使用gdalwarp,我可以使用单多边形剪切shapefile轻松裁剪文件: gdalwarp -cutline clipper.shp -crop_to_cutline input.tif output.tif 但是,我要裁剪的实际区域将始终始终由另一个geotiff栅格文件而不是shapefile定义。如果可以将栅格的范围用作剪切文件,那将很好,但是我不确定如何执行此操作。毫不奇怪,以下代码不起作用(它不会引发错误,它只会产生任何东西): gdalwarp -cutline clipper.tif-crop_to_cutline input.tif output.tif 所以,我的问题是,有没有办法提供栅格gdalwarp -cutline?或者,是否还有另一个gdal函数可以使用另一个栅格裁剪一个栅格?如果这两种方法均不可行,是否有一种非常简单的方法来生成具有由栅格范围定义的单个多边形的shapefile? 这段代码将包装在更广泛的python脚本中,因此我可以使用命令行gdal实用程序或gdal的任何python绑定。 作为附带说明,我知道我可以轻松地制作一个裁剪shapefile,以覆盖我在QGIS中的栅格范围。如果找不到简单的解决方案,我可能会这样做,但是最终,作为大型自动化分析的一部分,我最终将在数十个甚至数百个区域中使用此实用程序,因此我不希望乏味即使非常简单,也可以手动执行。
14 python  raster  gdal  clip  gdalwarp 


2
如何获取GDAL以在Python中为GTiff创建统计信息
我定期使用GDAL在Python中创建自己的GeoTIFF栅格,例如: from osgeo import gdal from numpy import random data = random.uniform(0, 10, (300, 200)) driver = gdal.GetDriverByName('GTiff') ds = driver.Create('MyRaster.tif', 200, 300) band = ds.GetRasterBand(1) band.WriteArray(data) ds = band = None # save, close 但是,当使用ArcCatalog / ArcGIS查看结果时,由于没有统计信息,因此显示为黑色或灰色。可以通过右键单击栅格并在ArcCatalog中选择“计算统计信息...”(还有其他几种方法来解决此问题),也可以在命令提示符下使用gdalinfo来解决此问题: gdalinfo -stats MyRaster.tif 将生成MyRaster.tif.aux.xml,ArcGIS会使用来正确缩放栅格。PAM(永久辅助元数据)文件包含统计信息,最值得注意的是最小值和最大值: <PAMDataset> <PAMRasterBand band="1"> <Metadata> <MDI key="STATISTICS_MINIMUM">0</MDI> <MDI key="STATISTICS_MAXIMUM">10</MDI> …

4
导出带有附件的特征以在ArcGIS之外使用?
ArcGIS 10具有新增功能,可将附件添加到单个要素以添加到地理数据库中存储的要素类。这样做的一种用途是将多个图片添加到一个特定的位置,消火栓似乎是一个受欢迎的例子(重要的是,我想知道您是否是互联网上的狗,需要进站。) 在数据库中,启用附件的要素类的结构是双重的: 要素类本身, 一个包含附件和相关元数据(文件名,大小等)的表,以及 定义两者之间的一对多关系的关系类。 我的问题是:如何导出这些数据(要素类,附件,附件元数据)以在 Arcgis 之外使用? 导出FC很容易,FeatureClassToFeatureClass的工作原理与未启用附件的FC相同。导出附件表?没那么多。TableToTable到output.dbf提取附加文件的元数据而已,到output.csv错误了不支持的字段类型,并输出信息表失败,一般字段错误。 这并不奇怪,因为那些文件类型不支持二进制blob数据类型。我期望/希望找到一种将附加的二进制文件转换为其原始格式的工具,例如 那么,如何呢?我需要怎么做才能取出数据? * 具有讽刺意味的是,我当时产生此Q的项目是导出以在Arcgis中使用,而不是在Arcgis Desktop中使用...

4
使用R或Python将大栅格转换为折线的最快方法?
我有一个很大的栅格文件(129600 x 64800像素),其中包含全球水域(1位值0和1),并尝试提取海洋和内陆水岸线。 我曾尝试使用ArcGIS和QGIS将栅格从栅格转换为折线,但是这需要花费一定的时间。 有谁知道更好/更快的方式(Python或R)或更好的工具来完成此任务? 更新资料 R:rasterToContour可能是快速而精确的,但是如果您有一个非常大的数据集(如我的(8,398,080,000像素)),则需要非常大量的RAM(超过16GB),或者强制R在硬盘驱动器上进行更多处理,也将需要一段时间。 Python / GDAL:gdal_poligonize创建多边形而不是折线 更新2 R rasterToContour:rasterToContour不提供所需的结果。与ArcGIS(栅格到多边形,然后要素到线)相比,它没有提取确切的像素轮廓,如以下示例所示。 rasterToContour结果 ArcGIS结果 更新3 Python / GDAL:我已经在命令行上在测试数据集上针对ArcGIS运行gdal_polygonize,结果非常清晰: gdal:49秒 ArcGIS:1.84秒
14 python  r  performance 

2
Python,GDAL和构建栅格属性表
我有一个整数栅格,我想使用Python和GDAL为其构建栅格属性表。我可以在Python中创建GDAL栅格属性表,如下所示: >>> rat = gdal.RasterAttributeTable() 如我们所见,这很好用: >>> rat <osgeo.gdal.RasterAttributeTable; proxy of <Swig Object of type 'GDALRasterAttributeTableShadow *' at 0x0000000002A53D50> > 这样创建的表没有行或列: >>> rat.GetRowCount() 0 >>> rat.GetColumnCount() 0 我创建了一个名为“值”的列,以将唯一值存储在栅格中: >>> rat.CreateColumn("Value", gdalconst.GFT_Integer, gdalconst.GFU_MinMax) 0 很好,并且列数已更新: >>> rat.GetColumnCount() 1 现在,我必须将值(记录)添加到该列中才能使用。我可以从栅格波段中获得唯一值的列表,如下所示: >>> data = band.ReadAsArray(0, 0, dataset.RasterXSize, dataset.RasterYSize) >>> vals = list(numpy.unique(data)) >>> …

6
将原始数据读入大熊猫
是否可以将原始数据读入a geopandas GeoDataFrame,la a pandas DataFrame? 例如,以下工作: import pandas as pd import requests data = requests.get("https://data.cityofnewyork.us/api/geospatial/arq3-7z49?method=export&format=GeoJSON") pd.read_json(io.BytesIO(r.content)) 以下不是: import geopandas as gpd import requests data = requests.get("https://data.cityofnewyork.us/api/geospatial/arq3-7z49?method=export&format=GeoJSON") gpd.read_file(io.BytesIO(r.content)) 换句话说,是否可以在不先将数据保存到磁盘的情况下读取内存中的地理空间数据?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.