在ArcGIS 10.5
中,我有一个在python窗口中运行良好的python脚本,但是,我试图将其集成到工具中,主要是为了利用arcpy.GetParametersAsText()
输入功能进行输入并输出文件名/路径。
该脚本的基本目的是将特定要素类的许多属性字段输出为非常特定的文本文件(如果有人知道的话,则为WinFrog的.PTS测量行文件)的非常特定的格式。
最初,尝试将.write()
用.open()
创建的文件对象时,由于Unicode错误而失败。正如您在下面看到的,我已经尝试了很多方法来确保文件对象'outfile'确实是常规文件对象,而不是Unicode,它仅由字符串from中的路径定义。
无论如何,现在脚本将运行并完成“成功” ,在工具/脚本输入中指定的目录中创建文件。但是现在它没有任何数据了!从python窗口运行时,脚本每次都可以工作 任何帮助都是极好的。完全理解这是用户错误,我可能会忽略一些简单的内容。
下面的脚本,对于任何显示问题,对于Stack Overflow来说是新的。
import arcp
fcpath = str(arcpy.GetParameterAsText(0))
fc = "r\"" + fcpath + "\""
fields = ["LineName", "Lat_SOL" , "Lon_SOL", "Lat_EOL", "Lon_EOL", "Northing_SOL", "Easting_SOL", "Northing_EOL", "Easting_EOL", "Shape_Length"]
filelocation = str(arcpy.GetParameterAsText(1))
outfile = open("r\"" + filelocation + ".PTS", 'w')
with arcpy.da.SearchCursor(fc, fields) as cursor:
for row in cursor:
r1 = ("0,{0},0,0.000,0.000,1,2,65280,0,0.200,0,0,1.000,1,0\n".format(row[0]))
r2 = ("1,{0},{1},0.0m,0.0m,{2},{3},0.000\n".format(row[1], row[2], row[5], row[6]))
r3 = ("1,{0},{1},0.0m,0.0m,{2},{3},{4}\n".format(row[3], row[4], row[7], row[8], row[9]))
outfile.write(r1 + r2 + r3)
答案 0 :(得分:0)
在工具箱参数中,将参数0数据类型设置为 static void Main(string[] args)
{
Console.WriteLine("Result_Cache_ID:");
var reportIds = Console.ReadLine();
if (int.TryParse(reportIds, out var resultCacheId))
{
GetDS(resultCacheId);
}
Console.ReadKey();
}
private static void GetDS(int resultCacheId)
{
using (var connection = new SqlConnection(ConnectionString))
{
connection.Open();
using (var da = new SqlDataAdapter("Select * from Result_Cache where Result_Cache_ID="+ resultCacheId, connection))
{
var ds = new DataSet();
da.Fill(ds);
var binaryFormattedDs =(byte[]) ds.Tables[0].Rows[0]["Result_Binary_Data"];
var ds2 = DeSerialize<DataSet>(binaryFormattedDs);
Console.WriteLine("Row Count=" + ds2.Tables[0].Rows.Count);
}
}
}
public static T DeSerialize<T>(byte[] bytes)
{
var serializer = new BinaryFormatter();
using (var ms = new MemoryStream())
{
ms.Write(bytes, 0, bytes.Length);
ms.Seek(0, SeekOrigin.Begin);
return (T)serializer.Deserialize(ms);
}
}
,将参数1设置为FeatureClass
。两者都必须是输入。
File