2014-06-05 21 views
0

我試圖開發(使用C++ - MSVS 12.0)一個函數,發現哪些像素(從光柵圖像)有一個多邊形內的中心(先前使用shapefile填充)。我使用GDAL 1.11.0(剛剛安裝,使用devinstall)從源代碼編譯並使用選項INCLUDE_OGR_FRMTS = YES。我可以毫無問題地使用GDAL和大部分OGR函數。然而,當我使用下面的代碼:錯誤使用OGR來弄清楚像素中心是否在一個多邊形內

if (polygon->Contains(tmpPoint))

我收到錯誤消息:錯誤6:GEOS支持未啓用

任何人知道如何解決這個問題?

我使用:

#include "ogrsf_frmts.h"

和我的函數聲明:

void FindPixels(GDALDataset *image, OGRLayer *poLayer, OGRPolygon *polygon)

和我的代碼部分是:

OGRPoint *tmpPoint = NULL

OGRSpatialReference *spatialReference = NULL;

spatialReference = polygon->getSpatialReference();

tmpPoint = new OGRPoint();

tmpPoint->assignSpatialReference(spatialReference);

循環開始:

tmpPoint->setX(imgTLX + (j * imgRes) + imgResHalf);

tmpPoint->setY(imgTLY - (i * imgRes) - imgResHalf);

if (polygon->Contains(tmpPoint))

在此先感謝!

MB

+0

似乎GEOS庫還沒有被編譯進去。如果啓用了GEOS變量(FLAGS,LIB等)並且路徑是正確的,你有沒有檢查VC makefile?另外,如果您一直在修改某些選項,則可能需要進行全面清理並重新編譯。 – fedemp

+0

你是對的!由於GEOS lib不支持使用MSVS 2013(v12)構建圖書館,因此我遇到了問題。 – user3468473

回答

-1

使用GDALRasterizeLayers多邊形的圖像刻錄到光柵。這樣你可以找到所有落入多邊形的像素,或者不是。默認情況下僅在中心與多邊形相交時刻錄像素。

如果源圖層有多個多邊形,您可能需要通過設置屬性過濾器或使用刻錄的屬性ID字段(儘管如果多邊形重疊時不起作用)來區分它們。

+0

你好邁克。我喜歡這個想法。我試圖實現,但面臨着代碼的一些問題。你有沒有使用適合我的情況的GDALRasterizeLayers的例子? – user3468473

+0

是的,讓參數正確可能會非常棘手。不過,我只是通過Python使用了這部分API,所以略有不同。[這裏有一些在測試套件中使用Python的例子](https://trac.osgeo.org/gdal/browser/trunk/autotest/alg/rasterize.py),但我沒有看到任何類似的[cpp] (https://trac.osgeo.org/gdal/browser/trunk/autotest/cpp/) –

相關問題