21. januar 2004 - 10:53Der er
14 kommentarer og 3 løsninger
vise koordinater på et kort i form af små runde prikker
Hejsa!
Jeg skal vise nogle koordinater (hentet fra en DB) på et kort.
Jeg forestiller mig et kort i form af et jgp/gif image og på en eller anden måde skal jeg vise nogle koordinater på dette kort i form af små runde prikke eller lignende.
Nogen der har arbejdet med noget lignende ?? Jeg søger ideer, links og gerne små kode eksempler på hvordan dette kunne løses.
Jeg fordeler points ud fra hvad der hjælper mig mest.
ved at hente dine koordinater (x, y) ud fra db'en kan du oprette et point-object ud fra dem, og sætte det ind på dit billede. Det er ikke det store problem.
Noget i stil med: using(Graphics g = Graphics.FromImage(dit_kort_image)) { foreach(Point p in dine_koordinater) g.DrawEllipse(System.Drawing.SystemPens.ControlText, p.X, p.Y, 1.0f, 1.0f); }
Undersøg Pen og Brush klasserne hvis du vil styre farver mv.
Du skal selvfølgelig også lave en smule kode der omregner mellem image- og object-coordinatesystem. Dvs. fx. mellem længde/breddegrad og pixelkoordinater.
Jeg har selv arbejdet en del med kort (både på nettet og i applikationer), og det du efterspørger er bestemt ikke særlig svært.
odegaard > jeg skal nogengange vise mere end en million koordinater, så netop dette eksempel tror jeg ikke jeg kan bruge.. men hvis man man vise et System.Drawing.Image på et website vil det være dejligt ??
Du kan vise en gif/jpeg/png på et website, og det handler derfor om at generere et billede-fil (dvs. en stream af data der gør det ud for en fil) og dette laves ud fra en System.Drawing.Image (eller Bitmap). Eksemplet med ?showpoint= var blot et eksempel. Der er jo mange måder du kan parse data til en anden "side" ("side" i gåseøjne, da det jo faktisk er et billede der sendes retur). Fx. via SessionState, Cookies eller QueryString.
En million punkter på ét billede? Det er da urealistisk at kunne overskue så mange data. Baggrundskortet vil jo helt drukne i prikker.
Ja en mio er måske lige i overkanten men 5-600.000 kan der godt komme. Jeg vil prøve at se på det med at lave en stream. Det lyder som en spændende idé :)
Jeg kigger på det og fordeler points når jeg er blevet lidt klogere.
Hvis du vil tegne et billede på et billede (fx. et ikon) er her lidt kode fra en tidligere applikation (lettere omskrevet med risiko for fejl):
Bitmap icon = new Bitmap("flag.bmp")); //Get flag icon Bitmap MyMap = new Bitmap(ImageWidth,ImageHeight); //Create image to draw on Graphics g = Graphics.FromImage(MyMap); //Create graphics reference to image g.DrawImage(CurrentMap, 0, 0); //Draw background map //Set white as transparent on icon System.Drawing.Imaging.ImageAttributes att = new System.Drawing.Imaging.ImageAttributes(); att.SetColorKey(Color.White,Color.White); int x = mapToPixelX((double)Longitude); //Convert to pixel coordinates int y = mapToPixelY((double)Latitude); //Convert to pixel coordinates g.DrawImage(icon,new Rectangle(x,y,19,23),1,1,19,23,GraphicsUnit.Pixel,att); //Draw icon on image //Her kunne man i stedet tegne en cirkel som clausc viser med DrawEllipse
Her er et eksempel på at gemme en System.Drawing.Bitmap som en png-stream:
System.IO.MemoryStream ms = new System.IO.MemoryStream(); MyMap.Save(ms, ImageFormat.Png); MyMap.Dispose();
Jeg har lige et ekstra spørgsmål hvis nogen skulle vide det.. jeg viser mit kort på en ImageButton og selvom ImageUrl er sat rigtig refresh'er den ikke billedet korrekt.. åbner jeg billedfilen som skal vises indeholder den de rigtige informationer men det er den gamle version som vises på knappen selvom den ikke findes mere.. how come ???
hmm jeg laver allerede en dispose på den ImageButton.Dispose();
men HVIS jeg laver en refresh af selve siden vises det rigtige billede.. mine metoder kører ikke i en "if (!Page.IsPostBack)" så jeg fatter sgu ikke hvorfor den ikke kan refreshe.. antyways.. warum can ich keine points geben ?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.