Just nu i M3-nätverket
Jump to content

GpsLatitude och GpsLongitude datatyper


Coffer

Recommended Posts

Hej!

 

Jag håller på att programmera ett galleri i vb.net som skall läsa exif-information ur en bild och ur dessa hämta GPS-kordinater som sedan kan läggas i en instans av Google-maps för visning av var kortet tagits nåtonstans.

 

Mitt problem är att jag inte får fram rätt information ur gps-taggarna. Jag använder en klass som heter ExifWorks. Formatet på latitud- och longitudvärdena är xx° xx xx.xx". Dessa skrivs dock bara ut som xx på skärmen, dvs endast värdet framför gradtalet. För att få det att fungera så långt använder jag mig av UTF-8 teckenkodning av datatypen Double. (inte vet jag om det är rätt...)

 

Hur skall jag kunna få fram resultatet i det format det skall vara stället för ett avkortat format? Vilken datatyp skall användas för att läsa ut GPS-kordinater?

 

/Coffer

 

[inlägget ändrat 2009-06-08 07:27:50 av Coffer]

Link to comment
Share on other sites

Eftersom det verkar vara både grad-tecken och mellanslag, så tror jag att en String är bästa valet. Sen kan du ju hämta ut de olika komponenterna och lagra som doubles och ints etc.

 

Link to comment
Share on other sites

Hej!

 

Tack för snabbt svar.

Om jag lagrar dem som string så kodas tecknen om till obegripliga tecken... Svarta snedställda kvadrater med frågetecken i. Jag vet inte vad jag gör för fel... men string är (precis som du säger) ett bra ställe att börja på. Hur hindrar jag strängen från att teckenomkodas vid visningen?

 

Link to comment
Share on other sites

Hur vet du föresten att reultatet sparas som xx° xx xx.xx om du ändå får ut fyrkanter??

 

 

 

Link to comment
Share on other sites

Bör fungera bra att lagra som doubles från början. Att presentera med grader minuter osv är ju egentligen mest en presentationsgrej för att göra det snabbare att jobba med sjökort och kartor som använder koordinatsystemet.

 

En grad är indelad i 60 minuter, minuterna i sin tur har 60 sekunder och dessa kan ha tiondelar, hundradelar eller tusendelar (ibland skiter man i sekunderna och presenterar det med grader, minuter och 10/100/1000-delar på dessa istället. t.ex så här N 59º 19.619').

 

Om man tänker sig N 59º 30' (för att det är ett enkelt tal) så skulle det alltså lika gärna kunna representeras som 59.5 eftersom 30 minuter är en halv grad.

Det är precis samma beräkning som krävs för att göra om 2 timmar och 15 minuter till 2,25 timmar. Enda skillnaden är att timmarna heter grader.

 

Matten är superenkel men vill man testa att man tänkt rätt kan man använda t.ex den här: http://www.fcc.gov/mb/audio/bickel/DDDMMSS-decimal.html

 

Link to comment
Share on other sites

Anjuna Moon

Har du en referens till den klass du använder? Nog måste väl denna klass även erbjuda möjligheter att få ut varje separat värde ur positionerna, hellre än bara en strängrepresentation? (det lagras ju ändå inte som en sträng i EXIF, så nog borde detta finnas tillgängligt om klassen är något att ha)

 

För att få det att fungera så långt använder jag mig av UTF-8 teckenkodning av datatypen Double

Double är ett talformat och UTF-8 används för strängformat, så här förstår jag inte riktigt vad du menar.

 

 

Link to comment
Share on other sites

Anjuna Moon
Jag testar att läsa informationen i programmet PhotoMe som visar informationen som den skall. :)

Detta har ju iofs inget med det internt lagrade formatet att göra, utan bara vad programmet ifråga väljer att formattera det som.

 

Link to comment
Share on other sites

Men då är vi tillbaka till ruta ett. Hur formatterar jag det så att det visas rätt. Min teori är att det duger gott och väl som redan någon annan nämnt här att lagra värdet som en string och sedan koda strängen så att den visas rätt. Men jag får ingen rätsida i hur den skall kodas för att visas rätt.

 

UTF-8 returnerar i Firefox denna sträng: 8������&�������. (Helt obegriplig med andra ord - Windows visar följande: 8&).

 

Hur kodar jag om detta till något begripligt?

 

 

 

Link to comment
Share on other sites

Vad jag kan se finns det ingen färdig funktion i klassen för detta. Man får uppfinna hjulet själv... :( Det är därför jag skriver här. Jag försöker att skapa den funktionaliteten på egen hand.

 

Link to comment
Share on other sites

Om det är samma ExifWorks som jag tänker på så följer det med ett testprogram för att hämta ut exif egenskaper. Har du provat detta program och vad returnerar det för något??

 

Och enligt denna sida så borde det vara en array av rationals. Fast jag måste erkänna att jag är inte helt bekant med vad en rational är för något. Men jag hittade ett exempel för att läsa rationals ur exif-data. Kanske kan vara värt att snegla på länkarna?

 

http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html

 

http://www.vbaccelerator.com/home/net/code/libraries/graphics/Reading_EXIF_Tags_from_JPG_Files/article.asp

 

Link to comment
Share on other sites

Min teori är att det duger gott och väl som redan någon annan nämnt här att lagra värdet som en string och sedan koda strängen så att den visas rätt

Naturligtvis kan även den sämsta av lösningar duga om kraven är låga. Fördelen med att kunna formattera det precis som du vill och utgå från en double eller nåt är främst att du då kan formattera det precis så som mottagaren vill. Om ditt program pratar med Google Maps kommer du t.ex att förväntas ha ett format men om du ska skicka kordinaten till en Garmin GPS kommer den att vilja ha ett annat format. En båtägare kanske föredrar att se koordinaterna som han är van att se kordinater en annan kanske föredrar någon annan notation.

Detta alldeles oavsett att ditt "duger gott"-exempel helt uppenbart är krångligt att få att fungera och förmodligen ännu jobbigare att göra sökningar i och är ett rätt udda format att lagra något som faktiskt inte är en sträng utan ett tal.

 

Link to comment
Share on other sites

Hej igen!

 

Jag inser din poäng och håller helt med dig. Då återstår endast frågan hur informationen görs begriplig för koden? Jag har utvecklat en liten konverterare som skall konvertera informationen i GPS-taggarna till decimaltal. Jag tror att funktionen skall fungera men för att den skall kunna påbörja konverteringen så behövs origianlinformationen ur taggen. Och som beckant... den visas ju fel på skärmen. Hur tar jag mig runt alltihopa?

 

Link to comment
Share on other sites

Svårt att säga för jag förstår inte riktigt vad du menar med att "UTF-8 returnerar i Firefox denna sträng". UTF-8 returnerar ingenting, det är teckenkodning.

 

 

Link to comment
Share on other sites

Jag var lite otydlig i mitt förra inlägg. Vad jag menar är att om jag använder teckenkodningen UTF-8 så visas strängen med en massa krumelurer. Om jag ändrar kodningen till någon annan teckenuppsättning så visas andra koder men fortfarande inte det rätta innehållet, det vill säga grader, minuter och sekunder. Hur skall jag gå till väga för att strängen som hämtas ur EXIF visas som läsbara grader, minuter och sekunder istället för en massa obegripliga tecken?

 

Link to comment
Share on other sites

Jag kommer närmre och närmre lösningen men jag lyckas inte komma ända fram. Jag har slitet med detta i snart en vecka. Jag skulle vara tacksam om någon kunde få pusselbitarna att trilla på plats. Nu skriver min kod ut följande: Latitud: "56"... vad den skall skriva ut är "56,38,56.26". Jag har försökt med alla tänkbara lösningar för att skriva ut den.

 

Koden ser ut som följer:

 

    Public Property GPSLatitude() As Double
       Get
           If Me.IsPropertyDefined(TagNames.GpsLatitude) Then
               Return Me.GetPropertyRational(TagNames.GpsLatitude).ToDouble()
           Else
               Return 0
           End If
       End Get
       Set(ByVal Value As Double)
           Try
               Me.SetPropertyString(TagNames.GpsLatitude, Value.ToString("dd/1,mm/1,ss/1"))
           Catch ex As Exception
           End Try
       End Set
   End Property

 

För att skriva ut koden använder jag följande anrop:

 

    Public Function GetLat(ByVal FileName As String) As String
       Dim EW As New ExifWorks(Server.MapPath("~/Gallery/" & Request.QueryString("f") & "/" & FileName & ".jpg"))

       Return EW.GPSLatitude().ToString()
   End Function

 

Utmatningen blir som sagt fel... vad gör jag fel och hur borde jag göra istället?

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...