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

Enviando dados para o mobile

Trabalhando com geofence

OBS.: o campo coordinates, contém os dados de longitude e latitude, nessa ordem. No mobile, existe a função de detecção de área (geofence), esta funcionalidade espera receber primeiro a latitude e depois a longitude. Portanto, no entryPoint de envio de dados é necessário gravar a localização de forma invertida, como no exemplo abaixo:

$result = NFSQueryBuilder::select([
	"t.SEQ_DB id",
	"t.SEQ_DB area",
	"t.DESCRICAO name",
	"t.DESCRICAO description",
	"'ENTER' notify",
	"g.GEOJSON",
	"CONCAT('Entrou na área: ',t.DESCRICAO) enterText",
	"CONCAT('Saiu da área: ',t.DESCRICAO) exitText",
])
->from('CLIENTE','t')
->innerJoin('t', 'GIS_OBJECT', 'g', 'g.SEQ_DB = t.GIS_OBJECT_SEQ_DB')
->orderBy('t.SEQ_DB', 'ASC')
->get();
$_recordsToMobileXMOVA = $result;

foreach($result as $key => $row) {
	$coord = '';
	$obj = json_decode($row['GEOJSON']);
	$objArray = $obj->{'geometry'}->{'coordinates'}[0];
	foreach($objArray as $keyA => $rowA) {		
		$coord = $coord.$rowA[1].',';
		$coord = $coord.$rowA[0].';';
		
	}	
	$_recordsToMobileXMOVA[$key]['coordinates'] = $coord;
	unset($_recordsToMobileXMOVA[$key]['GEOJSON']);
}

Trabalhando com GIS (após a versão 3.3.2)

OBS.: o campo geometry, contém os dados de latitude e longitude, e deve ser enviado como no exemplo:

[geometry] => POLYGON((-17.058126 -46.188592,-17.064034 -46.189278,-17.064814 -46.182672,-17.067767 -46.182887,-17.067932 -46.180227,-17.067849 -46.17598,-17.059726 -46.175079,-17.058126 -46.188592))

Portanto, no entryPoint de envio de dados é necessário utilizar as funções:

  • ST_GeomFromGeoJson: para transformar o conteúdo das coordenadas em objeto
  • ST_AsText: para transformar o objeto em texto

Veja mais em: postgis.net {.is-info}

$_recordsToMobileXMOVA = NFSQueryBuilder::select([
	"t.SEQ_DB id",
	"t.DESCRICAO name",
	"ST_AsText(ST_GeomFromGeoJson(g.GEOJSON)) geometry",
])
->from('CLIENTE','t')
->innerJoin('t', 'GIS_OBJECT', 'g', 'g.SEQ_DB = t.GIS_OBJECT_SEQ_DB')
->orderBy('t.SEQ_DB', 'ASC')
->get();

MOBILE

Trabalhando com geofence

Após a versão 3.3.2, usar exemplo do fluxo 100123104 {.is-warning}

Ver exemplo no fluxo de homologação 100123102

APP

Configurar o atributo geofence

App appCode=Teste
	...

	location
		//Habilita a funcionalidade de geofencing
		geofence

MODEL

Adicionar entidades: _GEOFENCE_LOCATION e _GEOFENCE_PLACE

//------------------------GEOFENCE INICIO--------------------------
_GEOFENCE_LOCATION sync=out
	id inc
	place _GEOFENCE_PLACE inlineData
	location Location inlineData
	entered boolean
	events
		OnGeolocationTransitionEnter
			_area = :place.id
			actionbarsubtitle place.description
		OnGeolocationTransitionExit
			_area = null
			actionbarsubtitle @

_GEOFENCE_PLACE sync=in emptyVerify=false
	id int
	name String
	description String inUpper
	coordinates String
	notify String
	enterText String
	exitText String
	area long
	server name=EQP_Geofence_Place
//------------------------GEOFENCE FIM--------------------------

Trabalhando com GIS

Nova funcionalidade GIS + geometry

Ver exemplo no fluxo de homologação 100123104

APP

Configurar o atributo geofence

App appCode=Teste
	...
	location

MODEL

Adicionar entidade com um campo do tipo Geometry

//------------------------GEOFENCE INICIO--------------------------
Place sync=in emptyVerify=false
	id int
	name String
	geometry Geometry
	server name=EQP_Geometry
//------------------------GEOFENCE FIM--------------------------

Veja mais em: documentação do xMova