[OpenLayers-Users] Start edge and end edge from Popup [solution]

carlofrancesco gentuser at gmail.com
Mon Dec 14 08:20:18 EST 2009



Hi found a solution:
function setStart(x,y){

	var feature = new OpenLayers.Feature.Vector(new
OpenLayers.Geometry.Point(x,y));
	
	start.removeFeatures(start.features);


	start.addFeatures(feature);

	start.drawFeature(start.features, start_style);

}

function setStop(x,y){
	var feature = new OpenLayers.Feature.Vector(new
OpenLayers.Geometry.Point(x,y));
	
	stop.removeFeatures(start.features);
	stop.addFeatures(feature);
	stop.drawFeature(stop.features, start_style);
}
Anyway thanks, bye !

carlofrancesco wrote:
> 
> 
> 
> carlofrancesco wrote:
>> 
>> Hi all. I'm new to this beautiful openLayer. What I am doing i simple:
>> using openlayer + pgrouting.
>> My question is this: I want to set over the map a Start Point and an End
>> Point to pass to pgrouting from a popup. I'll explain better.
>> I'm using the code shown here :
>> http://pgrouting.postlbs.org/wiki/Workshop-RoutingRequest
>> 
>> In detail iìll focus on:
>> 
>> var SinglePoint = OpenLayers.Class.create(); 
>>         SinglePoint.prototype =
>> OpenLayers.Class.inherit(OpenLayers.Handler.Point, { 
>>             createFeature: function(evt) { 
>>                
>> this.control.layer.removeFeatures(this.control.layer.features); 
>>                
>> OpenLayers.Handler.Point.prototype.createFeature.apply(this, arguments); 
>>             } 
>>         }); 
>> 
>>             // controls 
>>             controls = { 
>>               start: new OpenLayers.Control.DrawFeature(start,
>> SinglePoint), 
>>               stop: new OpenLayers.Control.DrawFeature(stop, SinglePoint) 
>>             } 
>>             for (var key in controls) { 
>>                 map.addControl(controls[key]); 
>>             } 
>>         } 
>> 
>>         function toggleControl(element) { 
>>             for (key in controls) { 
>>                 if (element.value == key && element.checked) { 
>>                     controls[key].activate(); 
>>                 } else { 
>>                     controls[key].deactivate(); 
>>                 } 
>>             } 
>>         } 
>> 
>> 
>> 
>> This code works very well, i put start point and end point, i click on
>> compute and it trace the path. All perfect.
>> 
>> But now i want to create a search form like google map, clicking on one
>> result and create a popup that show me name of the street and "start from
>> here" , and "arrive here", same of google map.
>> 
>> So i wrote this code: 
>> 
>> function displayViaOnMap(response){
>> 		 if (response && response.responseXML) {
>> 		 via_selezionata.removeFeatures(via_selezionata.features);
>> 		 // parse the features
>>                 edges =
>> response.responseXML.getElementsByTagName('edge');
>>                 var features = [];	
>> 
>>                 for (var i = 0; i < edges.length; i++) {
>>                     var gid,street,fromleft, toleft, fromright, toright;
>>                        
>> gid=edges[i].getElementsByTagName('id')[0].textContent;
>>                        
>> street=edges[i].getElementsByTagName('street')[0].textContent;
>>                        
>> comune=edges[i].getElementsByTagName('comune')[0].textContent;
>>                        
>> /*fromleft=edges[i].getElementsByTagName('fromleft')[0].textContent;
>>                        
>> toleft=edges[i].getElementsByTagName('toleft')[0].textContent;
>>                        
>> fromright=edges[i].getElementsByTagName('fromright')[0].textContent;
>>                        
>> toright=edges[i].getElementsByTagName('toright')[0].textContent;    */                    
>>                         var g =
>> parser.read(edges[i].getElementsByTagName('wkt')[0].textContent);
>> 
>>                         // non va bene features.push(new
>> OpenLayers.Feature.Vector(g));
>>                         features.push(g);		
>>                 } 
>> 		//questo inserisce all'interno del vettore via le features appena
>> trovate
>> 		 via_selezionata.addFeatures(features);
>> 		 createPopup(features[0],street,comune);
>> 		
>>             }
>> 	}
>> 	
>> function createPopup(feature,street,comune) {
>> 	
>> 	//rimuovo gli altri popup
>>        if(map.popups.length>0){rimuoviPopups();}
>> 	var center= feature.geometry.getBounds().getCenterLonLat();	
>> 	var popup_info =  "" + street +
>>                         "<br>Comune: " + comune +
>>                         "<br>a href='javascript:setStart("+center+")'
>> >Parti da qui /a" +
>>                         "<br>a href='javascript:setStop("+center+")'
>> >Arriva qui /a" + 
>>                         "";
>> 
>>         popup = new OpenLayers.Popup.AnchoredBubble("ViaInfo",
>>                                         center,
>>                                         new OpenLayers.Size(200,100),
>>                                         popup_info,
>>                                         null,
>>                                         true);
>>                                       
>>         popup.setBackgroundColor("#bcd2ee");            
>>         popup.setOpacity(.85);
>>         map.addPopup(popup);   
>>         //mi centro la mappa sulla mia nuvolletta
>>         map.setCenter(center, zoomz+1);    
>> 
>> }
>> 
>> 
>>  function rimuoviPopups() {   
>>      while( map.popups.length ) {
>>         map.removePopup(map.popups[0]);
>>      }
>> 
>>   }
>> function setStart(x,y){
>> 
>> }
>> function setStop(x,y){
>> 
>> }
>> 
>> 
>> Now i need an help to create function setStart and setStop point.  How i
>> can Initialize SinglePoint defined as an Handler Point to a Point on the
>> map like
>> 
>> 	var point = new OpenLayers.Geometry.Point(x,y);
>> where x,y is coordinate of 
>> feature.geometry.getBounds().getCenterLonLat();
>> Thanks for any advice !! 
>> 
> 
> Up, no suggestion? Thanks again
> 

-- 
View this message in context: http://n2.nabble.com/Start-edge-and-end-edge-from-Popup-tp4151122p4164032.html
Sent from the OpenLayers Users mailing list archive at Nabble.com.



More information about the Users mailing list