JavaScript:Библиотеки/p5.geolocation

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



p5.geolocation[1]

Эта библиотека добавляет в p5.js функционал для определения местоположения пользователя и слежения за ним.

Ее разработка стала возможна благодаря гранту на финансирование планирования и исследований, выданному некоммерческой организацией Forecast Public Art и фондом Jerome Foundation. Особая благодарность Дереку Андерсону.

Полезные советы

  • При работе с библиотекой p5.geolocation необходимо использовать браузерную версию редактора p5.js – чтобы иметь возможность эмулировать и получать локационные события
  • О том, как установить библиотеку в скетч p5.js, читайте по этой ссылке
  • ВАЖНО: Имейте в виду, что Google, Mozilla, Apple и Microsoft в настоящий момент банят некоторые функции на веб-страницах, которые обслуживаются при помощи HTTP, а не HTTPS (от «HTTP secure», т.е. «безопасный HTTP»). Подробнее об этом читайте тут. Пользоваться ими по-прежнему можно, но при наличии «безопасного подключения» (вроде HTTPS), чего можно добиться, получив сертификат SSL. Его можно получить бесплатно на этом сайте или спросить о нем у своего хостинг-провайдера.

Лицензия

Библиотека p5.geolocation имеет лицензию GNU LGPL 2.1.

Функции

geoCheck()

Проверяет наличие функции геолокации. Возвращает «true», если она доступна, и «false» – если нет.

setup(){
	if(geoCheck() == true){
		// доступ к функции геолокации есть
	}else{
		// ошибка в доступе к функции геолокации
	}
}

getCurrentPosition(callback, errorCallback)

Эту функцию можно использовать либо в блоке preload(), либо с функцией обратного вызова (см. пример ниже). Если использовать ее в preload(), она вернет объект, содержащий информацию о широте, долготе, высоте, направлении движения, скорости и т.д.

var locationData;
function preload(){
    locationData =  getCurrentPosition();
}

function setup() {
    print(locationData.latitude)
    print(locationData.longitude)
    print(locationData.accuracy)
    print(locationData.altitude)
    print(locationData.altitudeAccuracy)
    print(locationData.heading)
    print(locationData.speed)
}

getCurrentPosition(callback, errorCallback)

Эту функцию тоже можно использовать с функцией обратного вызова. Она будет запускаться при появлении позиционных данных.

function setup(){
    getCurrentPosition(doThisOnLocation)
}

function doThisOnLocation(position){
    print("lat: " + position.latitude);    //  "широта: "
    print("long: " + position.longitude);  //  "долгота: "
}

watchPosition(callback, errorCallback, options)

Очень похожа на getCurrentPosition(), но за тем исключением, что она будет запускать свою функцию обратного вызова при каждом заметном изменении данных о позиции пользователя. Принимает опциональный объект, содержащий настройки точности, таймаут и время кеширования данных позиционирования.

// опциональные настройки для watchPosition()
// watchPosition(positionChanged, watchOptions)

// watchOptions = {
//   enableHighAccuracy: true,
//   timeout: 5000,
//   maximumAge: 0
// };

function setup(){
    watchPosition(positionChanged)
}

function positionChanged(position){
    print("lat: " + position.latitude);    //  "широта: "
    print("long: " + position.longitude);  //  "долгота: "
}

clearWatch()

Деактивирует работу функции watchPosition().

 
function mousePressed(){
	clearWatch();
	print("watchPosition() cleared")  //  "watchPosition() выключена"
}

intervalCurrentPosition(callback, interval, errorCallback)

Эта функция – гибрид watchPosition() и getCurrentPosition(). Она постоянно с некоторым интервалом запускает функцию getCurrentPosition(). Этот интервал задается (в миллисекундах) в параметре «interval», и по умолчанию в нем задано значение «5000». Эта функция полезна, когда вам нужно более точное слежение за изменением позиции, чем может дать watchPosition().

function setup(){
    intervalCurrentPosition(positionPing, 5000)
}

function positionPing(position){
    print("lat: " + position.latitude);    //  "широта: "
    print("long: " + position.longitude);  //  "долгота: "
}

clearIntervalPos()

Деактивирует работу функции intervalCurrentPosition().

function mousePressed(){
	clearIntervalPos();
	print("intervalCurrentPosition() cleared!")
  //  " intervalCurrentPosition() выключена!"
}

calcGeoDistance(lat1, lon1, lat2, lon2, units)

Рассчитывает расстояние между двумя точками и возвращает результат в единице измерения, заданной в параметре «units». По умолчанию в нем стоит значение «mi» (мили), но вы также, если необходимо, можете задать «km» (километры).

var distance;
function setup(){
	distance = calcGeoDistance(46.785844, -92.015965, 44.940834, -93.311287, 'mi')
	print(distance);
}

geoFenceCircle(latitude, longitude, fenceDistance, insideCallback, outsideCallback, units, options)

Это одновременно функция и конструктор для создания объекта, который задает круговую зону в точке, заданной в параметрах «latitude» и «longitude», и с радиусом, заданным в параметре «FenceDistance». Единица измерения для радиуса задается в параметре «units» (по умолчанию стоит «mi», т.е. мили). Если пользователь находится внутри этой круговой зоны, эта функция при каждом обновлении данных будет запускать функцию обратного вызова, заданную в параметре «insideCallback» (ее параметром является объект, содержащий данные позиционирования). Если пользователь находится вне этой круговой зоны, эта функция с каждым обновлением данных будет запускать функцию обратного вызова, заданную в параметре «outsideCallback». В опциональном параметре «options» задается объект, содержащий настройки точности, таймаут и время кеширования данных позиционирования.

var fence;
function setup(){

	// опциональные настройки для объекта «fence»:
	// fence = new geoFenceCircle(44.979779, -93.325499, .05, insideTheFence, 'mi', fenceOptions)
    // fenceOptions = {
    //   enableHighAccuracy: false,
    //   timeout: 5000,
    //   maximumAge: 0
    // };

    fence = new geoFenceCircle(44.979779, -93.325499, 0.05, insideTheFence, outsideTheFence, 'mi')
}

function insideTheFence(position){
    print("INlat: " + position.latitude);    //  "широта: "
    print("INlong: " + position.longitude);  //  "долгота: "
    print("user is inside of the fence")
      //  "пользователь находится внутри зоны"
}

function outsideTheFence(position){
    print("OUTlat: " + position.latitude);    //  "широта: "
    print("OUTlong: " + position.longitude);  //  "долгота: "
    print("user is outside of the fence")
      //  "пользователь находится вне зоны"
}

Отключить работу функции geoFenceCircle() можно с помощью функции clear():

var fence;
function setup(){
    fence = new geoFenceCircle(44.979779, -93.325499, 0.05, insideTheFence, outsideTheFence, 'mi')
}

function mousePressed(){
	fence.clear();
}

Параметр insideFence для geoFenceCircle()

Это параметр объекта, созданного с помощью функции geoFenceCircle(). В нем хранится булево значение («true» или «false»), обозначающее, находится ли пользователь внутри заданной круговой зоны или нет.

var fence;
function setup(){
 	fence = new geoFenceCircle(44.979779, -93.325499, 0.05)
}

function draw(){
	print(fence.insideFence);
}

geoFencePolygon(ArrayOfObjectsWithLatLong, insideCallback, outsideCallback, units, options)

Это одновременно функция и конструктор для создания объекта, который задает многоугольную зону при помощи массива точек (они задаются при помощи широты и долготы) из объекта в параметре «ArrayOfObjectsWithLatLong». Если пользователь находится внутри зоны, эта функция при каждом обновлении данных будет запускать функцию обратного вызова, заданную в параметре «insideCallback» (ее параметром является объект, содержащий данные о позиционировании). Если пользователь находится вне зоны, эта функция при каждом обновлении данных будет запускать функцию обратного вызова, заданную в параметре «outsideCallback». В опциональном параметре «options» задается объект, содержащий настройки точности, таймаут и время кеширования данных позиционирования. Примечание: Точки, хранящиеся в объекте «ArrayOfObjectsWithLatLong», должны быть расположены в правильном порядке – в таком, как если бы вы рисовали этот многоугольник от руки. Начните с какой-то конкретной точки и шаг за шагом «рисуйте» все X сторон прямоугольника.

В примере ниже показано создание 4-угольной зоны, но на самом деле количество углов в зоне может быть любым.

var fence;
var polygon = [
    {lat: 34.045303, lon: -118.334650},  // верхняя левая точка 
    {lat: 34.045252, lon: -118.334462},  // верхняя правая точка
    {lat: 34.045131, lon: -118.334498},  // нижняя правая точка
    {lat: 34.045185, lon: -118.334684},  // нижняя левая точка
];
function setup(){

    // опциональные настройки для объекта «fence» 
    // fence = new geoFenceCircle(polygon, insideTheFence, 'mi', fenceOptions)
    // fenceOptions = {
    //   enableHighAccuracy: false,
    //   timeout: 5000,
    //   maximumAge: 0
    // };

    fence = new geoFencePolygon(polygon, insideTheFence, outsideTheFence, 'mi')
}

function insideTheFence(position){
    print("INlat: " + position.latitude);    //  "широта: "
    print("INlong: " + position.longitude);  //  "долгота: "
    print("user is inside of the fence")
      //  ""пользователь находится внутри зоны"
}

function outsideTheFence(position){
    print("OUTlat: " + position.latitude);    //  "широта: "
    print("OUTlong: " + position.longitude);  //  "долгота: "
    print("user is outside of the fence")
      //  ""пользователь находится снаружи зоны"
}

Отключить работу функции geoFencePolygon() можно с помощью функции clear():

var fence;
function setup(){
    fence = new geoFenceCircle(44.979779, -93.325499, 0.05, insideTheFence, outsideTheFence, 'mi')
}

function mousePressed(){
	fence.clear();
}

Параметр insideFence для geoFencePolygon()

Это параметр объекта, созданного с помощью функции geoFencePolygon(). В нем хранится булево значение («true» или «false»), которое обозначает, находится ли пользователь внутри заданной зоны или нет.

var fence;
var polygon = [
    {lat: 34.045303, lon: -118.334650},  // верхняя левая точка  
    {lat: 34.045252, lon: -118.334462},  // верхняя правая точка
    {lat: 34.045131, lon: -118.334498},  // нижняя правая точка
    {lat: 34.045185, lon: -118.334684},  // нижняя левая точка
];
function setup(){
    fence = new geoFencePolygon(polygon)
}

function draw(){
    print(fence.insideFence);
}

См.также

Внешние ссылки