使用GDAL和Delphi创建轮廓线

前端之家收集整理的这篇文章主要介绍了使用GDAL和Delphi创建轮廓线前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用Delphi和GDAL18创建isolines.为此,我使用以下代码
layer:= OGRCreateLayer( ogr_ds,PAnsiChar(WideStringToString('contour')),nil,ogr.wkbLineString,nil);
err:= GDALContourGenerate(band,1,aFixedLevel,layer,nil);

GDALContourGenerate命令返回“不支持的几何类型” – 错误.

我通过以下方式包含了gdal18.dll:

function GDALContourGenerate(srcBand: TGDALRasterBandH; contourInterval: double;
                       contourBase: double; fixedLevelCount: longint; fixedLevel: TDoubleArray2;
                       useNoData: longint; noDataValue: double;
                       layer: TOGRLayerH; idField: longint; elevField: longint;
                       pfnProgress: TGDALProgressFunc; pProgressArg : POINTER): TOGRErr; external External_Lib name 'GDALContourGenerate';

我也尝试过其他几何类型(例如wkbLineString25D),但这没有用.
如果你有任何建议,我会很高兴的.
很多,
马里奥

[编辑]我发现当我用“nil”重放“layer”(在GDALContourGenerate中)时会发生同样的错误.所以也许问题出在其他地方.[/ edit]

解决方法

您可能应该在外部声明之后添加cdecl,因此(名称与Delphi中的函数声明匹配,因此可以忽略):
function GDALContourGenerate(srcBand: TGDALRasterBandH; contourInterval: double;
                       contourBase: double; fixedLevelCount: longint; fixedLevel: TDoubleArray2;
                       useNoData: longint; noDataValue: double;
                       layer: TOGRLayerH; idField: longint; elevField: longint;
                       pfnProgress: TGDALProgressFunc; pProgressArg : POINTER): TOGRErr; 
cdecl; external External_Lib;

或者stdcall单词取决于dll是如何编译的.

对于字符串参数,由于gdal在其C flat API中使用* char参数AFAIK,因此您可以直接使用PAnsiChar:

layer:= OGRCreateLayer( ogr_ds,'contour',nil);

在Delphi 2009之前,你可以使用指针(aString)来表示这样的参数,而且自从Delphi 2009以来,只需要一个指针(AnsiString(aString))来强制转换一个aString:string值.

你是怎么convert the .h header的?

猜你在找的Delphi相关文章