Questions tagged «optimization»

当指的是改进或优化脚本,应用程序或软件等过程时,请使用此标记。

3
GIS数据库中是否有更新的路由算法(比Dijkstra,A *)?
诸如微软研究人员的Reach for A *和Sanders和Schtolz的Highway Hierarchies(如果我正确拼写名字的话)都来自Karlsruhe Uni。两者都大大减少了计算顺序,并在大型图形上加快了数千倍的速度(请参见链接文档中的结果)。后者的工作导致了开源路由机器,不幸的是,它不够流行,并且没有适应(尽管努力了,但我无法编译)。 同时,根据他们的文档,我尝试过的数据库Spatialite和PgRouting仅提供Dijkstra和A *算法。我什至都没有提到双向搜索,根据我的经验,它可以节省两次计算时间。 是否有针对数据库或其他应用程序的更好算法?

2
寻找用于2亿个点的多边形分析中最快的解决方案[关闭]
我有一个包含2亿个观测值的CSV,格式如下: id,x1,y1,x2,y2,day,color 1,"-105.4652334","39.2586939","-105.4321296","39.2236632","Monday","Black" 2,"-105.3224523","39.1323299","-105.4439944","39.3352235","Tuesday","Green" 3,"-104.4233452","39.0234355","-105.4643990","39.1223435","Wednesday","Blue" 对于每组坐标(x1 / y1和x2 / y2),我想分配它所属的美国人口普查区或人口普查区(我在此处下载了人口普查区TIGER形状文件:ftp : //ftp2.census.gov/ geo / tiger / TIGER2011 / TRACT / tl_2011_08_tract.zip)。因此,我需要为每个观察做两次多边形点操作。比赛必须非常准确。 最快的方法是什么,包括花时间学习软件?我可以访问具有48GB内存的计算机,以防万一这可能是一个相关的限制。 有多个线程建议使用PostGIS或Spatialite(Spatialite看起来更易于使用-但它与PostGIS一样有效吗?)。如果这些是最佳选择,是否必须填充空间索引(RTree)?如果是这样,怎么做(例如使用人口普查道Shapefile)?对于包含示例代码(或示例代码的指针)的任何建议,我将不胜感激。 我的第一次尝试(在找到此站点之前)包括使用ArcGIS对美国人口普查数据块的数据(100,000点)的子样本进行空间连接(仅x1 / y1)。在我终止该过程之前,花了5个多小时。我希望可以在不到40小时的计算时间内对整个数据集实施的解决方案。 很抱歉提出之前提出的问题-我已经阅读了答案,但不知道如何实施建议。我从未使用过SQL,Python,C,并且以前只使用过一次ArcGIS-我是一个完整的初学者。

6
加速以ArcGIS工具运行的Python脚本的方法[关闭]
这是一个非常普遍的问题。我只是想知道GIS程序员使用了哪些技巧来加快导入到工具箱中并运行的arcpy脚本。 我每天都在工作,编写一些小的脚本来帮助我办公室的非GIS用户处理GIS数据。我发现,ArcGIS 10.0的处理通常比9.3.1慢,并且有时在运行python脚本时会变得更慢。 我将列出一个脚本的特定示例,该脚本需要24个小时才能运行。这是一个循环,针对缓冲区中的每个形状将缓冲区中的栅格区域制成表格。缓冲区大约有7000个形状。我不认为它应该运行这么长时间。一种 while x <= layerRecords: arcpy.SetProgressorLabel("Tabulating Row: " + str(x) + " of " + str(ELClayerRecords)) arcpy.SelectLayerByAttribute_management(Buff,"NEW_SELECTION", "Recno = " + str(x)) # Selecting the record TabulateArea(Buff, "Recno", MatGRID, "VALUE", ScratchWS + "/tab" + str(z) +".dbf", nMatGRIDc) # Tabulate the area of the single row arcpy.AddMessage (" …

5
优化OSM数据的osm2pgsql导入
我目前正在EC2上构建一个实例,在该实例上导入我们正在研究的某些项目的整个Planet.osm快照,其中包含了整个地球数据的价值。我已经启动了一个大型的Ubuntu x64实例,并在Postgres数据库的EBS卷上附加了大量单独的存储,并对其进行了修改以在其中容纳PGSQL数据。 现在服务器osm2pgsql在导入快照时遇到了麻烦。在尝试了几次不同的内存配置和其他操作之后,该过程在完成大部分操作后仍然输出“ Killed”。一旦它在“遍历未决方式”时被杀死,下一次,在稍微调整了细长缓存之后,它到达了“处理方式”,然后崩溃了。根据我的阅读,这通常是由于内存问题造成的。 这是我最近一次运行导入的尝试: osm2pgsql -v -U osm -s -C 4096 -S default.style -d osm /data/osm/planet-latest.osm.bz2 以下是EC2上大型实例的规格: 大型实例7.5 GB内存,4个EC2计算单元(2个虚拟内核,每个虚拟内核各具有2个EC2计算单元),850 GB本地实例存储,64位平台 我的问题是-是否有一些好的基准测试资源来确定osm2pgsql和Postgres的调优要求?导入速度对我来说并不那么重要,我只是想确保过程安全完成,即使需要4到5天...我已经阅读了Frederick Ramm的“ 优化渲染”去年的SOTM中的“ 链 ”(PDF)文件,但是还有其他好的意见/资源吗?


1
点集操作的替代索引方法
在处理大量要素时,通常使用包围盒空间索引来提高性能。如果针对具有大量顶点的单个几何体执行操作,是否存在类似的优化策略? 例如,是否存在任何可以加速多边形或联合运算中的点的数据结构?

3
在SQL Server 2008上的7000万点云上优化最近邻居查询
我在SQL Server 2008 R2 Express数据库中有大约7500万条记录。每个都是对应某个值的纬度。该表具有“地理位置”列。我正在尝试为给定的经度(点)找到一个最近的邻居。我已经有一个具有空间索引的查询。但是根据记录在数据库中的位置(例如第一季度或最后一个季度),查询可能需要3到30秒才能找到最近的邻居。我认为可以通过优化查询或空间索引来优化此方法,以得到更快的结果。现在,使用默认设置应用了一些空间索引。这是我的表和查询的样子。 CREATE TABLE lidar( [id] [bigint] IDENTITY(1,1) NOT NULL, [POINTID] [int] NOT NULL, [GRID_CODE] [numeric](17, 8) NULL, [geom] [geography] NULL, CONSTRAINT [PK_lidar_1] PRIMARY KEY CLUSTERED ([id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) …

2
使用ArcPy有效选择相关记录?
下面是我用来复制ArcMap中“相关表”按钮的代码。在ArcMap中,该按钮基于对另一个相关要素类或表中要素的选择来选择一个要素类或表中的要素。 在ArcMap中,我可以使用该按钮在几秒钟内将我的选择“推送”到相关表。我找不到arcpy内置的任何可复制按钮的内容,因此我使用了一些嵌套循环来完成相同的任务。 下面的代码遍历“处理”表。对于每种处理,它都会遍历“树”列表。当在处理的ID字段和树的ID字段中找到匹配项时,将在树层中进行选择。找到治疗的匹配项后,该代码将不会继续在树层中搜索其他匹配项。它返回到处理表,选择下一个处理,然后再次搜索树要素类。 该代码本身可以正常工作,但是非常缓慢。在这种情况下,“治疗表”具有16,000条记录。“树”要素类具有60,000条记录。 当ESRI将选择从一个表推到另一个表时,还有另一种更有效的方法来重新创建ESRI所做的事情吗?我应该为表创建索引吗?注意:此数据存储在SDE中。 # Create search cursor to loop through the treatments treatments = arcpy.SearchCursor(treatment_tv) treatment_field = "Facility_ID" for treatment in treatments: #Get ID of treatment treatment_ID = treatment.getValue(treatment_field) # Create search cursor for looping through the trees trees = arcpy.SearchCursor(tree_fl) tree_field = "FACILITYID" for tree in trees: …

3
如何在多个扫描的纸图上均衡颜色,亮度和对比度
我主要是矢量人员,但是对于当前的项目,我需要使用一堆旧的扫描纸质地图(如果您有兴趣的话,可以查看伦敦的ww2炸弹爆炸图!) 我们扫描了地图并对其进行了地理定位,现在想创建一个平铺的复合层以在网站上提供服务。我们显然会划掉边界,这不是这里的问题。 问题是,地图图纸之间在视觉上存在视觉上的颜色和亮度差异。我对如何均衡它们以产生连贯的视觉效果感到困惑。我阅读了直方图均衡化,但是我当前的工具箱(Manifold GIS,GDAL,GeoServer)似乎没有所需的功能。 已经地理定位的4个扫描的示例:

3
在MySQL中使用空间索引时性能不佳
重新建议在Stack Overflow上提出的一个问题,这是一个更好的论坛。 我正在尝试进行一些实验,以推动不是地理空间但非常适合的数据集,并且发现结果有些令人不安。数据集是基因组数据,例如人类基因组,其中我们有一个DNA区域,其中诸如基因之类的元素占据特定的起始和终止坐标(我们的X轴)。我们有多个占据Y轴的DNA(染色体)区域。目标是带回沿单个Y坐标与两个X坐标相交的所有项目,例如LineString(START 1,END 2)。 该理论听起来很合理,所以我将其推入了现有的基于MySQL的基因组项目中,并提出了一个表结构,如下所示: CREATE TABLE `spatial_feature` ( `spatial_feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `external_id` int(10) unsigned NOT NULL, `external_type` int(3) unsigned NOT NULL, `location` geometry NOT NULL, PRIMARY KEY (`spatial_feature_id`), SPATIAL KEY `sf_location_idx` (`location`) ) ENGINE=MyISAM; external_id表示我们已编码到该表中的实体的标识符并对其进行编码external_type。一切看起来都很不错,我输入了一些初步的数据(30,000行),这些数据似乎运行良好。当它增加到超过300万行标记时,MySQL拒绝使用空间索引,并且在强制使用空间索引时速度较慢(40秒与使用全表扫描的5秒相比)。当添加更多数据时,该索引开始使用,但性能损失仍然存在。强制关闭索引可使查询降低到8秒。我正在使用的查询看起来像: select count(*) from spatial_feature where MBRIntersects(GeomFromText('LineString(7420023 1, 7420023 1)'), location); …

2
基于线段间距离的聚合线
我有一个正在优化的VectorTile底图(正在努力减少单个图块的大小),图块大小的主要块是道路数据(几何形状和属性)。我正在根据“ 缩放级别”简化各个道路的几何形状,并根据缩放级别对道路进行汇总。 道路存储在Postgis表(每个缩放级别的单独表)中,我想根据道路的缩放级别汇总道路。例如,在“ 5级缩放”表中,我想汇总彼此之间一定距离内的道路,并为道路段画一条线: 由于无法在该缩放级别上绘制出各个道路,因此: 如何根据路段之间的距离汇总道路几何形状? PS:我正在Linux上开发PostGIS和QGIS,但是我对使用任何开源平台或技术的解决方案持开放态度。

1
有聪明的旅行推销员吗?
除了笑话,我遇到的路由问题几乎是旅行商问题(TSP): 定义起点 终点与起点重合 每个节点都必须被访问 总成本应降至最低 两年前,我认为TSP将是一个完美的选择,因此我通过tsp_solve和协和式处理了一些示例数据。幸运的是,很快就很明显,TSP最短路径不是真正的最短路径,因为通过不切实际地要求对节点进行一次精确访问就使问题变得更加容易。这张图片只是一步一步地尝试优化计算解决方案,并且已经节省了最长使用边缘的距离。 当我试图找到通往地图/监视站点子集的最佳路由时,问题再次浮出水面。位置和道路网络数据非常准确和精确,因此这样的练习很有意义。 我已经看过TSP的概括,但是没有找到合适的算法。最小的生成树不考虑分支返回(这里的第一个解决方案要多花费3个)。据我了解,最短路径问题最终仅关心两个节点,而那些不在最佳路径中的节点将被忽略。车辆路径问题的一个特例似乎最合适,尽管我不知道它是否考虑非直接路径。 我的问题:是否有解决此问题(家庭)的名称,定义?您将使用什么算法和工具来解决它? 我敢肯定这会占用大量计算资源,但我对常规(无限资源)和实用答案都感兴趣。

5
加快OpenStreetMap PostGIS查询
我使用渗透模式将荷兰的OpenStreetMap数据加载到PostGIS数据库(PostgreSQL 8.3 / PostGIS 1.3.3)中。这意味着所有标签都存储在hstore字段中。除了渗透在几何字段上创建的GIST索引之外,我还在标签字段上创建了另一个GIST索引。 尝试同时使用空间约束和标签字段约束进行查询时,我发现它比我想要的要慢。这样的查询: SELECT n.geom,n.tags,n.tstamp,u.name FROM nodes AS n INNER JOIN users AS u ON n.user_id = u.id WHERE tags->'man_made'='surveillance' AND ST_Within(geom, ST_GeomFromText('POLYGON((4.0 52.0,5.0 52.0,5.0 53.0,4.0 53.0,4.0 52.0))',4326)); 需要22秒才能返回78条记录。 该表中有大约5300万条记录。 有没有办法大大加快这一步?我听说hstore在PostgreSQL 9中的实现明显更好,升级是否有帮助?

4
ST_Intersection慢查询
我正在尝试在两层之间执行交集: 代表某些道路的折线图层(约5500行) 代表不同兴趣点(约47,000行)周围形状不规则缓冲区的多边形层 最终,我想做的就是将折线剪切到许多(有时是重叠的)缓冲区中,然后对每个缓冲区中包含的道路总长度求和。 问题是事情运行缓慢。我不确定应该花多长时间,但在超过34小时后才中止查询。我希望有人可以指出我的SQL查询出错了,或者可以指出一种更好的方法。 CREATE TABLE clip_roads AS SELECT ST_Intersection(b.the_geom, z.the_geom) AS clip_geom, b.* FROM public."roads" b, public."buffer1KM" z WHERE ST_Intersects(b.the_geom, z.the_geom); CREATE INDEX "clip_roads_clip_geom_gist" ON "clip_roads" USING gist (clip_geom); CREATE TABLE buffer1km_join AS SELECT z.name, z.the_geom, sum(ST_Length(b.clip_geom)) AS sum_length_m FROM public."clip_roads" b, public."buffer1KM" z WHERE ST_Contains(z.the_geom, b.the_geom) GROUP …

4
Google Map Tile创建过程的性能
我知道这个问题很模糊,但是请耐心等待。我试图弄清什么样的产品性能-特别是时间-人们已经看到了他们用来创建google / bing地图图块的各种方法。有很多方法可以做到这一点(例如,gdal2tiles,FME,maptiler等)。最初尝试仅使用大型PNG并在相当不错的linux服务器上使用imagemagick创建图块,却产生了相当长的处理时间,因此我想看看其他人在生产中使用了什么。新的图块至少需要每天生成一次,因此周转时间非常关键。 唯一真正的要求是它可以在linux服务器上运行。显然,自由是更好的选择,但我不想局限于此。输入可以是原始栅格化/栅格数据或大图像。输出必须是能够在Google或必应地图中按原样使用的图像图块。 只是为了比较,我会说时间应该是针对Google地图的缩放级别7。 我感谢每个人的帮助,对于这个问题可能看起来有多模糊,我再次表示歉意。 更新:就输入而言,我目前有多种格式的(原始)数据源:netCDF,GRIB,GRIB2。除了原始数据本身之外,我还能够生成该数据的非常大的图像,然后可以对其进行切片/平铺。 理想情况下,我只是将图像切碎,但我愿意尝试任何可以使我获得最快结果的方法。

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.