[flash] efficient inlezen/weergeven +100.000 gps punten

Pagina: 1
Acties:

  • TimDJ
  • Registratie: Februari 2002
  • Laatst online: 21:30
Ik ben op dit moment bezig met een project om een route van iemand die een week of 4 gaat
rondlopen te loggen en daarna in te lezen in googlemaps/umap in flash.

Nu is mijn probleem dat mensen hier vrij in moeten kunnnen navigeren en dat er op een ingezoomd niveau nauwkeurig de route te volgen is. Hiervoor heb ik straks een database met +100.000 gps punten met een tijdcode. Deze moeten met een lijn achter elkaar geplakt worden.

Natuurlijk wil ik niet dat vanuit flash dat elke client eerst een bestand van xx Mb gaat inlezen en daarna tussen al deze punten een lijn gaat tekenen. Ik heb nu een testversie met 4000 punten en dit wordt al te traag.

Zelf zit ik te denken aan queries met daarin een query met de current viewport als voorwaarde. Maar hoe zorg ik dat bij in & uitzoomen en schuiven over de kaar dit allemaal netjes verloopt zonder dat ik van alles dubbel ga inladen


Heeft iemand hier eerder mee te maken gehad die mij een schop in de goede richting kan geven?

Freelance Drupal Developer


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Je kunt een eenmaal aangemaakte google map toch opslaan? of vast wel deze aangemaakte data serializen oid?

Stop uploading passwords to Github!


  • Cascade
  • Registratie: Augustus 2006
  • Laatst online: 18-11 17:28
Inderdaad, kan die google map dat al niet?

Als je het zelf wil doen:

- je database uitbreiden met informatie zodat je Level Of Detail regels kan toepassen. Je kan je data al bewerken voordat het online gebruikt wordt; afhankelijk van het zoomniveau, welke punten moet je laten zien, welke liggen zo dicht bij elkaar dat het visueel 1 punt is, welke liggen (ongeveer) op een lijnstuk tussen 2 punten, etc. In je database zet je dan vanaf welk zoomniveau een punt zichtbaar is. Samen met de grootte van je viewpoort zorgt je er dan voor dat je dataset beperkt blijft.

- dubbel inladen zou te voorkomen zijn door een dataset iets groter dan je viewport te bewaren en aleen de ontbrekende delen bij te laden bij scrollen. Zoiets doet Google Maps zelf ook. Je kan je punten zelfs al verdelen in tiles en ook die weer afhankelijk maken van je zoomniveau.

Lijkt me leuk om te maken, maar wel een flinke klus om goed te krijgen.

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

100.000 punten zijn er wel wat veel. Je kan een hoop doen door de polylines te encoden. Maar of het werkbaar wordt daardoor is de vraag.

Voordat je dit kan doen zal je de gps coordinaten eerst moeten omzetten naar lat/lng, maar dat zijn zat tools/functies voor te vinden.

Encoding zorgt ervoor dat je de verschillende punten een zoom waarde geeft ( laat geven ;) ) en op die manier de lijn op een lager zoom niveau uit minder punten bestaat.

google: google maps polyline encoder

Een ander mogelijkheid is de lijn op een eigen kaartlaag te zetten door het door een GIS programma te halen die er dan tegels van maakt. Dit is meer werk, maar voor de eindgebruiker wel de gebruiksvrindelijkste manier. Dacht dat bijvoorbeeld ArcGIS dit wel zou kunnen, maar dat zal je zelf moeten uitzoeken ;)

"True skill is when luck becomes a habit"
SWIS


  • TimDJ
  • Registratie: Februari 2002
  • Laatst online: 21:30
ik heb ondertussen het Douglas-Peucker Polyline Simplification routine gevonden. Hieraan kun je een nauwkeurigheid meegeven hoeveel de nieuwe lijn mag afwijken van het origineel. Zonder zichtbare gevolgen heb ik een testroute van 4000 punten kunnen terugbrengen naar 160. Dat scheelt sowieso al heel wat qua soepelheid. Voor de volledige route ga ik het waarschijnlijk opdelen in verschillende segmenten die pas ingeladen worden op het moment dat deze in de viewport komt.

Ik ga ook nog even kijken naar het encoden.

Freelance Drupal Developer