Esta é a classe base dos controlos. Um controlo é um componente que é adicionado ao mapa para lhe adicionar comportamento. Um controlo também permite apresentar HTML sobre o mapa. Um exemplo de um controlo são os botões que permitem mudar o tipo de mapa. Estão sobre o mapa e as acções sobre eles modificam o estado do mapa.
Controlos já disponíveis na API:
SAPO.Maps.Control.MiniMap, SAPO.Maps.Control.MapTypeControl, SAPO.Maps.Control.NavigationControl.
Para criar um novo controlo é necessário estender a classe OpenLayers.Control. Uma vez criado o controlo, este pode ser adicionado ao mapa através do método addControl de SAPO.Maps.Map.
A seguir são listados os métodos a redefinir no controlo e as propriedades que podem ser acedidas. Nota: Sempre que redefinir um método no seu custom control, deve sempre invocar a implementação da classe base (OpenLayers.Control).
| Método | Retorno | Descrição |
|---|---|---|
|
void |
Este método é chamado durante o |
|
DOM Element |
É chamado durante o |
activate() |
void |
Este método activa o controlo. Normalmente só é redefinido quando o controlo possui handlers que necessitam de ser também eles activados. |
deactivate() |
void |
Este método desactiva o controlo. Normalmente é redefinido quando o controlo possui handlers que necessitam de ser desactivados. |
destroy() |
void |
Deverá libertar todos os recursos adquiridos (como por exemplo handlers de eventos). É chamado quando a instância de mapa é destruída. |
| Propriedade | Tipo | Descrição |
|---|---|---|
map |
|
Esta propriedade é afectada no método |
div |
DOM Element |
Afectada no método |
OpenLayers.Control e redefinir os métodos necessários.OpenLayers.Control.
function CustomControl(){
this.map = null;
this.div = null;
}
CustomControl.prototype = new OpenLayers.Control();
CustomControl.prototype.CLASS_NAME = 'Custom_Control';
/**
* Method: draw
*
* Parameters:
* {OpenLayers.Pixel} px - The place where the control should be positioned
*/
CustomControl.prototype.draw = function(px){
OpenLayers.Control.prototype.draw.apply(this, arguments);
//Create some basic HTML (just a black rectangle)
var myDiv = document.createElement("div");
myDiv.style.width = "200px";
myDiv.style.height = "200px";
myDiv.style.backgroundColor = "black";
//Append the HTML to the this.div property
this.div.appendChild(myDiv);
//Check if a desired position has been set
if(px){
this.div.style.top = px.y;
this.div.style.left = px.x;
}
else{
//Assume a default position
this.div.style.top = "0px";
this.div.style.left = "0px";
}
//MUST return this.div
return this.div;
}
Passo 2
Criar uma página que contenha um mapa e o controlo criado. O código necessário para adicionar o controlo ao mapa é o seguinte:
<script type="text/javascript">
function init(){
var map = new SAPO.Maps.Map("map");
var ccontrol = new CustomControl();
map.addControl(ccontrol, new OpenLayers.Pixel(100, 100));
}
</script>