Program mapa, jak zrobić?

0

Witam,
Mam potrzebę napisania programu, który będzie działał na zasadzie google maps ale w wersji off-line. szperając po necie dowiedziałem się, że mapy googlowskie zawsze będą chciały mieć połączenie z internetem, ktoś zaproponował OpenLayers, ale zielonego pojęcia nie mam o co chodzi.

Może istnieje jakiś komponent, coś w stylu TImage, do którego wstawiłbym wielką bitmapę i mógłbym kontrolować jego zoom i przesuwać tą bitmapę po formie (lub po komponencie).

0

Wsadzasz TImage w TScrollBox i po sprawie.

0

no ok, a czy da się wtedy jakoś kontrolować zoom? tak tylko przesuwać, to dla mnie połowa sukcesu, teraz jeszcze zoom by się przydał :P

A czekaj mam, można to kontrolować za pomocą wielkości samego okna TImage, przy Stretch=true obrazek się "rozszerza" wraz z za szerokim komponentem TImage.

Wystarczy, że obrazek 500x500px damy w TImage 1000x1000 i już on się dwukrotnie poszerzy. zmienimy rozmiary z 1000 na 2000 to znowu jakbyśmy dostali zoom 4x

0

Jak dasz w TImage AutoStretch na true to możesz sam kontrolować wymiary:
TImage.Width:=ZoomTImage.Picture.Width;
TImage.Height:=Zoom
TImage.Picture.Height;

0

@_13th_Dragon bez przesadyzmu - takie coś (mapy) się realizuje pisząc własne jej rysowanie na podstawie danych. Dane te to np. dane OpenStreetMap, który pokrywa większość planety. Nieskompresowane dane ważą 150GB :D, można oczywiście wybrać tylko interesującą Cię cześć. Co do rysowania to musisz się zapoznać z jednym z formatów opisu map np. ich wewnętrzny OSM XML

0

@Huherko
Na podstawie http://www.codeproject.com/Articles/14793/How-Google-Map-Works kiedyś napisałem swój program tego typu.

1

Wielka bitmapa to bardzo zły pomysł. O ile przy obrazku np 2000x1000px bedzie to działać OK, tak przy większych obszarach zaczną się problemy z pamięcia i płynnością obsługi. Konieczne bedzie kafelkowanie. Ja robię to tak (C# Windows Mobile):
-mapa pocięta na plasterki 500x500px nazwane zgodnie z szablonem: <nazwa_mapy>_kolumna_wiersz.png
-okno aplikacji ma 800x480px tak więc w skrajnym przypadku potrzeba wyświetlić 6 obrazków (3 kolumny, 2 wiersze)
-na formie mam Picturebox o wymiarach 1500x1000px, na którym rysuję 6 obrazków z powyższego zestawu
-które to mają być obrazki wyliczam z aktualnego położenia Pictureboxa (mozna go przesuwać i skalować ze strechem)
-kiedy podczas przesuwania brzeg Pictureboxa zbliży się do krawędzi okna następuje jego przeskok o 500px w stronę przeciwną do osiąganej krawędzi, a mapa jest przerysowywana zgodnie a bieżącym położeniem, np. jesli mamy załadowane obrazki 1x1 2x1 3x1 1x2 2x2 3x2 i przesuneliśmy mapę w lewo tak że prawy brzeg mapy ma zamiar pojawić sie w oknie (np jest juz 70px od jego krawędzi) wtedy Pictureboxa przesuwam o 500px w prawo i rysuje na nim obrazki 2x1 3x1 4x1 2x2 3x2 4x2
Do tego dochodzi sprawdzanie czy osiągneliśmy koniec mapy, tzn czy są jeszcze jakieś obrazki do załadowania i parę innym kwestii, ale o tym innym razem.
Mam nadzieję, że dobrze to wyjaśniłem

1 użytkowników online, w tym zalogowanych: 0, gości: 1