Buffer_analysis buffer_distance_or字段参数无效

876
4
跳到解决方案
06-22-2021 02:55 PM
AlanStewart
通过
偶然的因素

我似乎无法得到buffer_analysis来缓冲我想要的距离。我正在编写一个Python工具,需要将点缓冲到多边形,并将它们溶解为工作流程的一部分。从ArcMap 10.8 UI, buffer_analysis工具的工作,因为我期望它工作在相同的输入数据和参数,我正在测试我的工具。文档似乎表明,当从我的工具调用'buffer_distance_or_field'时,我可以为它指定'10米',但我得到的实际缓冲距离要大得多。输入特征类是地理(WGS84),但当我从UI使用该工具时,这似乎不是问题。我在输出中得到了期望的缓冲距离。在这两种情况下,我都将“方法”参数作为“平面”传递。

我能做错什么呢?

蒂雅,

艾伦

0荣誉
1解决方案

接受的解决方案
AlanStewart
通过
偶然的因素

谢谢,DavidPike。

事实证明,真正的问题是我误解了Buffer_analysis()的预期输出,而不是错误的缓冲区距离。当输出特征计数为1时,我错误地得出了缓冲区距离是错误的结论。当我之前手动运行Buffer_analysis()时,我没有仔细观察输出,只是从图形上观察它。我以为我看到的是多个多边形,但实际上它是一个有多个外圈的多边形。因此,添加对MultipartToSinglepart_management()的调用来将外圈转换为多边形解决了我的问题。

在原帖子中查看解决方案

0荣誉
4回复
DavidPike
通过 常规赛MVP
常规赛MVP

我相信当你从Desktop运行它时,Planar参数是从map/dataframe的CRS中获取的(如果不是已经在一个平面CRS中)。当在桌面外运行时,它将十进制度数等同于平面度量单位,并使缓冲区变得巨大。然而,这不是福音,只是我根据记忆/经验的解释。

你最好的选择是设置方法='GEODESIC',因为我认为没有理由不这样做,我相信这将解决你的问题。

否则,你当然可以将你的特征投影到适当的平面CRS上,然后用你之前设置的参数运行工具。

0荣誉
AlanStewart
通过
偶然的因素

谢谢,DavidPike。

我现在正在做这个:

Degrees_per_meter = 360.0 / 40075000.0

distance = '{0} DecimalDegrees'.format(float(bin_radius) * degrees_per_meter)

arcpy。Buffer_analysis(fc_photo, fc_buffer, distance, dissolve_option='ALL', method='GEODESIC')

然而,缓冲距离仍然比我根据我输入的点所期望的要大得多。剧本改编自ESRI的剧本GeoTaggedPhotosToPoints_management,因此输入点来自带地理标记的JPEG文件。我添加了将点集群合并为带有多张照片的单点的功能。我在ArcMap 10.8会话中运行我的工具,有一个新的,完全空的地图。除了缓冲距离的问题,其他都可以。

0荣誉
DavidPike
通过 常规赛MVP
常规赛MVP

忘掉degrees_per_meter,让软件做它设计的事情。

你只需要将buffer_distance_or_field参数改为" Meters "

如。10米的

距离= '{0}米'.format(float(bin_radius))Buffer_analysis(fc_photo, fc_buffer, distance, dissolve_option='ALL', method='GEODESIC')
0荣誉
AlanStewart
通过
偶然的因素

谢谢,DavidPike。

事实证明,真正的问题是我误解了Buffer_analysis()的预期输出,而不是错误的缓冲区距离。当输出特征计数为1时,我错误地得出了缓冲区距离是错误的结论。当我之前手动运行Buffer_analysis()时,我没有仔细观察输出,只是从图形上观察它。我以为我看到的是多个多边形,但实际上它是一个有多个外圈的多边形。因此,添加对MultipartToSinglepart_management()的调用来将外圈转换为多边形解决了我的问题。

0荣誉