Accessing Attributes
You can access the attributes in a vector layer (GeoJSON and others):
var CellValue=TheLayer.GetAttributeCellByHeading("HeadingName",FeatureIndex); // returns a cell (attribute/field) value for a specific feature based on the specified header var NumRows=TheLayer.GetNumAttributeRows(); // returns the number of rows (features) in the layer var ColumnIndex=TheLayer.GetAttributeIndexFromHeading('Heading'); TheLayer.SetAttribute('Heading',FeatureIndex); // sets the value in a cell of the attribute table
The code below shows how the Africa example accesses that data in attribute cells to create the HTML that is inserted into the information element.
// override the Layer's mouse down function to put information in the info box TheMainCountryLayer.MouseDown=function(TheView,RefX,RefY) { // get the feature selected, if any var FeatureIndex=this.In(TheView,RefX,RefY); if (FeatureIndex!=-1) // -1 indicates no feature selected { this.SetSelectedFeature(FeatureIndex); var TheDataset=this.GetDataset(); // get the information for the information box var Name=TheDataset.GetAttributeCellByHeading("name_long",FeatureIndex); var Population=TheDataset.GetAttributeCellByHeading("pop_est",FeatureIndex); var Economy=TheDataset.GetAttributeCellByHeading("economy",FeatureIndex); var Income=TheDataset.GetAttributeCellByHeading("income_grp",FeatureIndex); // convert the informatin to an HTML string var TheHTML="<div>"; TheHTML+="Country: "+Name; TheHTML+="<br>Population: "+Population; TheHTML+="<br>Economy: "+Economy; TheHTML+="<br>Income: "+Income; TheHTML+="</div>"; // set the HTML into the information box SetupInfoBox(TheHTML); } return(true); // we always use the mouse down };
The "SetupInfoBox()" function is a global function that creates the DIV element if needed and then sets it's contents. The function is defined below. You'll also want to add a global variable for the "InfoBox" variable to hold a reference to the info box's DIV element.
/** * Setup the information box and display the specified HTML content * @param TheHTML - The HTML that will be placed in the box */ function SetupInfoBox(TheHTML) { if (InfoBox==null) // if the box has not been created, create it { var TheCanvasElement=TheMainContainer.GetElement("CanvasContainerID"); InfoBox=document.createElement("DIV"); InfoBox.className="CM_InfoBox"; TheCanvasElement.appendChild(InfoBox); CMUtilities.AbsolutePosition(InfoBox,10,10,280,70); } InfoBox.innerHTML=TheHTML; }
Changing the Selected Style
You may have also noticed that the selected country has a white outline with a black fill color when we select it. This is done by setting the "SelectedStyle" for the main country layer.
TheMainCountryLayer.SetSetting("SelectedStyle","fillStyle","black"); TheMainCountryLayer.SetSetting("SelectedStyle","strokeStyle","white"); TheMainCountryLayer.SetSetting("SelectedStyle","lineWidth",2);