Looking for C# winforms control / library to manage different map-based plain image layers
-
Due to my current work, I need to display a plain image in a WinForms control (based on a map, but not from Bing / Google / other APIs) such as a JPEG or PNG in which I need to define/show points of interest. It will also be good to allow showing/hiding these layers of information (e.g. basic plain JPEG map in one layer, points of interest in another layer and dangerous points in a third layer) based on the user's criteria independently as well as allow clicking on these points. In the past, I have performed such a similar work on a web environment by using OpenLayers, which provides a functionality (I think via a plugin/trunk) to work with plain images instead of retrieving the data from a devoted server. But now, I'm a bit lost. I have been taking a look at SharpMap + GdalRasterLayer, but I have not been able to find any good tutorial to perform something similar to what I pretend. Maybe too much complicated for what I pretend, and of course not the target of these gis-based libraries. I hope someone can help me; Thanks in advance.
-
Due to my current work, I need to display a plain image in a WinForms control (based on a map, but not from Bing / Google / other APIs) such as a JPEG or PNG in which I need to define/show points of interest. It will also be good to allow showing/hiding these layers of information (e.g. basic plain JPEG map in one layer, points of interest in another layer and dangerous points in a third layer) based on the user's criteria independently as well as allow clicking on these points. In the past, I have performed such a similar work on a web environment by using OpenLayers, which provides a functionality (I think via a plugin/trunk) to work with plain images instead of retrieving the data from a devoted server. But now, I'm a bit lost. I have been taking a look at SharpMap + GdalRasterLayer, but I have not been able to find any good tutorial to perform something similar to what I pretend. Maybe too much complicated for what I pretend, and of course not the target of these gis-based libraries. I hope someone can help me; Thanks in advance.
I don't know of any 3rd. party library for this specific purpose, but, I think a lot of what you may do will depend on the nature of the whatever-objects you need to overlay on top of the map to define your "points of interest." Can you describe those objects further: are they icons ? graphic files ? Do they function as Controls, meaning: if you hover over them, click on them, etc., some action is performed ? And, the solution will also depend on what facilities you provide for viewing the underlying map: will the user be able to pan, zoom ? I would guess you'd implement that which requires re-calculation of which overlay objects will appear, and where they will appear. You can certainly create transparent Forms in WinForms and carefully position them over some base Form (or Panel, or other ContainerControl, in a base Form) that contains you map as a BackGroundImage. Those transparent Forms can, of course, have objects in them that are not transparent. If you want to look further into doing this yourself in C#, then please post a more complete specification here. good luck, Bill
"What Turing gave us for the first time (and without Turing you just couldn't do any of this) is he gave us a way of thinking about and taking seriously and thinking in a disciplined way about phenomena that have, as I like to say, trillions of moving parts. Until the late 20th century, nobody knew how to take seriously a machine with a trillion moving parts. It's just mind-boggling." Daniel C. Dennett
-
Due to my current work, I need to display a plain image in a WinForms control (based on a map, but not from Bing / Google / other APIs) such as a JPEG or PNG in which I need to define/show points of interest. It will also be good to allow showing/hiding these layers of information (e.g. basic plain JPEG map in one layer, points of interest in another layer and dangerous points in a third layer) based on the user's criteria independently as well as allow clicking on these points. In the past, I have performed such a similar work on a web environment by using OpenLayers, which provides a functionality (I think via a plugin/trunk) to work with plain images instead of retrieving the data from a devoted server. But now, I'm a bit lost. I have been taking a look at SharpMap + GdalRasterLayer, but I have not been able to find any good tutorial to perform something similar to what I pretend. Maybe too much complicated for what I pretend, and of course not the target of these gis-based libraries. I hope someone can help me; Thanks in advance.
Long time ago, I made an application near to your requirements. The main design was:
- An abstract base Shape class having some methods like a void Render(Graphics) and a method for hit testing,bool HitTest(Point).
- Shape classes for custom shapes that are needed on each layer; shapes like point, line, icon, path, etc that inherit from abstract Shape class.
- Each derived shape has its own properties and overrides Render method and renders itself on the graphics object; also overrides HitTest method to check if it contains a point.
- A Layer class that contains a List of Shapes and a void Render(Graphics) and calls render method of each shape. (You can restrict each layer to specific types of shapes, you can implement z-order management for shapes, etc)
- A Map class having and Image and a List<Shapes> and Save and Load to/from file. (You can handle Active layer and active shape easily.)
- A custom control that has a Map property. This control is responsible for rendering layers and handling user mouse interaction and update layers. This control overrides OnPaint and mouse events and enables double buffering.
Hope this idea helps you.