Jeg sidder med en kode som jeg gerne vil modificere en anelse. Er der en der kan fortælle mig hvordan jeg trækker et x,y kordinat ud af denne kode Således at jeg får det horisontale og vertikale kordinat henholdsvis som x,y
void CScrollBitmapDlg::OnShow2() { // TODO: Add your control notification handler code here CString file; file.Empty(); m_com.ShowOpen(); file=m_com.GetFileName(); file.TrimRight(); if(m_hBmpNew != NULL ) DeleteObject(m_hBmpNew); sourcex=sourcey=0;// if(file.IsEmpty()) AfxMessageBox("Please Select a waypoint file"); else{ if(file.Right(3)!="txtf") AfxMessageBox("Please Select a .txt file"); else { m_hBmpNew = (HBITMAP) LoadImage( AfxGetInstanceHandle(), // handle to instance file, // name or identifier of the image (root is where project is) IMAGE_BITMAP, // image types 0, // desired width 0, // desired height LR_LOADFROMFILE); if( m_hBmpNew == NULL ){ AfxMessageBox("Load of waypoints Failed");}
// put the HBITMAP info into the CBitmap (but not the bitmap itself) else{ m_st1.GetClientRect( &rectStaticClient ); rectStaticClient.NormalizeRect(); m_size.cx=rectStaticClient.Size().cx; m_size.cy=rectStaticClient.Size().cy; m_size.cx = rectStaticClient.Width(); // zero based m_size.cy = rectStaticClient.Height(); // zero based
// Convert to screen coordinates using static as base, // then to DIALOG (instead of static) client coords // using dialog as base m_st1.ClientToScreen( &rectStaticClient ); ScreenToClient( &rectStaticClient);
ok jeg kan se jeg fik forklaret mig uklart, det jeg mener er hvordan for jeg indelt dette bitmap i små kvadrater som jeg kan navngive med id numre alla zone1,zone2, osv.
Jeg skal lige være helt med her, passer følgende? 1) Du har en dialog, hvorpå du viser en billede 2) Du kan scrolle billedet op/ned side/side 3) Du vil lave noget rutebeskrivelse eller ruteberegning..? (udfra kommentaren: "Select a waypoint file")
Er dit problem at tegne kvadranterne på billedet? (skal de i det hele taget tegnes?)
Jo mere information, jo lettere at løse opgaven...
du er helt med kan jeg høre, meningen er at man ligesom kraks vejviser skal kunne finde rundt og søge efter postitioner i kortet. Jeg vil så til hvert kort tildele en fil hvor filnavn passer sammen med kortnavn og deri definere hvilket felt der er hvilket "waypoint" og evt med en beskrivelse, og kvadrant id,
således at jeg laver en slags layer som er identisk med hvert kort indeholde informatiner ja der skal også tegnes kvadranterne med tynde streg
Det er til at starte med at få lavet ovenstående kode om til at vise kordinat linier også, som skal være der ( 1*1 cm kvadrater ) og navnegive de kvadrater med eks. kvadrat[100]
Det er jo et større projekt at lave det på en fornuftig måde... Med den funktionalitet du ønsker, er det utrolig vigtigt at have en solid datamodel, altså vil jeg anbefalde dig at få det på plads først!
Nu ved jeg jo overhovedet ikke hvilke tanker du har gjort dig, så det er jo ret svært at kommentere din kode og sine hensigter... Har du lavet nogen form for dokumentation eller analysedokumenter du kan/vil dele?
Har alle dine kortfiler samme height/width-perspektiv?
nu er jeg ikke vant til datamodeler. har du et eksempel på hvordan man laver en sådan. Indhold osv. jeg er ikke professinel programmør men kan godt høre at det er noget man nok skal lave så man har nogle retningslinier.
1) ja 2)ja 3) formatet er almindelige textfiler som er udformet således
textfil.txt:
waypoint:: Amager nextwaypoint goes her
Kordinat:: 2323,3342 N // tilhører destination amager 2323,3342 E // // tilhører destination amager next cordainate goes here Rute:: rute1 // tilhører destination amager rute1 // tilhører destination amager Next rute goes here
sorry mangler noget i textfilen den ser således ud
textfil.txt:
waypoint:: id1:Amager // programmets navn for punkt nextwaypoint goes her
Kordinat:: idn1: 2323,3342 N: // tilhører destination amager ide1: 2323,3342 E // // tilhører destination amager next cordainate goes here Rute:: idrute1:rute1 // brugerens navn for punktet Next userdefined name goes here
medmindre man kunne lave et stort transperrent bitmap layer indeholdende 9 små felter og definere hvilket kort der hører til hvertfelt og den så skal hente det tilhørende bitmap hvori der er focus på felt
alla if OnMouseDown(felt1) bla bla ...loadBitmap(kort1)
Det er stadig en MEGET sparsom mængde information du giver! Prøv at være lidt mere beskrivende...
Er det et format du skal overholde eller ét du selv har defineret og som du kan ændre?
Jeg går ud fra at fx: idn1: 2323,3342 N: betyder: 23 grader, 23.3342 minutter nord
Forudsat at ovenstående er sandt, ville det fx være en stor fordel at udskifte , med . som separator, idét tallet lettere kan læses ind i en talværdi!
Hvilke overvejelser har du gjort dig omkring mapningen mellem koordinater og kort? Har du fx specifikationerne på dine kort, således du kender koordinaterne på henholdsvis de 4 hjørner?
Det er rigtige kordinater vi snakker om, så du har ret med hensyn til tallende Det eneste jeg skal overholde er den måde data kommer ind på resten kan laves som det passer bedst. dette er signalet som kommer ind $GPGGA,123128.999,5538.9469,N,01212.9181,E,1,04,4.3,57.3,M,,,,0000*37 og jeg på nuværnde tidspunkt læser jeg dem fra usb porten så outputtet ligger sorteret og behandlet ( men alt sammen i consol ) Med hensyn til mapningen så er jeg på nuverende tidspunkt ved at finde de aktuelle kordinater frem.
Den med kommaet var en fejl. det er "." der bruges og "," er seperator i min nuværende kode. Jeg vender lige tilbage med kordinaterne
Næ, egentlig ikke, men jeg har en Navman GPS 3400 til min Compaq iPAQ. Den har jeg fundet ud af at man også kan læse data fra, via std seriel kommunikation, hvis man ikke har brug for de faciliteter, der er i det medfølgende program!
Jeg har dog ikke kigget ret meget på det, så du er nok mere inde i formatet end jeg...
Jeg har nu prøvet at finde kordinator et stykke tid. Og det er ret svært at finde det precist nok. Mon man kunne kaliberere det selv, ved at gemme en gps position. Nå men det finder jeg ud af. alt om alt er at den starter ved 55.00.00 N og slutter ved 55.99.99 N og for bredegraderne gælder 11 40 00 til 12 40 00 pis jeg har en aftale håber vi snakkes ved
Jeg har kigget lidt på at få lavet en datamodel til at indeholde de forskellige typer information. Jeg har kun lavet support for typerne GPGGA, GPGSA og GPRMC (det er nok de mest brugte???). For at tilføje flere typer skal man bare lave specialiceringer af klassen NMEA (som du kan se herunder) og implementere metoden DecodeNMEAString. Jeg har desværre ikke haft tid til at kigge på den grafiske del endnu...
// GPGGA: Fix data class NMEA_GPGGA : public NMEA { public: bool DecodeNMEAString(const CString& strNMEASentence);
protected: // Attributes CTime m_Time; Position m_Latitude; Position m_Longitude; PositionFix m_PositionFix; short m_SatellitesUsed; float m_HDOP; // Horizontal dilution of precision float m_Altitude; Unit m_AltitudeUnit; float m_GeoidSeperation; Unit m_GeoidSeperationUnit; float m_DGPSAge; int m_DGPSStationID; CString m_Checksum; };
// GPGSA: Active satellites class NMEA_GPGSA : public NMEA { public: bool DecodeNMEAString(const CString& strNMEASentence);
// Get hour, min and sec int nHour, nMin, nSec; strToken = TokenList.GetNext(pos); nHour = _wtoi(strToken.Left(2)); nMin = _wtoi(strToken.Mid(2, 2)); nSec = _wtoi(strToken.Mid(4, 2)); m_Time = CTime(2000, 1, 1, nHour, nMin, nSec); // We only have time, not date, so just put some default values
Jeg har ændret lidt i ovenstående kode, bl.a.: Datamodellen kompilerer både som MBCS og Unicode (så det kan køre på Win98/W2K/PocketPC) Ændring i nogle attributter/parser.
Jeg har desuden lavet et MFC SDI projekt, hvor du kan åbne NMEA-encodeded filer og få vist GPRMC-data i en liste.
Jeg kan sende det til dig hvis du er interesseret..?
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.