IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

GDAL système 64bits et 32bits


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 105
    Par défaut GDAL système 64bits et 32bits
    Bonjour à tous,

    Je développe en WPF avec VisualStudio 2010 sur Windows 7 32bits.

    Je réalise un programme dans lequel je dois faire du géo-processing.
    Pour ce faire, je me suis tournée vers la solution GDAL.

    J'ai donc télécharger la SDK à cet endroit :
    http://www.gisinternals.com/sdk/

    Nom : Capture.PNG
Affichages : 302
Taille : 142,9 Ko

    Nom : Capture3.PNG
Affichages : 312
Taille : 94,9 Ko

    J'ai choisi les solutions surlignées


    Je me retrouve donc avec les fichiers
    gdal-111-1400-core.msi
    release-1400-gdal-1-11-mapserver-6-4.zip

    J'ai exécuté gdal-111-1400-core.msi et choisis une installation typique.
    ce qui m'a créé le répertoire GDAL dans programfiles
    Nom : Capture2.PNG
Affichages : 312
Taille : 122,3 Ko

    J'extrait ensuite le fichier compressé release-1400-gdal-1-11-mapserver-6-4.zip dans le répertoire de l'instalation
    Nom : Capture4.PNG
Affichages : 325
Taille : 49,1 Ko

    une fois cela fait, j'ajoute à ma variable d'environnement path les valeurs :
    ;C:\Program Files\GDAL\csharp;C:\Program Files\GDAL
    Nom : Capture5.PNG
Affichages : 345
Taille : 57,1 Ko
    (Je ne me souviens plus d'où j'ai tiré cette procédure d'installation)

    J'ajoute ensuite la bibliothèque ogr_csharp dans les références de mon projet pour pouvoir y faire appel.
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    using OSGeo.OGR;
    //...
    var wkt1 = getWktFromArcGISObject(polygon1);
    var geom1 = OSGeo.OGR.Geometry.CreateFromWkt(wkt1);
     
    var wkt2 = getWktFromArcGISObject(polygon2);
    var geom2 = OSGeo.OGR.Geometry.CreateFromWkt(wkt2);
     
    return geom2.Intersect(geom1);
    //...

    Là mon application fonctionne à merveille et tout se passe bien.

    Quand je la déploie sur un autre ordinateur avec un système 32bits, en répétant la procédure d’installation de GDAL tout se passe également à merveille.

    Le problème survient quand j'essaie de déployer l'application sur un système 64bits. J'ai essayé plusieurs manipulations :
    • Installer GDAL sur le système ciblé en 64 bits
    • compiler l'application avec un .dll tiré d'un installation GDAL en 64 bits
    • installer GDAL sur le système ciblé en 32 bits
    • Autres essaies dont je ne me souviens pas la nature...

    Rien ne marche et j'ai obtenus ces différents messages d'erreurs (pas dans l'ordre)
    (dans le prochains message puisqu'il est interdit de joindre plus de 5 fichiers dans un message)

    J'ai également vu quelque part ce message :
    It depends on the platform target settings and the your current framework,
    which kind of binaries should be used, see the table below:

    Platform target Executing environment (Framework version) binary package should be used
    /x86 x86 x86
    /x86 x64 x86
    /x64 x64 x64
    /AnyCPU x86 x86
    /AnyCPU x64 x64

    All other combinations are not supported, and will probably result in
    BadImageFormatException.
    Peut être que l'installation que je fais de GDAL est une mauvaise solution. C'est cependant la seule solution que j'ai réussi à mettre en place.
    Il est possible également que la solution réside dans la compilation de l'application sur un système 64 bits (Malheureusement je ne dispose pas d'un tel environnement de travail)

    Merci à vous !

  2. #2
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 105
    Par défaut
    Nom : bug x64.PNG
Affichages : 350
Taille : 16,7 Ko
    Nom : bug x64 2.PNG
Affichages : 363
Taille : 24,3 Ko
    Nom : bug x64 3.PNG
Affichages : 373
Taille : 18,0 Ko
    Nom : bug x64 4.PNG
Affichages : 365
Taille : 21,0 Ko

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 105
    Par défaut
    Afin de contourner mon problème, j'ai utilisé un autre moyen pour réaliser l'intersection entre deux formes géométriques :

    avec System.Windows.Media
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
            /// <summary>
            /// Vérifie avec exactitude mais de façon assez lente si deux polygones se chevauchent
            /// </summary>
            /// <param name="polygon1"></param>
            /// <param name="line"></param>
            /// <returns></returns>
            private static bool checkCompleteIntersectBetweenArcGISPolygonAndArcGISPolyline(ESRI.ArcGIS.Client.Geometry.Polygon polygon1, ESRI.ArcGIS.Client.Geometry.Polyline line)
            {
                var g1 = StreamGeometry.Parse(getPathFromArcGISPolygon(polygon1));
                var g2 = LineGeometry.Parse(getPathFromArcGISPolyLine(line));
                Geometry og2 = g2.GetWidenedPathGeometry(new Pen(Brushes.Black, 1.0));
     
                CombinedGeometry cg = new CombinedGeometry(GeometryCombineMode.Intersect, g1, og2);
                PathGeometry pg = cg.GetFlattenedPathGeometry();
                return pg.Figures.Count > 0;
            }
     
            /// <summary>
            /// Vérifie avec exactitude mais de façon assez lente si deux polygones se chevauchent
            /// </summary>
            /// <param name="polygon1"></param>
            /// <param name="polygon2"></param>
            /// <returns></returns>
            private static bool checkCompleteIntersectWithinArcGISPolygon(ESRI.ArcGIS.Client.Geometry.Polygon polygon1, ESRI.ArcGIS.Client.Geometry.Polygon polygon2)
            {
                var g1 = StreamGeometry.Parse(getPathFromArcGISPolygon(polygon1));
                var g2 = StreamGeometry.Parse(getPathFromArcGISPolygon(polygon2));
     
                CombinedGeometry cg = new CombinedGeometry(GeometryCombineMode.Intersect, g1, g2);
                PathGeometry pg = cg.GetFlattenedPathGeometry();
                return pg.Figures.Count > 0;
            }
     
            /// <summary>
            /// 
            /// </summary>
            /// <param name="polyLine"></param>
            /// <returns></returns>
            private static string getPathFromArcGISPolyLine(ESRI.ArcGIS.Client.Geometry.Polyline polyLine)
            {
                var provider = new CultureInfo("en");
                var path = "";
                foreach (var pathArcGis in polyLine.Paths)
                {
                    var first = true;
                    foreach (var pointArcGis in pathArcGis)
                    {
                        if (first)
                        {
                            path += string.Format("M {0},{1}", pointArcGis.X.ToString(provider), pointArcGis.Y.ToString(provider));
                            first = false;
                            continue;
                        }
                        path += string.Format(" L {0},{1}", pointArcGis.X.ToString(provider), pointArcGis.Y.ToString(provider));
                    }
                }
                return path;
            }
     
            /// <summary>
            /// 
            /// </summary>
            /// <param name="polygon1"></param>
            /// <returns></returns>
            private static string getPathFromArcGISPolygon(ESRI.ArcGIS.Client.Geometry.Polygon polygon1)
            {
                var provider = new CultureInfo("en");
                var path = "";
                foreach (var ring in polygon1.Rings)
                {
                    var first = true;
                    foreach (var pointArcGis in ring)
                    {
                        if (first)
                        {
                            path += string.Format("M {0},{1}", pointArcGis.X.ToString(provider), pointArcGis.Y.ToString(provider));
                            first = false;
                            continue;
                        }
                        path += string.Format(" L {0},{1}", pointArcGis.X.ToString(provider), pointArcGis.Y.ToString(provider));
                    }
                    path += "z";
                }
                return path;
            }

    Je n'ai donc pas vraiment résolu le problème mais je l'ai contourné...

Discussions similaires

  1. Installation Oracle sur 64bits et 32bits
    Par STELLLA dans le forum Installation
    Réponses: 0
    Dernier message: 03/10/2011, 12h07
  2. Compatibilité entre 64bits et 32bits
    Par Pop360 dans le forum Ordinateurs
    Réponses: 4
    Dernier message: 06/07/2011, 22h52
  3. Réponses: 19
    Dernier message: 17/01/2009, 02h17
  4. [9207] Migration d'une base de 9207 32bits vers 64bits
    Par Cyborg289 dans le forum Oracle
    Réponses: 3
    Dernier message: 27/10/2006, 18h33
  5. Passer de la debian 32bits en 64bits ?
    Par Michaël dans le forum Debian
    Réponses: 8
    Dernier message: 17/08/2006, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo