German html code für Tracking-Anzeige

arnold steger

Member
Licensed User
Longtime User
Hallo.
Ich verwende in meiner App ein Tracking das ich als txt abspeichere.
Nach beendeter Aufzeichnung speichere ich txt ab und aus dieser Datei generiere ich mir einen html-code für die Anzeige im Browser.
Funktioniert bei kleineren Aufzeichnungen problemlos, nur wenn die Route über 3000 GPS-Punkte hat dann kann die Umwandlung in html Minuten dauern.
Auch habe ich wärend der Umrechnung keine Möglichkeit gefunden den Nutzer eine Aktivität anzuzeigen.
Dim myProgressDialog As CustomProgressDialog
Dies wird zwar angezeigt weil ich es im Main schon einige Zeilen vorher aufrufe, jedoch friert die Anzeige ein.
Hier der funktionierende Code aus meinem Code-Module. Service-Modul versuchte ich bereits, keine Veränderung.
Sieht jemand eine Möglichkeit die Umwandlung schneller zu machen?

B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim WrHtmlCode,WrHtmlDir,WrHtmlName As String
    Dim WrHtmlStart,WrHtmlStop,WrHtmlCenter As LatLng
    Dim WrHtmlPoints As List

End Sub
Sub WriteInitHtml
Log("Html Start")
    If WrHtmlPoints.Size>1 Then
    WrHtmlCode = "<!DOCTYPE html><html><head><meta name='viewport' content='initial-scale=1.0, user-scalable=yes' /><style type='text/css'>  html { height: 100% }  body { height: 100%; margin: 0px; padding: 0px }#map_canvas { height: 100% }</style><script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=true'></script><script type='text/javascript'> function initialize() {var latlng = new google.maps.LatLng(" & WrHtmlCenter.Latitude & "," & WrHtmlCenter.Longitude & "); var myOptions = { zoom: 10, center: latlng, disableDefaultUI: true, zoomControl: true, scaleControl: true, scaleControlOptions: {position: google.maps.ControlPosition.TOP_LEFT}, mapTypeControl: true, mapTypeId: google.maps.MapTypeId.HYBRID }; var map = new google.maps.Map(document.getElementById('map_canvas'),  myOptions)"

    'Startpunkt/Endpunkt mit Marker
    WrHtmlCode = WrHtmlCode & "; var markerc = new google.maps.Marker({    position: new google.maps.LatLng(" & WrHtmlStart.Latitude & "," & WrHtmlStart.Longitude & "),map: map, title: '',clickable: false,icon: 'http://www.google.com/mapfiles/dd-start.png' })"
    WrHtmlCode = WrHtmlCode & "; var markerc = new google.maps.Marker({    position: new google.maps.LatLng(" & WrHtmlStop.Latitude & "," & WrHtmlStop.Longitude & "),map: map, title: '',clickable: false,icon: 'http://www.google.com/mapfiles/dd-end.png' })"
    WrHtmlCode = WrHtmlCode & "; var points = ["
   
    WrHtmlCode = WrHtmlCode & " new google.maps.LatLng(" & WrHtmlStart.Latitude & "," & WrHtmlStart.Longitude & ")"
   
    'Jeder einzelne Punkt hier dazu
    For i = 2 To WrHtmlPoints.Size-1
    Dim PointsTemp() As String = Regex.Split(",",WrHtmlPoints.Get(i))
    WrHtmlCode = WrHtmlCode & ", new google.maps.LatLng(" &  PointsTemp(0) & "," &  PointsTemp(1) & ")"
    Next
   
    WrHtmlCode = WrHtmlCode & "] "
    WrHtmlCode = WrHtmlCode & "; var polyline = new google.maps.Polyline({path: points, strokeColor: '#FF00FF',strokeOpacity: 0.5, strokeWeight: 3}); polyline.setMap(map); }</script></head><body onload='initialize()'> <div id='map_canvas' style='width:100%; height:100%'></div></body></html>  "
Log("Html Stop")   
   
    Dim RouteName As String :RouteName=WrHtmlName
    Dim RouteHtml As OutputStream
    RouteHtml = File.OpenOutput(WrHtmlDir,WrHtmlName&".html",False)   
    RouteHtml.WriteBytes(WrHtmlCode.GetBytes("UTF8"),0,WrHtmlCode.GetBytes("UTF8").Length)
    RouteHtml.Flush
    RouteHtml.Close
    End If
    CallSub(Main,"progressDialogClose")
Return
   
End Sub
 
D

Deleted member 103

Guest
Hallo Arnold,

du musst den Sub "WriteInitHtml" in ein eigener Thread laufen lassen, z.B. so:

B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Public Thread1 As Thread
End Sub


Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    'Activity.LoadLayout("Layout1")

    Dim args(0) As Object
    Thread1.Initialise("Thread1")
    Thread1.Start(Me,"WriteInitHtml", args)

End Sub

Sub WriteInitHtml
    ....
    ....
    ....
End Sub

Sub Thread1_Ended(fail As Boolean, error As String) 'An error or Exception has occurred in the Thread
    If error <> "" Then       
        Log("Thread1 Ended: fail= " & fail & " :error=" & error)
    End If
End Sub
 

rboeck

Well-Known Member
Licensed User
Longtime User
Wie wäre es, gleich die HTML Datei mitzuschreiben; die Zeit zwischen zwei Tracking Points ist sicher lang genug; evtl. könnte die HTML Datei jeweils im Append Mode geöffnet werden.
 
Top