[ Aleksandar Ilić @ 02.05.2005. 14:11 ] @
Nabavio sam plan svog grada i rešio sam da napišem program za digitalno prikazivanje mape. Da skratim, nešto kao Contrast-ov PlanPlus, samo prostije.

E sad, postoji problem na koji način program da organizujem, tj.
1) Učitavanje mape,
2) Približavanje (zumiranje) mape,
3) Pomeranje mape,
4) Iscrtavanje važnih objekata na mapi,
5) Najkraće rastojanje između dve tačke,
6) Organizacija baze podataka
7) I slično...

Još uvek obrađujem mapu, tako da još nisam počeo sa programiranje. Ja već imam neku zamisao u glavi kako bi trebalo da bude, ali bih voleo Vas da čujem na koji način bi Vi to uradili.

U toku dana ili sutra napisaću kako sam to zamislio pa ćemo naći neko optimalno rešenje.
[ _v!rus_ @ 02.05.2005. 14:48 ] @
BeoInfo ili PlanPlus (nisam siguran) imali su mdb (Access DB), u kome su bile sve tacke mape (ukljucujuci koordinate coskova zgrada, raskrsnica) u obliku *koordinata*, program nije imao slike nego je formirao mapu vektorski on-screen. Znam ovo zasigurno jer je pomenuti mdb mogao da se iskoristi za generisanje u AutoCAD-u kompletan grad vektorski (pomocu AutoLISP-a). Bez podataka o koordinatama ne znam kako bi se organizovalo trazenje kucnog broja ili ulice, a pogotovu najkraci put izmadju 2 tacke.
Pomeranje mape se relativno lako moze odraditi cak i ako se mapa sastoji od vise zasebnih slika, samo treba napisati manje-vise jednostavne rutine za manipulaciju zasebnim slikama, i naravno, ne koristiti TCanvas, PlanPlus se *vuce* na bilo kom iole slabijem kompu...
[ Aleksandar Ilić @ 02.05.2005. 17:08 ] @
1) U PlanPlus-u mapa je podeljenja na delove i pri podizanju programa mapa se učitava tako što se ti manji delovi slažu na osnovu njihovih imena. Npr. Postoje 9 delova koja se zovu redom: 10, 11, 12, 20, 21, 22, 30, 31, 32. Mapa stvorena učitavanjem ovih delova u PlanPlus-u bi izgledala ovako:
10 11 12
20 21 22
30 31 32
Ja planiram na isti način da učitam mapu. Koliko je ovo pametno? Ima li bolje, brže rešenje?
Vektorsko formiranje mape mi ne odgovara, jer bi trebao sve te podatke da unosim i ne isplati mi se, a i već imam skoro pola obrađenu mapu u jpeg formatu.

2) U PlanPlus-u su to rešili tako što imaju više verzija (po veličini) delova gradova, i kada izabereš da približiš ono se učita mapa sa većim delovima i obrnuto.

3) Što se tiče pomeranja, pretpostavljam da nije teško. Samo što ja nisam toliko radio sa slikama i grafikom u Delphi-ju pa mi trenutno ništa ne pada na pamet.

Organizacija baze na takav način uopšte nije loša ideja. PlanPlus ima MDB bazu koja je zaštićena šifrom i u njoj se nalaze sve ulice, objekti i ostalo sa koordinatama, kodom slike koja ce se prikazati na mapi, itd...


poruku menjao morlic 2.5.2005.
[ _v!rus_ @ 03.05.2005. 11:58 ] @
Citat:

U PlanPlus-u mapa je podeljenja na delove...

Znam to, zato sam i pomenuo one rutine, nisu problem samo trebaju brzi pikseli, znaci neka gfx lib, ili cak moze i dinamickim kreiranjem vise TImage-a. Sto se tice parcanja mape na delove, sigurno je pametnije zbog ogromne ustede memorije.

Mehanizam bi bio nesto kao:
-imas clientArea gde crtas mapu, area ima odredjene dimenzije koje se menjaju.
-delovi mape imaju odredjene dimenzije.
-imas matricu redosleda slika (ono 11, 12, 13; 21, 22, 23; 31, 32, 33).
-vodis racuna o (realnoj) koordinati gornjeg levog ugla, menja se svakim skrolom mape. Koordinate u matrici nalazis kao
Matrica[Coord.X div PicWidth, Coord.Y div PicHeight]
a poziciju za iscrtavanje na povrsini kao
-Coord.X mod PicWidth, -Coord.Y mod PicHeight
Naravno, ovako se crta samo gornja-leva slika, znaci sve to x4 (pod pretpostavkom da su dimenzije slika takve da se max 4 slike u jednom trenutku mogu crtati). ili mozes i da izracunas koliko iscrtavanja slika je potrebno: (AreaWidth div PicWidth) x (AreaHeight div PicHeight)

-vodi racuna da prilikom skrola realna koordinata ne predje RealnaSirina-SirinaSlike, RealnaVisina-VisinaSlike.

Probaj pa ako negde zapnes, vici.

Ali bilo sta drugo vezano za mapu (objekti, nazivi ulica sa pretragom...) nije moguce bez neke baze ili sl. I jos nesto, podaci za pomenuti mdb nisu unoseni rucno, vec je ceo fajl preuzet... Ako imas ozbiljnu nameru i jaku firmu, otidji do lokalnog katastra i vidi da li oni imaju dig. verziju pa se dogovori.
[ bondja @ 03.05.2005. 12:26 ] @
Za prikaz velikog broja objekata (raskrsca, ulice, kontrolne tacke...), a potrebno je ustedeti memoriju (imas samo nekoliko klasa, ali veliki broj instanci (objekata), koje su iste), treba koristiti Flyweight pattern + Proxy pattern, (Gang Of Four book).

Pozdrav!
[ Aleksandar Ilić @ 11.05.2005. 16:58 ] @
Uvuko sam mapu u CorelDRAW-u i preko nje crtao novu, bukvalno sam precrtavao mapu. Kasnije sam obrisao mapu iza i dobio novu koja je skoro ista kao i mape u PlanPlus-u, što mi je bio i cilj.
Mogu da je snimim kao raster i vektor. Dobio sam savete da sve to radim sa vektorskom grafikom. Mislim da je to bolje rešenje, jer je mapa daleko manje veličine nego u rasterskom obliku, brže se učitava...
Šta ostali misle? Koje komponente da koristim za rad sa vektorskom grafikom u Delphi-ju? Koju literaturu da tražim za Delphi vezanu za grafiku uopšte?
[ broker @ 11.05.2005. 17:06 ] @
Istina, mapa u vektorskom formatu moze da zauzima manje mesta, ali ti je zato potrebna jaka graficka aplikacija koja ce da generise iz toga bitmapu (posto je na ekranu sve bitmapa). Lakse ti je da koristis te unapred napravljene bitmape kao podlogu a da na to docrtavas eventualne objekte koje mozes cuvati u nekoj bazi.

Ako planiras da omogucis korsicenje GPS-a sa tom tvojom mapom, nadji drugu podlogu. Plan Plus nije pogodan za to.
[ Srki_82 @ 12.05.2005. 00:03 ] @
Pogledaj ovaj program http://www.keyhole.com/
Prilicno zanimljivo... nije samo mapa jednog grada... nego malo veca mapica