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);
}