Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Camadas WMS, KMZ, KML

Podemos adicionar cadas externas nos nossos mapas Marte e mapas GIS através de entry points "MAPS-LAYERS-EXTERNAL"

Configuração

Criar um entryPoint com o FILE_OR_DOMAIN = MAPS-LAYERS-EXTERNAL

O Conteúdo dele deve ser, como exemplo:


$externalLayers[] = ["type" => "kml",
						"Name" => "Teste KML"
						,"Url" => "/assets/etc/Teste_KML.kml"];

$externalLayers[] = ["type" => "kmz",
						"Name" => "Simova"
						,"Url" => "/assets/etc/Simova.kmz"];

return $externalLayers;

Exemplo de chamada ao portal WMS com api esri


$externalLayers[] = ["Name" => "UPs-Silv-MS-2"
				,"Url" => "https://portalgis.suzano.com.br/server/rest/services/Desenvolvimento/PLANTIO_MS_T1/MapServer/"
				,"Layers" => ['UP']];
return $externalLayers;

Exemplo com conteúdo KML dentro do entryPoint (ou pode vir de um cadastro, api, etc):


$content = "<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
	<name>Teste KML.kml</name>
	<StyleMap id="m_ylw-pushpin">
		<Pair>
			<key>normal</key>
			<styleUrl>#s_ylw-pushpin</styleUrl>
		</Pair>
		<Pair>
			<key>highlight</key>
			<styleUrl>#s_ylw-pushpin_hl</styleUrl>
		</Pair>
	</StyleMap>
	<Style id="s_ylw-pushpin_hl">
		<IconStyle>
			<scale>1.3</scale>
			<Icon>
				<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
			</Icon>
			<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
		</IconStyle>
		<LineStyle>
			<color>ff2c5dfd</color>
			<width>2.9</width>
		</LineStyle>
		<PolyStyle>
			<color>807899f7</color>
			<colorMode>random</colorMode>
		</PolyStyle>
	</Style>
	<Style id="s_ylw-pushpin">
		<IconStyle>
			<scale>1.1</scale>
			<Icon>
				<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
			</Icon>
			<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
		</IconStyle>
		<LineStyle>
			<color>ff2c5dfd</color>
			<width>2.9</width>
		</LineStyle>
		<PolyStyle>
			<color>807899f7</color>
			<colorMode>random</colorMode>
		</PolyStyle>
	</Style>
	<Placemark>
		<name>Teste KML</name>
		<styleUrl>#m_ylw-pushpin</styleUrl>
		<Polygon>
			<tessellate>1</tessellate>
			<outerBoundaryIs>
				<LinearRing>
					<coordinates>
						-49.98030955391177,-20.11809369236751,0 -50.24076996027695,-20.18153182836599,0 -50.54669615017947,-20.5268783615084,0 -50.71789044379601,-21.52543068234906,0 -50.39520524821304,-21.71558335465463,0 -49.39739572821397,-22.27000319158382,0 -48.51880265648861,-21.88970888360517,0 -48.24752126546238,-21.56225003094103,0 -48.92921058980514,-20.99788546319585,0 -48.24565122044976,-20.87519670753311,0 -48.18302886940717,-20.65207767618273,0 -48.21348486326866,-20.44782877579947,0 -48.41990936243072,-20.41806673823675,0 -48.64766134424571,-20.55323262129171,0 -49.09207205295417,-20.53042843073673,0 -49.39189442510747,-20.47850528508822,0 -49.58803631627013,-20.37846921394921,0 -49.98030955391177,-20.11809369236751,0
					</coordinates>
				</LinearRing>
			</outerBoundaryIs>
		</Polygon>
	</Placemark>
</Document>
</kml>";


$externalLayers[] = ["type" => "kmlcontent",
						"Name" => "Simova content"
						,"content" => $content];

return $externalLayers;

Foto

Foi criado um metodo chamado showImage() utilizando a classe nfsUi que prove um componente html capaz de exibir uma imagem baseada na Tabela, Coluna e SEQ_DB da mesma.

Sintaxe básica de implementação


\html\nfsUi::showImage('tabela','coluna','seq_db')

Exemplo de uso em um entrypoint


	array_push($_aLists['apontamentos_semana'],
		array('date_pos'=>$dataApt,
			'date_pos_str'=>$dataApt,
			'plat'=>$latApt,
			'plon'=>$lonApt,
			'popup'=> $objTorre['DESCRICAO'],
			'label'=> $objTorre['DESCRICAO'].(empty($seqApt) ? $seqApt : ' *****'),
			'popup_json'=>json_encode(array(
				'COORDENADAS'=>$objTorre['POSICAO_PLAT'].' '.$objTorre['POSICAO_PLON'],
				'DESCRICAO'=>$objTorre['DESCRICAO'],
				'ATIVIDADE REALIZADA'=>$descAtividade,
				'ENCARREGADO'=>$descEncarregado,
				'DATA'=>$dataApt,
				)
			),
			'popup_end'=>\html\nfsUi::showImage('APONTAMENTO_MO_PRODUCAO','FOTO_THUMBNAIL',$seqDBMoProd)."<div class=text-center'>".\html\nfsUi::buttonCrudSeq('ENERGY_TOWER',$objTorre['SEQ_DB'],$objTorre['DESCRICAO']).' '.\html\nfsUi::buttonCrudFK('APONTAMENTO_MO','SEQ_DB',$seqDB,'','Abrir Apontamentos')."</div>",'icon'=>$towerType[$tipo]['ICON']
		)
	);

Exemplo de entrypoint completo


$_jsonReturn = ['status' => [], 'config' => [], 'layers' => [], 'lists' => []];

 $_config['mapName'] = 'Apontamentos da Semana';

 $user = \core\xDS::getUser();
 $empresa = $user->EMPRESA_ATUAL;
 $local = $user->LOCAL_ATUAL;
 $filial = $user->FILIAL_ATUAL;
 $_aLists['apontamentos_semana'] = [];

 $towerType = \core\TabelaBO::getAllDataToArrayKey("ENERGY_TOWER_TYPE","SEQ_DB");
 $towers = \core\TabelaBO::getAllDataToArrayKey("ENERGY_TOWER","SEQ_DB");

 $sql = "SELECT mo.SEQ_DB, mo.SEQ_DB_DEVICE, mo.INI_DH, concat(f.CRACHA,' - ',f.NOME) as FUNCIONARIO, mo.TORRE_SEQ_DB, a.DESCRICAO, mo.POSICAO_PLAT, mo.POSICAO_PLON, mop.SEQ_DB as SEQ_DB_MO_PROD
 	FROM app_apontamento_mo mo
 	inner join app_atividade a ON mo.ATIVIDADE_SEQ_DB = a.SEQ_DB
 	inner join app_funcionario f on mo.FUNCIONARIO_SEQ_DB = f.SEQ_DB
    inner join app_apontamento_mo_producao mop on mo.SEQ_DB_DEVICE_MASTER_SEQ_DB = mop.SEQ_DB_DEVICE_MASTER_SEQ_DB and mo.seq_db_device_relacional = mop.seq_db_device_relacional
 	where mo.empresa = {$empresa} and mo.filial = {$filial} and mo.local = {$local}
 	and mo.INI_DH between DATE_SUB(CURDATE(),INTERVAL 30 day) and CURDATE()
 	order by INI_DH DESC";

 $aptos = \core\ConexaoDB::query($sql, $params = []);

 foreach($aptos as $apt){

 	$seqDB = $apt['SEQ_DB'];
    $seqDBMoProd = $apt['SEQ_DB_MO_PROD'];
 	$torreSeqDb = $apt['TORRE_SEQ_DB'];
 	$seqApt = $apt['SEQ_DB_DEVICE'];
 	$dataApt = $apt['INI_DH'];
 	$descAtividade = $apt['DESCRICAO'];
 	$descEncarregado = $apt['FUNCIONARIO'];
 	$latApt = $apt['POSICAO_PLAT'];
 	$lonApt = $apt['POSICAO_PLON'];

 	if(!empty($latApt) and !empty($lonApt) and !empty($torreSeqDb)){

 		$objTorre = $towers[$torreSeqDb] ?? null;

 		if (empty($objTorre)) {
 			continue;
 		}

 // 			$sqlTorre = "select et.SEQ_DB as SEQ_DB, et.NOME, et.CODIGO, et.DESCRICAO, et.POSICAO_PLAT, et.POSICAO_PLON, et.POSICAO_DH, et.UPD_DH, et.ENERGY_TOWER_TYPE_SEQ_DB
 // 			from app_energy_tower et where et.ATIVO = 1 and et.DELETED = 0 and (et.POSICAO_PLAT is not null and et.POSICAO_PLON is not null)
 // 			and et.empresa = {$empresa} and et.filial = {$filial} and et.local = {$local} and et.SEQ_DB = {$torre}";
 // 			$torresMO = \core\ConexaoDB::query($sqlTorre, $params = []);


 		$tipo = $objTorre['ENERGY_TOWER_TYPE_SEQ_DB'];

 		array_push($_aLists['apontamentos_semana'],
 			array('date_pos'=>$dataApt,
 				'date_pos_str'=>$dataApt,
 				'plat'=>$latApt,
 				'plon'=>$lonApt,
 				'popup'=> $objTorre['DESCRICAO'],
 				'label'=> $objTorre['DESCRICAO'].(empty($seqApt) ? $seqApt : ' *****'),
 				'popup_json'=>json_encode(array(
 					'COORDENADAS'=>$objTorre['POSICAO_PLAT'].' '.$objTorre['POSICAO_PLON'],
 					'DESCRICAO'=>$objTorre['DESCRICAO'],
 					'ATIVIDADE REALIZADA'=>$descAtividade,
 					'ENCARREGADO'=>$descEncarregado,
 					'DATA'=>$dataApt,
 					)
 				),
 				'popup_end'=>\html\nfsUi::showImage('APONTAMENTO_MO_PRODUCAO','FOTO_THUMBNAIL',$seqDBMoProd)."<div class=text-center'>".\html\nfsUi::buttonCrudSeq('ENERGY_TOWER',$objTorre['SEQ_DB'],$objTorre['DESCRICAO']).' '.\html\nfsUi::buttonCrudFK('APONTAMENTO_MO','SEQ_DB',$seqDB,'','Abrir Apontamentos')."</div>",'icon'=>$towerType[$tipo]['ICON']
 			)
 		);
 	}
 }

 $_config['apontamentos_semana']['showDescricao'] = true;
 array_push($_jsonReturn['layers'], array('name' => 'Apontamentos-da-Semana','list' => 'apontamentos_semana','mtype' => 'dot'));

Imagem do resultado esperado

foto.png