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

API, COM et SDKs Delphi Discussion :

inserer un point avec Mapwindows


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut inserer un point avec Mapwindows
    j'aimairai savoir comment on insere un point dynamiquement sur une couche?
    en fait j'ai essayé un truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p:= sf[2].point[index];
    je ne sais pas à quoi sert index,
    je voudrais savoir aussi est ce que on ne doit pas instancier p d'abord comme pour sf:= coshapefile.create;
    au niveau du point on ne retrouve pas ça.
    bref, si on peut me donner plus d'informations sur l'utilisation du point vu que le document referentiel des fonctions n'explique pas trop les fonctions et en plus la syntaxe est en vb. merci

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    MapWindows est un ActiveX
    Cela ne concerne pas spécialement le Delphi, consultes les tutoriels, tu auras plus de réponse qu'ici !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre très actif
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    MapWindows est un ActiveX
    Cela ne concerne pas spécialement le Delphi, consultes les tutoriels, tu auras plus de réponse qu'ici !
    oui j'ai été sur ce lien; mais il n'ya pas assez de documentation pour delphi delphi, si quelqu'un a un lien suis preneur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ShapeLayer[2].SFile := CoShapeFile.Create;
       //ShapeLayer[2].SFile.Open('C:\Shapefiles\cities.shp', nil);
       // ShapeLayer[2].Handle := Map1.AddLayer(ShapeLayer[2].SFile, true);
       Map1.LayerFont(ShapeLayer[2].handle,'Arial',7);
    
       pindex:=1;
       p:=CoPoint.Create;
       p.x:=-109.679100036621;
       p.y:=48.5438194274902;
       ShapeLayer[2].SFile.Shape[1].InsertPoint(p,pindex);
       ShapeLayer[2].Handle := Map1.AddLayer(ShapeLayer[2].SFile, true);
    par exemple : ici j'essai d'ajouter un point sur une couche et l'afficher, mais il m'affiche erreur et s'arrete au niveau de la ligne en gras

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Peut importe Delphi ou Pas
    Ce qui compte déjà c'est l'utilisation des Méthodes !
    Ensuite ce n'est qu'un problème de Syntaxe !

    Citation Envoyé par moustaf_26 Voir le message
    , mais il m'affiche erreur et s'arrete au niveau de la ligne en gras
    Il affiche une erreur, certe, LAQUELLE ? Toujours fourni le message d'erreur ! sinon ça ne sert à rien de nous le dire !

    Violation d'Acces ? OLE Exception 2147483648 ?

    Et je me répète, ici, peu de gens connaissent MapWindows, à la limite, tu devrais poser des questions sur leur forum, et l'on pourra t'aider à traduire les sections de code en VB ou C++ en Delphi !
    D'ailleurs, le site contient une mini démo Delphi que tu sers de base, je suppose, c'est donc que tu peux leur poser des questions Delphi sur leur Forum

    Ou alors à chaque fois, il faut nous fournir les prototypes des fonctions, ou des liens vers une documentation en ligne !

    Sinon, Shape[1], cela commence à ZERO ou à UN les indices de collections ?
    Vérifie SFile.NumShapes
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Mapwindows est un programme qui ouvre des shape files à l'instar d'un SIG.

    Si veux programmer sous Delphi, c'est l'activex MapWinGis que tu utilises et tu dois donc faire tes recherches avec ce mot clé.
    De même, tu as intérêt à utiliser ce mot dans le sujet de tes posts sur les forums.

    Pour ta question, tu dois d'abord déclarer les variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Var
      Lindex, Pindex, Sindex: integer; //  Numéro du Layer, du point et du shape
      P : MapWinGIS_TLB.Point;
      S : MapWinGIS_TLB.Shape;
    Ta source devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //    Lindex :=   //  selon que le Shape file existe ou est à créer
        pindex := 0;  //  Numéro du point
        p[pindex] := CoPoint.Create; //  Le point 1 est créé
        p[pindex].x:=-109.679100036621;
        p[pindex].y:=48.5438194274902;
        Sindex := 0;
        S[Sindex] := CoShape.Create;
        S[Sindex].ShapeType := SHP_POINT;
        S[Sindex].Set_ShapeType(SHP_POINT);
        S[Sindex].InsertPoint(p[Pindex],Pindex);
        ShapeLayer[Lindex].EditInsertShape(S[Sindex],Sindex);
        //  Instructions de définitions du shape dans la db
        Map1.MoveLayerTop(1); // 2  - 1 = 1   Rend le point est visible
    Souvent, on ne veut pas enregistrer dans le shape file ce que l'on dessine mais simplement le visualiser dans un layer jusqu'à ce que le programme soit fermé, par exemple, des points de localisation, des symboles, etc.
    Voici une procédure utilisant la fonction DrawCrossCircled qui fait clignoter un point :
    Code : 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
    Function DrawCrossCircled(X, Y, Radius : Double; Color : TColor;
             Circled, Scaled : Boolean) : Integer;
    Var
      R : Double;
      TmpDraw : Integer;
    begin  //  Dessiner une croix et un cercle au centre de la parcelle de côté < à 5 mm
    //  Map.ClearDrawing(ParcelCircle);
      if (Scaled) and ((Sqrt(ParcelArea) / Scale) >  0.005) then exit;
      TmpDraw := Map.NewDrawing(dlSpatiallyReferencedList);
      R := Scale * Radius;  //  0.005 (5 mm) est considéré comme minimum visible
      Map.DrawLine(X - R, Y, X + R, Y, 2, Color);
      Map.DrawLine(X, Y - R, X, Y + R, 2, Color);
      R := ConvertRadius(R);
      if Circled then
      begin
       Map.DrawCircle(X, Y, R + 0.001, Color, False);
       Map.DrawCircle(X, Y, R - 0.001, Color, False);
      end;
      Result := TmpDraw;
    end;
    Procedure FlashPoint(Map : TMap; Count : Integer; Colour : TColor; X, Y : Double);
    Var
      i, NoPnt : Integer;
    begin
      For i := 1 to Count do
      begin
        NoPnt := DrawCrossCircled(X, Y, 0.0015, Colour, True, False) ;
        Map.Refresh;
        Sleep(250);
        Map.ClearDrawing(NoPnt);
        Map.Refresh;
        Sleep(250);
      end;
    end;
    Pour l'appeler en reprenant les coordonnées des points que tu as données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      FlashPoint(Map1,10,clRed,-109.679100036621,48.5438194274902);
    Voilà pour essayer de te faire avancer.

    Consultes aussi les liens suivants :
    http://www.mapwindow.org/phorum/read...intview,page=1

  6. #6
    Membre très actif
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut
    Citation Envoyé par defluc Voir le message
    Mapwindows est un programme qui ouvre des shape files à l'instar d'un SIG.

    Si veux programmer sous Delphi, c'est l'activex MapWinGis que tu utilises et tu dois donc faire tes recherches avec ce mot clé.
    De même, tu as intérêt à utiliser ce mot dans le sujet de tes posts sur les forums.

    Pour ta question, tu dois d'abord déclarer les variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Var
      Lindex, Pindex, Sindex: integer; //  Numéro du Layer, du point et du shape
      P : MapWinGIS_TLB.Point;
      S : MapWinGIS_TLB.Shape;
    Ta source devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //    Lindex :=   //  selon que le Shape file existe ou est à créer
        pindex := 0;  //  Numéro du point
        p[pindex] := CoPoint.Create; //  Le point 1 est créé
        p[pindex].x:=-109.679100036621;
        p[pindex].y:=48.5438194274902;
        Sindex := 0;
        S[Sindex] := CoShape.Create;
        S[Sindex].ShapeType := SHP_POINT;
        S[Sindex].Set_ShapeType(SHP_POINT);
        S[Sindex].InsertPoint(p[Pindex],Pindex);
        ShapeLayer[Lindex].EditInsertShape(S[Sindex],Sindex);
        //  Instructions de définitions du shape dans la db
        Map1.MoveLayerTop(1); // 2  - 1 = 1   Rend le point est visible
    Souvent, on ne veut pas enregistrer dans le shape file ce que l'on dessine mais simplement le visualiser dans un layer jusqu'à ce que le programme soit fermé, par exemple, des points de localisation, des symboles, etc.
    Voici une procédure utilisant la fonction DrawCrossCircled qui fait clignoter un point :
    Code : 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
    Function DrawCrossCircled(X, Y, Radius : Double; Color : TColor;
             Circled, Scaled : Boolean) : Integer;
    Var
      R : Double;
      TmpDraw : Integer;
    begin  //  Dessiner une croix et un cercle au centre de la parcelle de côté < à 5 mm
    //  Map.ClearDrawing(ParcelCircle);
      if (Scaled) and ((Sqrt(ParcelArea) / Scale) >  0.005) then exit;
      TmpDraw := Map.NewDrawing(dlSpatiallyReferencedList);
      R := Scale * Radius;  //  0.005 (5 mm) est considéré comme minimum visible
      Map.DrawLine(X - R, Y, X + R, Y, 2, Color);
      Map.DrawLine(X, Y - R, X, Y + R, 2, Color);
      R := ConvertRadius(R);
      if Circled then
      begin
       Map.DrawCircle(X, Y, R + 0.001, Color, False);
       Map.DrawCircle(X, Y, R - 0.001, Color, False);
      end;
      Result := TmpDraw;
    end;
    Procedure FlashPoint(Map : TMap; Count : Integer; Colour : TColor; X, Y : Double);
    Var
      i, NoPnt : Integer;
    begin
      For i := 1 to Count do
      begin
        NoPnt := DrawCrossCircled(X, Y, 0.0015, Colour, True, False) ;
        Map.Refresh;
        Sleep(250);
        Map.ClearDrawing(NoPnt);
        Map.Refresh;
        Sleep(250);
      end;
    end;
    Pour l'appeler en reprenant les coordonnées des points que tu as données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      FlashPoint(Map1,10,clRed,-109.679100036621,48.5438194274902);
    Voilà pour essayer de te faire avancer.

    Consultes aussi les liens suivants :
    http://www.mapwindow.org/phorum/read...intview,page=1
    salut, merci pour les codes. mais je peut savoir si c'est pour quel version de delphi, parce que p qui est un point ne prend pas sur mon editeur je ne peux ecrire de la façon dont tu as ecrit et dans ta fonction de representer un point sur le map, si je peux avoir des commentaires, par exemples la variable scale,scaled..à quoi ça sert.
    merci

Discussions similaires

  1. [NetBeans] Insérer une image avec Netbeans
    Par mathieu_t dans le forum NetBeans
    Réponses: 4
    Dernier message: 03/08/2009, 14h44
  2. [Sql] inserer un lien avec le signe &
    Par fontome_ 123 dans le forum Oracle
    Réponses: 9
    Dernier message: 27/07/2006, 14h28
  3. transformer la virgule en point avec format
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/07/2006, 14h09
  4. distance entre 2 points avec Point2D
    Par mikees dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 09/01/2006, 16h10
  5. Petite mise au point avec gluUnProject.
    Par fatpat94 dans le forum OpenGL
    Réponses: 1
    Dernier message: 27/07/2005, 15h40

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