- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I'm developing a map display system. While zoomed in to a certain part of the map I would like to be able to use the mouse to "grab" the image and move it around. When the left mouse button is released the program would then fill in the newly exposed parts of the map. This is routine in proprietory systems of this type, but I don't even know what keywords to start researching in the online help. Does anyone know how to do this? An example?
With many thanks in advance
Mike
With many thanks in advance
Mike
Link Copied
4 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Mike,
I don't think your question is appropriate for this forum. How to change the scale in a mapping application or, more general, zoom and panin awindow is not specific for the Fortran language, nor for the CVF or IVF environment. You should consult the textbooks on geometry and computer graphics, or the manual(s) of the basic graphics library (e. g. OpenGL), or the higher-level library (e. g. MapObjectsby ESRI) used byyour mapping program.
Wolf
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Mike,
There are several areas of this rather high level question that I might be able to help you with, although I'll ask a few questions first.
1. How big are the maps?
2. What machine do you want this to run on?
3. How "snappy" do you want the system to appear?
I ask these because I have developed a viewer for large medical images that does what you want. However, large medical images are 20-80MB of data, where maps can be as large as 1-10GB. Using QuickWin for the image display and Win32 for the GUI, my application was marginally painful on a 500MHz PIII with my images. If you are anywhere near the later size and want snappy performance, you are going to have to write a much lower level (i.e., with C or assembly elements) and much more involved (highly multithreaded, display double-buffered, etc.) application than the one I wrote.
Give us a little more insight into the problem and perhaps some of us will have constructive suggestions.
Cliff
There are several areas of this rather high level question that I might be able to help you with, although I'll ask a few questions first.
1. How big are the maps?
2. What machine do you want this to run on?
3. How "snappy" do you want the system to appear?
I ask these because I have developed a viewer for large medical images that does what you want. However, large medical images are 20-80MB of data, where maps can be as large as 1-10GB. Using QuickWin for the image display and Win32 for the GUI, my application was marginally painful on a 500MHz PIII with my images. If you are anywhere near the later size and want snappy performance, you are going to have to write a much lower level (i.e., with C or assembly elements) and much more involved (highly multithreaded, display double-buffered, etc.) application than the one I wrote.
Give us a little more insight into the problem and perhaps some of us will have constructive suggestions.
Cliff
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Mike,
Once you have the scrolling right, adding panning is easy. I forgot your environment (pure Win32 API if I recall correctly?) but here's a pseudo-code for illustration:
case (WM_LBUTTONDOWN) if (PANNING_MODE) then iOrigMouseX = MouseX iOrigMouseY = MouseY iOrigScrollX = GetScrollPos(SB_HORZ) iOrigScrollY = GetScrollPos(SB_VERT) end if case (WM_MOUSEMOVE) if (PANNING_MODE .and. Left_button_pressed) then call ClientCoordToMapCoord(MouseX, MouseY, iX1, iY1) call ClientCoordToMapCoord(iOrigMouseX, iOrigMouseY, iX2, iY2) SetScrollPos(SB_HORZ, iOrigScrollX + iX2 - iX1) SetScrollPos(SB_VERT, iOrigScrollY + iY2 - iY1) call Redraw() ! Redraw on the basis of new scroll pos end ifI abstracted some of the code, as your setup is probably different; your "ClientCoordToMapCoord" routine should convert client (mouse) coordinates to whatever coordinate system your map is expressed in, taking into account scrollbar offsets and eventual scaling; I assumed that scrollbar measures these map coordinates rather than pixels. I assume you have something like "ClientCoordToMapCoord"? Jugoslav
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Guys,
Thanks for the replies. My question was obviously too vague - I don't need help with calculating geographical coordinates etc, that's easy, it was just the method of "grabbing" the displayed image I had no idea about. Thanks to Jugoslav once again, you have told me exactly what I needed to know.
Regards
Mike
Thanks for the replies. My question was obviously too vague - I don't need help with calculating geographical coordinates etc, that's easy, it was just the method of "grabbing" the displayed image I had no idea about. Thanks to Jugoslav once again, you have told me exactly what I needed to know.
Regards
Mike

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page