Alexandre, Thanks for your help. I will look through your suggestions most of which at first glance will solve my problems. I'll post back to hear with any subsequent issues.
Thanks again. Regards, Donald -----Original Message----- From: Alexandre Dube [mailto:[email protected]] Sent: 12 January 2009 13:54 To: Donald Kerr Cc: [email protected] Subject: Re: [OpenLayers-Users] Best Practice Donald Kerr wrote: > Hi all, > > I've been working with OpenLayers for a short time and am a bit confused as > to how to approach the task I have due to the fact that there appears to be > so many ways of achieving my goal. > > Currently I get the data from an asp.net asmx web service and parse through > the XML returned. This seems fine in terms of collecting the date but is > very slow in Internet Explorer - no surprise. I want to add markers to a > layer or layers with the ability to destroy each set of markers and reload > them as the user drags the map. I am using the following code: > > //====================================== > for(var i=0; i<nodes.length; ++i) { > var uniqueID = > nodes[i].getElementsByTagName('UniqueID')[0].firstChild.nodeValue; > var category > =nodes[i].getElementsByTagName('Category')[0].firstChild.nodeValue; > var description = > nodes[i].getElementsByTagName('Description')[0].firstChild.nodeValue; > var easting = > nodes[i].getElementsByTagName('GridRef')[0].getElementsByTagName('Easting')[ > 0].firstChild.nodeValue; > var northing = > nodes[i].getElementsByTagName('GridRef')[0].getElementsByTagName('Northing') > [0].firstChild.nodeValue; > var lonLat = new OpenLayers.LonLat(easting, northing); > var feature = new OpenLayers.Feature.Vector( > new OpenLayers.Geometry.Point(lonLat.lon, > lonLat.lat), > { > uniqueID: uniqueID, > category: category, > description: description > } > ); > features.push(feature); > } > myDataLayer.addFeatures(features); > //====================================== > > This all works fine and I am showing different icons based on a StyleMap > that has the following code: > > //====================================== > var lookup = { > 'Full': { externalGraphic: 'images/full.png' }, > 'Partial': { externalGraphic: 'images/partial.png' }, > 'Historic': { externalGraphic: 'images/historic.png' }, > 'MSF': { externalGraphic: 'images/msf.png', graphicWidth: > 25, graphicHeight: 25 } > } > vmdsDataStyleMap.addUniqueValueRules('default', 'category', lookup); > //====================================== > > I can detroy all features in the layer using the following code: > > //====================================== > myDataLayer.removeFeatures(vmdsDataLayer.features); > //====================================== > > I have a list of things that I need to do and I am not sure of the best way > to achieve this is. In the first instance, I want to be able to destroy only > those features that are tagged, for example, 'Full' under 'category'. So > that I can toggle on/off the features that I want to view. Is adding these > all to one layer the best way to achieve this or should I each category to a > new vector layer? Indeed, is a vector layer the best way to achieve this? > > In addidion to the above, I need to do the following: > > 1. Add a label to each icon that I can toggle on and off using some external > javascript. > > That's not currently possible with OpenLayers, but you could display a small popup instead. > 2. Change the css of the above label to show it bigger on mouseover or, if > the labels aren't toggled on, simply show the label onmouseover. > You could use a SelectFeature control for you vector layer with the option hover:true and changing the style of your selected features. The popup could appear as the feature gets selected. http://openlayers.org/dev/examples/select-feature.html http://openlayers.org/dev/examples/select-feature-openpopup.html > 3. Redirect the browser to a different url using the onclick of the icon. > You could do that with a Handler.Feature with the option {click: onFeatureClicked} and created your onFeatureClicked function that open a different url. > 4. I can already set the icon up to be draggable but I need to save new > coordinates to a database onmouseup. I need to capture the icon's 'UniqueID' > onmouseup to do that, I assume. How is this done. > > Is a vector layer suitable for what I am trying to do or is there a better > an easier way to do the above? > A vector layer is suitable, but you need to have you data in some database format, like PostGIS and to use a server application that supports transactions like Insert/Update/Delete, like GeoServer or TinyOWS. > Any help or advice would be very much appreciated. > > Many thanks. > > Regards, > > Donald > > _______________________________________________ > Users mailing list > [email protected] > http://openlayers.org/mailman/listinfo/users > Hope this helps, -- Alexandre Dubé Mapgears www.mapgears.com _______________________________________________ Users mailing list [email protected] http://openlayers.org/mailman/listinfo/users
