2014-06-05 2 views
0

J'essaye de développer (en utilisant C++ - MSVS 12.0) une fonction qui permet de déterminer quels pixels (d'une image raster) ont leur centre dans un polygone (précédemment peuplé en utilisant un fichier de formes). J'utilise GDAL 1.11.0 (juste installé, en utilisant devinstall) en construisant à partir de la source et en utilisant l'option INCLUDE_OGR_FRMTS = YES. Je peux utiliser GDAL et la plupart des fonctions OGR sans problème. Cependant, lorsque j'utilise le code suivant:Erreur lors de l'utilisation d'OGR pour déterminer si un centre de pixels est à l'intérieur d'un polygone

if (polygon->Contains(tmpPoint))

Je reçois le message d'erreur: ERREUR 6: GEOS supportent pas activé

Tout le monde sait comment résoudre ce problème?

J'utilise:

#include "ogrsf_frmts.h"

et ma fonction est déclarée:

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

et une partie de mon code est:

OGRPoint *tmpPoint = NULL

OGRSpatialReference *spatialReference = NULL;

spatialReference = polygon->getSpatialReference();

tmpPoint = new OGRPoint();

tmpPoint->assignSpatialReference(spatialReference);

boucle

commencent:

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

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

if (polygon->Contains(tmpPoint))

Merci d'avance!

MB

+0

Il semble que la bibliothèque GEOS n'ait pas été compilée. Avez-vous vérifié les makefiles VC si les variables GEOS (FLAGS, LIB, etc.) sont activées et que les chemins sont corrects? En outre, si vous avez modifié certaines options, vous devrez peut-être effectuer un nettoyage complet et une recompilation. – fedemp

+0

Vous avez raison! Je suis confronté à des problèmes car GEOS lib ne supporte pas, encore, la construction de la bibliothèque avec MSVS 2013 (v12). – user3468473

Répondre

-1

Utilisez GDALRasterizeLayers pour graver l'image du polygone sur une trame. De cette façon, vous trouverez tous les pixels qui tombent dans le polygone, ou non. La valeur par défaut est de graver le pixel uniquement si le centre intersecte un polygone. Si la couche source comporte plusieurs polygones, vous devrez peut-être les distinguer en définissant un filtre d'attribut ou en utilisant des champs d'ID d'attribut gravés (bien que cela ne fonctionne pas si les polygones se chevauchent).

+0

Bonjour Mike. J'aime cette idée. J'ai essayé de mettre en œuvre, mais face à certains problèmes avec le code. Avez-vous un exemple d'utilisation de GDALRasterizeLayers qui convient à mon cas? – user3468473

+0

Oui, il peut être difficile d'obtenir les paramètres corrects. Cependant, j'ai seulement utilisé cette partie de l'API via Python, donc c'est légèrement différent.[Voici quelques exemples d'utilisation de Python dans la suite de tests] (https://trac.osgeo.org/gdal/browser/trunk/autotest/alg/rasterize.py), mais je ne vois rien de similaire pour [cpp] (https://trac.osgeo.org/gdal/browser/trunk/autotest/cpp/) –

Questions connexes