#1 Wed 02 April 2003 11:47
- O Mougel
- Invité
SIG et Flash
Bonjour,
Une question pour les connaisseurs de Flash et Action Script !!!
Je dois fournir des donnees geographiques a des prestataires de service
pour la realisation d'une petite appli carto sur internet.
Le langage choisi est Flash.. Tres bon rendu cartographique.etc... Mais :
En realisant cet export via EPS ; je supprime ainsi le lien vers les
donnees attributaires puisqu'a ma connaissance PostScript ne gere pas de
champs lies aux objets.
Donc le liens entre les objets Flash et les donnees attributaires doivent
etre refais a la main ( par exemple Poly communes et Num INSEE etc..)
Quelle solution utilisez-vous pour conserver au moins un identifiant au
niveau de l'objet graphique pour ensuite faire la jointure avec un SGBD ?
D'avance merci
Cordialement,
Olivier MOUGEL
Geomatique - SIG
Conseil General de la Gironde
Esplanade Charles de Gaulle
33074 BORDEAUX Cedex
0556 99 3333 poste 3764
o.mougel@ cg33.fr
#2 Wed 02 April 2003 19:04
- Eric Mauvière
- Invité
Re: SIG et Flash
Bonjour,
Voici la methode que j’utilise pour convertir une couche au format shape
d’Esri vers Flash ou Svg,
Elle suppose de disposer de PHP (gratuit) et d’Arcgis (pas encore
gratuit) :
1) Avec ArcCatalog (utilitaire livre avec Arcgis), creer une
geodatabase (au format Access) et y placer ses fonds ;
2) Lancer l’un des deux scripts PHP suivants. Le premier utilise la
librairie Ming (www.opaque.net/ming) pour generer du swf.
Les fonctions Ming sont decrites dans la doc PHP classique (www.php.net
). Le second cree un fichier svg.
Le premier script affiche et cree une carte au format Flash/swf. Tous
les objets sont geres en tant que clips nommes,
donc pilotables dans Flash apres chargement via loadMovie pour
deplacements, mises a l’echelle, coloration thematique, etc.
lancement du script : genswf.php?nomtable=macouche.
Open( DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=C:tmpgeo_db.mdb );
=[ nomtable ];
= 900; //largeur de la carte en pixels dans Flash
= 800; //hauteur de la carte en pixels dans Flash
= pop ; //nom de la variable « population »
= nom ; //nom de la variable « nom »
= ->Execute( SELECT * from GDB_GeomColumns where
tablename=' .. '; );
=->Fields( ExtentLeft ); =->value;
=->Fields( ExtentRight ); =->value;
=->Fields( ExtentBottom ); =->value;
=->Fields( ExtentTop ); =->value;
= ( + ) / 2;
= ( + ) / 2;
= - ;
= - ;
If ( > * ( / )) = ;
If ( Execute();
while (!->EOF) {
= new SWFShape();
->setRightFill(->addFill(0xff, 0xff, 0xcc));
->setLine(0, , , );
=->Fields();
=->value;
=->Fields();
=->value;
=->Fields( shape );
=->value;
=unpack( Vlong , substr_arr(,36,4));
=[ long ];
=unpack( Vlong , substr_arr(,40,4));
=[ long ];
=44;
For ( =0; movePenTo( ,);
} Else {
= * ( - ) ;
= -1 * * ( - ) ;
->drawLine( ,);
}
= ;
= ;
}
->drawLineto(,);
}
= new SWFSprite();
= ->add();
->nextFrame();
= ->add();
->setName();
++;
->MoveNext();
}
= new SWFAction(array_num_to_swf(, p ));
->add();
= new SWFAction(array_str_to_swf(, n ));
->add();
= new SWFAction( _parent.apresData(); );
->add();
->setBackground(0x66, 0xcc, 0xff);
->setDimension(1000,1000);
header('Content-type: application/x-shockwave-flash');
->output();
= ob_get_contents();
=strlen();
=gzcompress(substr(,8));
='CWS'.chr(0x06).pack( V ,).;
= C:tmp.swf ;
= fopen(, wb );
fwrite(, );
ob_end_clean();
print ;
->Close;
->Close;
function substr_arr(,,) {
=+;
= ;
for (=;
Et pour ceux qui aiment contempler leur sablier sur fond d’Internet
Explorer oblige en attendant l’arrivee des donnees,
voici la version Svg (je plaisante ::-) ) :
lancement du script : gensvg.php?nomtable=macouche.
Open( DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=C:tmpgeo_db.mdb );
=[ nomtable ];
= 900; //largeur de la carte en pixels
= 800; //hauteur de la carte en pixels
= nom ;
= ->Execute( SELECT * from GDB_GeomColumns where
tablename=' .. '; );
=->Fields( ExtentLeft ); =->value;
=->Fields( ExtentRight ); =->value;
=->Fields( ExtentBottom ); =->value;
=->Fields( ExtentTop ); =->value;
= ( + ) / 2;
= ( + ) / 2;
= - ;
= - ;
If ( > * ( / )) = ;
If ( Execute();
=array();
=0;
while (!->EOF) {
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin= ;
=->Fields();
=->value;
=->Fields( shape );
=->value;
=unpack( Vlong , substr_arr(,36,4));
=[ long ];
=unpack( Vlong , substr_arr(,40,4));
=[ long ];
=44;
For ( =0; 0) /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin.= zM ;
If ( != - 1) = [ + 1] - 1 -
;
Else = - 1 - ;
= ;
= ;
For ( = 0; MoveNext();
}
header( Content-type: image/svg+xml );
.='';
.='';
.= n .'';
.= n .'';
.= n .'';
.= n .'';
.= n . ;
For ( = 0; ;n ;
}
.= n .'';
.= n .'';
=gzencode();
= C:tmp .. .svgz ;
= fopen(, wb );
fwrite(, );
fclose();
echo ;
->Close;
->Close;
function substr_arr(,,) {
=+;
= ;
for (=;
Eric Mauviere
Emc3
www.geoclip.net
#3 Wed 02 April 2003 20:38
- Fx Gamoy
- Invité
Re: SIG et Flash
bonjour,
j'ai developpe une interface flash qui permet de recuperer dans flash un
champs attributaire (que j'affiche ensuite lorsque l'utilisateur survole un
element symbolique de thematique)
Je suppose qu'il peut en etre de meme avec votre problematique.
Je travaille avec un noyau mapserver avec une base de donnees vecteur
(format SIG).
Je fait interagir l'interface flash avec un programme en php sur le server
par l'intermediaire d'un formulaire definit dans le fichier flash.
Cette interaction est possible via la propriete sendAndLoad
var formData = new LoadVars();
var mapFreshLoad = new LoadVars();
var mapEngine = new LoadVars();
mapFreshLoad.sendAndLoad(phpProgram, mapFreshLoad, POST );
lors d'un click sur la carte le phpProgram est execute, la carte resultante
est generee. Je recupere aussi les elements attributaires et coordonnees des
elements symboliques que je souhaite rendre sensible .
Le fichier php faisant echo a une action sur flash est comme suit :
// debut php
x1=&y1=&nom1=&x1=&y1=nom2=&.............
// fin php
Une fois ce traitement effectue, actionscript prends le relais. Il faut
recuperer dans la variable formData chacune des valeurs ci-dessus
Dans mon cas, j'utlise le triplet (x,y,attribut) pour afficher des
etiquettes lors du survol des entites symboliques thematiques de la carte.
Le resultat est consultable a l'adresse suivante :
http://eurocite.mapxplore.com:150/flash/index.phtml
J'espere que cela vous apportera des elements de reponse.
Bien cordialement,
fx gamoy
http://www.mapxplore.com/
#4 Thu 03 April 2003 11:35
- Pierre GIRAUD
- Invité
Re: SIG et Flash
Bonjour,
Je suis bien content que des elements plus pratiques apparaissent sur cette liste a propos de flash et de ses utilisations.
J'ai tout de meme quelques questions a propos de votre script php et de l'utilisation de la librairie Ming :
1- la connection a une base Access est-elle plus facile a gerer qu'une base MySQL ? Avez-vous fait ce choix pour la facilite qu'il apporte pour convertir les donnees depuis ArcCatalog vers un fichier .mdb ? Ou bien les connections avec une base Access est meilleure ?
2- la librairie Ming semble avoir son interet mais encore faut-il qu'elle soit integree comme module dans le serveur php. Quelle version de cette librairie est necessaire pour executer votre script ? Connaissez-vous un hebergeur gratuit qui fournisse php avec Ming ? A ma connaissance, la version incluse dans Easyphp (pour developper et tester en local sur une seule machine) n'est pas une version recente et donc peu utilisable.
3- pourquoi avez vous prefere la librairie Ming a la librairie FreeMovie dont les objectifs sont les memes ?
Merci pour vos reponses .
Pierre GIRAUD
#5 Thu 03 April 2003 12:00
- Eric Mauvière
- Invité
Re: SIG et Flash
Bonjour,
Quelques reponses au message de Pierre Giraud sur Ming et Flash :
1) Le script propose hier s’appuie sur Access car c’est en effet le
chemin le plus court,
les geodatabases creees par ArcCatalog sont au format Access.
Maintenant, MySql sera plus efficace, plus rapide a parcourir, si la
base est importante. Ce format est par ailleurs compatible avec Linux
alors qu’Access ne l’est pas.
2) EasyPHP (en tout cas dans sa derniere version, la 1.6) inclut Ming et
l’active par defaut. A ma connaissance, la derniere version publique de
Ming est aussi la premiere, soit la 0.2a, qui marche bien. Sur
ming.sourceforge.net, on peut trouver des versions de developpement plus
recentes, mais pas stabilisees.
3) Freemovie (freemovie.sourceforge.net) est un projet tres prometteur,
s’etant fixe pour objectif de fournir des outils de generation swf dans
de nombreux environnements (PHP, VB, C#...) sans bibliotheques
additionnelles java ou C, de facon a pouvoir faire tourner ces outils
tres simplement quel que soit le contexte. Malheureusement, ce projet
parait gele et, s’agissant de PHP, n’integre pas encore la generation
d’objets sous forme de clips nommes.
4) Cote hebergement, chez les payants (OVH, Amen…) Ming est activee par
defaut, chez les gratuits, je crois que ca passe chez Multimania.
Au final, avec PHP et Ming, outils gratuits, il est facile de publier
ses cartes sur Internet en les faisant vivre via une interface
intelligente et legere, passe-partout,
tout en valorisant, sans conversion fastidieuse, ses fonds de carte.
Cordialement,
Eric Mauviere
Emc3
www.geoclip.net
#6 Fri 04 April 2003 13:04
- Mickael Vasquez
- Invité
Re: SIG et Flash
Bonjour,
Je pensais que dans une geodatabase le codage binaire
de la geometrie dans le champ shape n'etait pas
public et que la seule aternative pour programmer
autour d'une geodatabase etait les ArcObjects.
Au vu du script php de M. Mauviere, j'avais tort.
M. Mauviere, pourriez-vous nous dire ou l'on peut
trouver des information concernant le decodage de ce
champ ?
Est-il possible a votre connaissance de decoder le
champ Xml de la table GDB_UserMetadata, champ binaire
qui decrit toutes les metadonnees d'une couche en xml
?
M. VASQUEZ
IFREMER
mkvasquez@ yahoo.com
___________________________________________________________
#7 Fri 04 April 2003 13:04
- Eric Mauvière
- Invité
Re: SIG et Flash
Bonjour,
Le codage binaire de la geometrie dans le champ shape
est effectivement le meme que le shape standard, ce qui est dans la
logique des choses. Shape, me semble-t-il, rejoint les specifications
Opengis, et est deja un standard de fait. Une geodatabase au format
shape est beaucoup plus facile a manier sur Internet qu’une couche au
format shape standard, car vous n’avez pas besoin de lire et charger
toute la couche pour n’en traiter et afficher qu’une partie.
Du reste, je serai volontiers preneur d’un utilitaire gratuit permettant
de convertir une couche shape en geodatabase (ou au minimum dans la
seule table qui comprend donnees attributaires et geometrie), sans avoir
a passer par ArcGis.
Cependant, ce n'est pas aupres des editeurs que vous entendrez le
discours :
Mais non cher ami, il n'est nul besoin de notre logiciel serveur carto
pour exploiter notre format de fonds de carte sur Internet … :-)
Une page de reference pour travailler avec le format shape :
http://gdal.velocet.ca/projects/shapelib/
En revanche, je ne connais pas la structure du champ binaire nomme Xml
de la table GDB_UserMetadata.
Cordialement,
Eric Mauviere
www.geoclip.net