Toon posts:

[JAVA] een plattegrond op schaal gebruiken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Afijn, ik moet dus een programma in Java schrijven, waarbij een plattegrond moet kunnen worden ingeladen, waarop Access Point moeten kunnen worden geplaatst. Dit om de dekking van Access Points optimaal te kunnen benutten.

Nu is het de bedoeling dus dat ik een bepaalde straal neem voor het bereik van de Access Points. Het probleem is echter dat ik dus een map moet kunnen inladen met bijvoorbeeld meter-lengtes. Ik moet dus de klant een iets van lengte laten opgeven, waardoor ik de straal van het Access Point moet bereken.

Ik heb alleen geen idee hoe.. centimeters kan ik niet gebruiken, omdat die niks met Pixels te maken hebben. Ik kan ook moeilijk de klant het aantal pixels op laten geven wat bijvoorbeeld 1 meter op de kaart is.

Hoe kan ik nu beste een lengtemaat laten opgeven waardoor ik de straal kan berekenen?

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 23:48

The Eagle

I wear my sunglasses at night

Ik geef je even deze tip (denk dat je dan de rest zelf wel uit kunt vinden): klinkt gek, maar open MS photo editor eens. Open een bestand waarvan je weet dat de resolutie 1024 x 768 of 800x600 is. Je kunt dan onder afbeelding, formaat wijzigen, de eenheden veranderen. Zo zie je precies hoeveel cm x cm bijv 800x600 pixels is als je het uit zou printen. Van daar af kun je dnek ik wel verder rekenen, met schaalberekening etc. Makkelijk is dan ook om de klant de schaal van de plattegrond in te laten geven, of ze (als ze een plattegrond in moeten laten scannen), een vaste inscanresolutie te forceren.

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Verwijderd

Paar vraagjes nog:

1. Waar staat je Geografische data nu? In een database?
sub 1. wat is je brondata, een tdnkaart?
2. Ik neem aan dat alles grafisch gepresenteert moet worden?
3. Is nauwkeurigheid een issue?

Verwijderd

Topicstarter
Verwijderd schreef op 09 September 2003 @ 09:18:
Paar vraagjes nog:

1. Waar staat je Geografische data nu? In een database?
sub 1. wat is je brondata, een tdnkaart?
2. Ik neem aan dat alles grafisch gepresenteert moet worden?
3. Is nauwkeurigheid een issue?
1. De geografische data staat verder nergens, het worden plattegronden van gebouwen, in jpg of gif formaat.

2. Ja

3. Nauwkeurig hoeft niet op de centimeter. Het gaat erom dat als ik een access point ergens neerzet op de plattegrond, ik met behulp van de opgegeven waarden een circel creeer om de Access Point.

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
En er is helemaal geen schaal bekend m.b.t. de kaarten?

Verwijderd

Topicstarter
nee, er staan waarden op, zoals meters etc. Nu wil ik dus iets van een cm nemen, waardoor de klant kan zeggen dat 1 cm gelijk is aan zoveel meter op de kaart, en dat ik daar de grootte van de straal op bouw..

Verwijderd

Hey Sunchaser, dat kan dus niet dan. Ergens moet je een relatie hebben met "the real world". Zolang je dat niet weet is het kansloos om een echte schaal te berekenen. Benaderen zou wel mogelijk zijn; neem bijvoorbeeld aan dat een deur 1.5 meter breed is oid...

overigens werk ik voor een bedrijf dat gespecialiseert is in dit soort oplossingen, kost wat, maar dan krijg je ook wat. Misschien een idee?

Verwijderd

Topicstarter
Verwijderd schreef op 09 September 2003 @ 09:49:
Hey Sunchaser, dat kan dus niet dan. Ergens moet je een relatie hebben met "the real world". Zolang je dat niet weet is het kansloos om een echte schaal te berekenen. Benaderen zou wel mogelijk zijn; neem bijvoorbeeld aan dat een deur 1.5 meter breed is oid...

overigens werk ik voor een bedrijf dat gespecialiseert is in dit soort oplossingen, kost wat, maar dan krijg je ook wat. Misschien een idee?
Mja dat begrijp ik. Maar, als nou ongeveer bekend is hoeveel cm op je scherm een meter op de image is, dan moet je daar toch wel iets mee kunnen doen?

Verwijderd

Dan wel ja, dat zou je als referentie kunnen nemen. Als je zoom 100% is, en 1 cm op je beeld 10 pixels is.. dan moet het wel uit te rekenen zijn wat 1 meter is... (10x10 pixels?). Dan heb je de straal van je cirkeltje, en heb je het voor elkaar..

Verwijderd

Topicstarter
dat bedoel ik, maar je bent dan wel afhankelijk van de beeldscherm resolutie op dat moment, want hoe hoger de resolutie hoe minder cm op je beeld, maar het aantal pixels wijzigt niet. Ik zal dus een resolutie moeten forceren.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ik zal dus een resolutie moeten forceren.
Binnen Win32 kun je gewoon de DPI opvragen van de huidige monitor/resolutiecombinatie. Niet enorm precies maar ruim acceptabel. Ik mag toch hopen dat de Java libs ook zoiets exposen.

Professionele website nodig?


Verwijderd

ja/nee.. De pixels binnen een plaatje (jpg/gif) hebben wel een vaste grote (binnen een afbeelding dan). Dit heeft verder niets te maken met de schermresolutie...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Bovendien levert een geforceerde schermresolutie op mijn 19" CRT een stuk andere DPI op dan de 15" CRT van m'n ouders of de 15" TFT van de buurman of... of.... etc.

Zonder kennis van de grootte van de monitor weet je niets, en die moet je zoals ik hierboven al zei aan het systeem opvragen: dat wordt door de monitordrivers en de graphicsdrivers aangeleverd.

Professionele website nodig?


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Laat de gebruiker gewoon aangeven op het kaartje hoe lang 1 meter is. Als er een schaal verdeling op het kaartje staat kan iemand gewoon een start en eindpunt opgeven. Op dat moment kun jij het aantal pixels bepalen dat 1 meter voorstelt. Gewoon kijken wat de afstand is tussen de beide muisklikken

Begin asjeblieft niet met 'centimeters op het scherm' want daarmee maak je het jezelf alleen maar veel moeilijker. Dan zul je niet alleen de resolutie op moeten vragen, maar ook nog de grootte van het scherm en of het een tft of crt is en of het geheel beeldvullend is of niet enz enz enz.....

[ Voor 6% gewijzigd door Janoz op 09-09-2003 10:16 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 17-08 12:12

Killemov

Ik zoek nog een mooi icooi =)

Maar goed, het rotte is dat je nu voor elk nieuw plaatje de schaal moet gaan vaststellen. Wellicht kun je iets met een vaste lengte laten opnemen in het bronmateriaal.

Hey ... maar dan heb je ook wat!


Verwijderd

Topicstarter
Janoz schreef op 09 September 2003 @ 10:16:
Laat de gebruiker gewoon aangeven op het kaartje hoe lang 1 meter is. Als er een schaal verdeling op het kaartje staat kan iemand gewoon een start en eindpunt opgeven. Op dat moment kun jij het aantal pixels bepalen dat 1 meter voorstelt. Gewoon kijken wat de afstand is tussen de beide muisklikken

Begin asjeblieft niet met 'centimeters op het scherm' want daarmee maak je het jezelf alleen maar veel moeilijker. Dan zul je niet alleen de resolutie op moeten vragen, maar ook nog de grootte van het scherm en of het een tft of crt is en of het geheel beeldvullend is of niet enz enz enz.....
Dit klinkt wel aardig goed ja.. Gewoon 2 coordinaten oplaten geven door middel van klikken, daar het aantal pixels tussen berekenen, en daarop de straal van de access point berekenen.

Even uitwerken dit idee..

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
leuk 'probleem' maar het zal toch wel interactief worden. Zoals Janoz zou ik het doen maar dan niet 1x 2punten aangeven maar een stuk of 3 keer (als dat mogelijk is) anders ga je toch wel grote afwijkingen krijgen. 'aantal 'pixels'' tellen tussen twee punten? Ik neem aan dat je gewoon de afstand bedoelt met een float/double. Zie ook dat de user deftig kan inzoomen om de puntjes goed 'in het midden' van/een pixel kan zetten. Maar dat hangt af van de resolutie van je tekeningen.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
Zoals Janoz al aangaf, hebben pixels en meters zeker wel wat met elkaar te maken. Als je eenmaal weet hoe groot een pixel in werkelijkheid is, ben je klaar. Je hoeft dan in het bijzonder niets te doen met beeldschermresoluties of de grootte van uitgeprinte plaatjes.
Verwijderd schreef op 09 September 2003 @ 09:38:
nee, er staan waarden op, zoals meters etc. Nu wil ik dus iets van een cm nemen, waardoor de klant kan zeggen dat 1 cm gelijk is aan zoveel meter op de kaart, en dat ik daar de grootte van de straal op bouw..
Staat er nu wel een schaalverdeling op ("er staan waarden op, zoals meters etc.") of niet? Dit is nogal onduidelijk. Plaats anders een voorbeeldplaatje van zo'n kaart. Als er een schaalverdeling opstaat ben je heel snel klaar, natuurlijk, want dan weet je direct hoeveel meter 1 pixel is.

Verwijderd

Topicstarter
Ik heb zo snel geen kaarten beschikbaar op de computer. Ik ben namelijk nog bezig met het "denkwerk". Het zijn wel gewoon officiele plattegronden, omdat ze ook al gebruikt worden met een ander programma, waarmee je kunt zien wie waar loopt met zijn wireless laptop. Het zijn dus wel kaarten met een schaal van 1 : ? .

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
Verwijderd schreef op 09 September 2003 @ 10:56:
Ik heb zo snel geen kaarten beschikbaar op de computer. Ik ben namelijk nog bezig met het "denkwerk". Het zijn wel gewoon officiele plattegronden, omdat ze ook al gebruikt worden met een ander programma, waarmee je kunt zien wie waar loopt met zijn wireless laptop. Het zijn dus wel kaarten met een schaal van 1 : ? .
Meestal is op die kaarten ook wel een visuele clue aanwezig over de daadwerkelijke afstanden van stukken op de kaart. Denk bijvoorbeeld aan de indeling in vierkantjes. Hoe het ook zit; nadat je ze hebt ingescanned, weet je dus gewoon hoeveel meter een pixel is. Deze informatie moet je ergens bij je plaatje opslaan; bij veel bestandsformaten kan dat in het bestand zelf, maar hoe dat precies gebeurt is natuurlijk niet echt belangrijk.

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Wat wij doen met een programma dat kaarten toont is een schaal in meters per pixel. Dat zegt een gebruiker op zich niet zo veel, maar omdat wij niet kunnen garanderen hoe groot een pixel is op het scherm, kan je niet veel meer dan dat. Om de gebruiker toch een goede indicatie te geven tekenen we gewoon een nette schaal-indicator erbij.
Alleen als je gaat printen kan je weer een echte schaal garanderen.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Topicstarter
Mja ok. Maar het hoeft niet geheel nauwkeurig, mede gezien het feit dat de dekking van Access Points toch relatief is, en vaak afwijkt door objecten in het pad. Het gaat er dus gewoon om, dat er een opstelling kan worden gemaakt, waardoor we de beste dekking krijgen, zonder dat we veel overlappingen krijgen waardoor de capaciteit van een Access Point maar half gebruikt zal worden.

Verwijderd

Kan je het eea niet in PHP oplossen met GD?
Want je kan toch een plaatje (met een bekende grootte van pixels) lijnen en cirkels maken, dus maakt het mi niet meer uit hoe je scherm grootte ingesteld staat

Verwijderd

Topicstarter
Nou, er is besloten om het in Java te doen, omdat er al meerdere programma's zijn ontwikkeld wat met Access Points te doen hebben, en die zijn ook allemaal in Java. En natuurlijk omdat ik hier stage loop, en nog nooit in Java geprogrammeerd heb, en ik dit wel wilde leren. Ik moet alleen even deze moeilijkheid oplossen.

Het wegschrijven van coordinaten en objecten zal ook wel een klus worden waarschijnlijk maargoed, dat is voor een latere zorg.

  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 18-08 09:00
Het wegschrijven van coordinaten is zeer eenvoudig met de klasse Point(x,y). Objecten zijn niet moeilijker dan in een andere object-georienteerde taal.
Overigens zou ik zeker deze tutorial eens doorlezen voordat ik daar aan begon...

[ Voor 33% gewijzigd door Swinnio op 09-09-2003 12:31 ]

If the world wouldn't suck, we'd all fall off


Verwijderd

Topicstarter
Hm bedankt Swinnio, dan weet ik ook direct waarna ik moet kijken als ik aankom bij dat punt. Ik heb al wel gekeken naar de klasse Vector, waar je meerdere objecten weg zou kunnen schrijven in 1 bestand?

  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 18-08 09:00
Een vector schrijft geen objecten weg in een bestand, maar in het geheugen. Daar kun je dan naar believen objecten aan toevoegen of uit verwijderen.

If the world wouldn't suck, we'd all fall off


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
offtopic:
Een Vector noemen we tegenwoordig liever een ArrayList; juist om dit soort verwarringen te voorkomen. Het is dus een specifieke implementatie die aan de List interface voldoet.

Verwijderd

Topicstarter
Ah ok bedankt :)

Verwijderd

Topicstarter
Afijn.

Ik heb dus nu mijn venster opgedeeld met BorderLayout, en ik heb een "north" en een "center". Nu staan er op de North 2 radiobuttons, en op de Center heb ik een MapPanel, waar de kaart moet komen. Tot nu toe doe ik dit op de volgende manier:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void BuildContent() {
    Container content = getContentPane();
    content.setLayout(new BorderLayout());
    JPanel topPanel = new JPanel(); 
    topPanel.setBackground(Color.white);
    MapPanel mapPanel = new MapPanel();
    ButtonGroup group = new ButtonGroup(); 
    JRadioButton cirkel = new JRadioButton("Cirkel", true);
    JRadioButton eclipse = new JRadioButton("Eclipse", false);
    cirkel.setBackground(Color.white);
    eclipse.setBackground(Color.white);
    cirkel.addItemListener(this);
    eclipse.addItemListener(this);
    group.add(cirkel);
    group.add(eclipse);
    topPanel.add(cirkel);
    topPanel.add(eclipse);
    content.add("North", topPanel);
    content.add("Center", mapPanel);
}


De mapPanel komt alsvolgt tot stand:

code:
1
2
3
4
5
6
7
8
public class MapPanel extends JPanel {
    
    public MapPanel() {
        setLayout(new BorderLayout());
        setBackground(Color.white);
    }
        
}


Maar hoe kan ik nu via een OpenFile box, die al al werkend is overigens, een kaart het beste laten weergeven. Ik moet dus nu nog een Panel bouwen, waarop ik die kaart weergeef, en waarop ik Access Point etc moet gaan plaatsen later..

Iemand een suggestie?
Pagina: 1