VBSorcier
Messages postés102Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention29 avril 2007
-
11 sept. 2005 à 22:52
VBSorcier
Messages postés102Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention29 avril 2007
-
18 sept. 2005 à 21:40
Bon j'ai un gros fichier de 1,6Go, qui contient des coordonnées XYZ du relief de tout le globe !!!!
j'interprete ces données pour les dessiner dans une picturebox mais le pb c'est que c'est long
picturebox : height=9000, width=18000
pa gagner du tps je saute 20 lignes pour 1 ligne lue et interpreté, parce que ya telement de point que la qualité d'image n'est pa affecté,
si je zoom je doi me relire tt le fichier
et si je garde le meme type de fonction, la qualité va decroitre(moin de point lu) et tjour aussi long
et donc ma question est :
Comment lire le fichier très rapidement ???
un peu comme "UltraEdit" (je sais pa si vous connaisser, mais c'est l'editeur hexa de tt bon developpeur) et surtout très rapide
merci par avance
j'ai deja eccumé les posts du forum du site
les methodes Open, Readfile
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 12 sept. 2005 à 10:25
Pas obligatoire tout de même BruNews, faut pas éxagérer ;)
Bon c'est sur que sur les opérations d'entrées/sorties, le VB est loin
d'être aussi rapide que le C, je te l'accorde, mais si tu nous disais
comment tu fait pour :
1/ Lire ton fichier
2/ Afficher tes points
On pourrait plus facilement te dire comment améliorer tes algorithmes (si on peut les améliorer).
_____________________________________________________________________
DarK Sidious
Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
Vous n’avez pas trouvé la réponse que vous recherchez ?
VBSorcier
Messages postés102Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention29 avril 2007 12 sept. 2005 à 18:21
'Chaque ligne du fichier comporte 3 champs séparés par 1 virgule
'ex:
'46.25455,2.58547,35
'=> 46.25455 °N
' 2.58547 °E
' 35m d'altitude
'Map etant ma picturebox (height=900 width=18000)
'f etant mon coeff de zoom, par defaut =50 (au demarrage)
'ech (echelle) est une picturebox avec une echelle de couleur en fonction de l'altitude
Sub Draw_Relief_World()
'pour donner le pt de longitude et de lattitude 0
cx = Map.Width / 2 '(9000)
cy = Map.Height / 2 '(4500)
'==============================================
'Partie pour appliquer une couleur en fonction de l'altitude
'le pixel 383 est mon 0 sur l'echelle
Alt = Alt
If Alt < 0 Then
a = Abs(Alt) / 31
ColorRelief = ech.Point(383 - a, 1)
ElseIf Alt >= 0 Then
a = Alt / 26
ColorRelief = ech.Point(384 + a, 1)
End If
'==============================================
Map.PSet (X, Y), ColorRelief
'cette partie est juste là pour aller plus vite
'je saute quelque point en fonction du zoom
On Error Resume Next
If f = 200 Then
Line Input #1, reponse
Line Input #1, reponse
ElseIf f = 100 Then
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
ElseIf f = 50 Then
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
Line Input #1, reponse
End If
DoEvents
Loop
Close #1
DoEvents
End Sub
voila, je pense que le code est deja pas mal optimisé
l'api Readfile c'est pas la peine sa bloque le PC le fichier est beaucoup trop gros
ce site regroupe tout un tas de donnée sur le globe: relief, cote de bord de mer, geologie...
a debut j'ai télécharger un zip (131 Mo) contenant un soft (GEODAS) et un fichier de 225Mo, le soft a decompresser et decrytper le fichier, pour donné un fichier (de 1.6Go) au format XYZ
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 12 sept. 2005 à 19:07
merci pour les liens je vais essayer de le récupérer.
Si je comprends bien, chaque ligne contient 2 double et 1 entier ?
Si oui, pourquoi ne pas transformer cela 1 bonne fois pour toute directement en binaire:
une structure (type en vb si je me souviens bien):
Double
Double
Long
ferait une stuct de 20 octets par enreg, ne plus mettre de sauts de ligne, c'est une cata en performance pour la lecture. Je pense qu'ainsi tu aurais des perfs nettement plus acceptables.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 12 sept. 2005 à 19:58
Ben déjà, lire le fichier en binaire s'impose comme le précise BruNews, au lieu de le lire en Input !!!
Ensuite, tu utilises la fonction Point pour afficher tes points, et tu
t'étonnes que ca rame ??? Va voir ma source de gestion d'image :
environ 35 fois plus rapide pour afficher des points !
Avec cà, tu devrais y gagner pas mal de temps je pense !
_____________________________________________________________________
DarK Sidious
Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français :
VBSorcier
Messages postés102Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention29 avril 2007 12 sept. 2005 à 20:14
ok pour ecrir une structure dans un fichier mais comment faire pour que ca prenne 20 octet
Private Type XYZ
X as Double
Y as Double
Z as Long
End Type
sub Toto()
dim coordon as XYZ
open fileOut for random as 1
open fileIn for input as 2
do while not eof(2)
line input #1,reponse
'================
interpretation de la ligne
...
coordon.x=...
coordon.y=...
coordon.z=...
'================
put #1,,coordon
doevents
loop
close #2
close #1
end sub
sinon pour limité la taille, je sais que faire comme ca:
Private Type XYZ
X as String * 7
Y as string * 7
Z as string * 6
End Type
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 12 sept. 2005 à 21:43
Je veux bien faire la transformation (par le C pour ma part) mais faudrait que je trouve le fichier et comme je n'installe rien sur mes machines, c'est pas gagné. Me faudrait un lien direct sur le zip ou autre.
VBSorcier
Messages postés102Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention29 avril 2007 18 sept. 2005 à 21:40
merci BruNews
j'ai fais comme tu m'a di avec les types dbl,dbl,long
mon fichier de 1.6 go et converti et fai 1.1 go
et c'est plus rapide a la lecture, c'est pa encore le top mais ca va
je vai voir pour indéxer le fichier par zone geographique comme ca
lorsqu'il y aura des zooms plus besoin de relire tout le fichier et de dessiner
les points que l'on ne voit pas.