[C#] Landkaart browsen en steden laten zien

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

  • storeman
  • Registratie: April 2004
  • Laatst online: 01-12 09:22
Ik wil een landkaart (vanaf een jpeg, png desnoods bmp. Het liefst een vector bestand, dit lijkt me echter lastiger) laten zien in een browsebox in mijn C# applicatie.

Hiervoor maak ik een nieuw project aan binnen mijn soluction (Visual Studio). Ik wil dat dit ding bruikbaar wordt als een component. Mijn vraag is nu, hoe kan ik dit het handigste aanpakken.

Zelf zat ik te denken aan het bouwen van een object op basis van een scrollbox, ik heb wat turorials gezien over het maken van zoiets, echter liepen ze niet allemaal even soepel. Als er gebruik gemaakt gaat worden van jpeg oid, dan kan de resolutie natuurlijk behoorlijk oplopen als de kaart ook nog een beetje detail moet tonen.

Om een betere performance te pakken zou ik de kaart natuurlijk kunnen resizen in het geheugen en alleen op de correcte resolutie laten zien.

Het tweede probleem waar ik tegen aan loop, hoe leg ik er een soort van layer overheen zodat ik de steden als een soort control op de kaart zie, deze moeten aanklikbaar worden en meebewegen met de bewegingen van de kaart.

In eerste instantie zal ik een versie ontwikkelen die de kaart nog niet dynamisch laat zien, lees bewegend, maar dat door middel van klikken op knoppen de diverse instellingen kunnen worden gewijzigd.

Heeft iemand bruikbare tips om me op gang te helpen, t zit in m'n hoofd, maar ik krijg er nog maar bar weinig uit.

thnx!

"Chaos kan niet uit de hand lopen"


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
how about zoiets:

je maakt (ala google earth) een plaatje dat bestaat uit meerdere plaatjes. De plaatjes sluiten naadloos aan, en je laad alleen alle plaatjes die zichtbaar zijn?

dan heb je iig je performance probleem opgelost

je tweede probleem is die layer.
Nu kan je standaard components gebruiken en daar een aantal van over elkaar plakken, maar dit lijkt me niet de beste oplossing.
Wanneer je een eigen component maakt (usercontrol) en daar de mousedown, mouseup, mousemove etc. van opvangt kan je die die gebruiken om te 'scrollen'
Je kan dan in je onpaint je plaatjes tekenen, en daaroverheen je wegen, locaties of whatever.

edit:
misschien is er trouwens al zo'n user control, je zal namelijk vast niet de eerste zijn die zoiets wil.

[ Voor 8% gewijzigd door BasieP op 21-04-2007 19:17 ]

This message was sent on 100% recyclable electrons.


  • storeman
  • Registratie: April 2004
  • Laatst online: 01-12 09:22
Ik heb idd wel wat zitten zoeken op google. Er zijn ook al diverse controls, alleen het probleem is de steden. Deze steden hebben een x,y positie op de kaart en worden bepaald dmv een database. Als de stad een control is kan ik gewoon events afvangen, als het een plaatje is zal ik een soort van analyse moeten loslaten op de x en y positie van de muis. Dat gaat weer tegenvallen.

Me googled weer verder...

"Chaos kan niet uit de hand lopen"


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
storeman schreef op zaterdag 21 april 2007 @ 19:22:
Ik heb idd wel wat zitten zoeken op google. Er zijn ook al diverse controls, alleen het probleem is de steden. Deze steden hebben een x,y positie op de kaart en worden bepaald dmv een database. Als de stad een control is kan ik gewoon events afvangen, als het een plaatje is zal ik een soort van analyse moeten loslaten op de x en y positie van de muis. Dat gaat weer tegenvallen.

Me googled weer verder...
je kan toch je ondergrond een map maken, en op je control de mogelijkheid hebben om andere controlls toe te voegen..
dus ik zie het dan zo:

C#:
1
ucMyFirstMapControl.Items.Add(new MyFirstCityObject(iLocationX, iLocationY, sName, etc.));

waarbij 'Items' dan bijv een MyFirstMapControlItemsCollection is. (ja naamgeving he ;))

in .net is het over het algemeen zo:

<controlnaam> <-- je control (i.e. Listview)
<controlnaam>Item <-- item op je control (i.e. ListviewItem)
<controlnaam>ItemsCollection <-- collectie voor items (i.e. ListviewItemsCollection)
etc.

[ Voor 17% gewijzigd door BasieP op 21-04-2007 19:34 ]

This message was sent on 100% recyclable electrons.


  • storeman
  • Registratie: April 2004
  • Laatst online: 01-12 09:22
BasieP schreef op zaterdag 21 april 2007 @ 19:26:
[...]

je kan toch je ondergrond een map maken, en op je control de mogelijkheid hebben om andere controlls toe te voegen..
Ja, goed punt. Ik zat helemaal in layers te denken welke synchroon zouden moeten gaan lopen, ik zag dit al helemaal uit de hand lopen. Jou optie is veel logischer om te doen.

Overigens kom ik net de google API tegen, is ook interessant om te gebruiken.

"Chaos kan niet uit de hand lopen"


  • phYzar
  • Registratie: November 2001
  • Laatst online: 07:09
Ik heb eens zoiets gebouwd voor stage. Kaarten werden gedownload van een (betaalde) webservice. Ik wist de schaal en coördinaten van de kaart, dus had een functie gemaakt die x,y positie van de muis kon vertalen in een coördinaat en een andere functie die kon checken of er zich op die positie iets bevond op de kaart (in mijn geval routes, punten, kaarten). Zo kun je makkelijk aan de hand van muiskliks bepalen wat er op dat punt is en wat je app dan doen moet. Ik toonde de kaart in een zelfgemaakt control en om een beetje performance te houden tekende ik alleen de zaken die in beeld waren en gebruikte ik double buffering om het een beetje snel te houden. (versie 0.1 deed dit nog niet en ging in het ergste geval een aantal keer per seconde duizenden routelijntjes en punten op de kaart tekenen, niet erg vlot :P )

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 02:13

alienfruit

the alien you never expected

Jep, beste manier! Google Maps API kan je niet buiten en website gebruiken.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
SEA >> PRG

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • storeman
  • Registratie: April 2004
  • Laatst online: 01-12 09:22
SEA >> PRG
Ik zat er nog over te twijfelen!
Jep, beste manier! Google Maps API kan je niet buiten en website gebruiken.
Bedoel je dat ik het niet in mijn C# Applicatie kan gebruiken? Er is idd een inet verbinding nodig. Check: http://www.c-sharpcorner....007233733PM/QuickMap.aspx

of: http://www.codeguru.com/c...neous/article.php/c11879/

"Chaos kan niet uit de hand lopen"


  • Boss
  • Registratie: September 1999
  • Laatst online: 01-12 16:27

Boss

+1 Overgewaardeerd

Ik benop mijn werk ook zoiets aan het maken, en dat werkt inderdaad ook met een kaartserver. Als je geen geo0informatie hebt van de gebruikte kaart lukt het je niet om de plaatsen te plotten. Tenzij je de gebruiker de kaart eerst laat calibreren ('klik nu plaats A en nu plaats B aan') maar dat geeft fouten.

Beste is denk ik inderdaad om te kijken of je google maps kan gebruiken of een andere kaartserver.

Op wat voor niveau wil je de kaarten gebruiken? Straat, stad, land? Er zijn wel componenten beschikbaar die in ieder geval op landniveau een wereldkaart kunnen laten zien en dan vervolgens daar op kunnen tekenen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Wil je een eigen control maken of wil je alleen de functionaliteit.
Er is namelijk een Open-Source programma die dat allemaal voor je doet en die heeft ook nog een ActiveX control die je zo op je form kunt kieperen.
Kijk maar eens op www.mapwindow.org
Ik gebruik het zelf ook voor veel toepassingen.
Pagina: 1