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

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


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» – если нет.

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

getCurrentPosition(callback, errorCallback)

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

 1 var locationData;
 2 function preload(){
 3     locationData =  getCurrentPosition();
 4 }
 5 
 6 function setup() {
 7     print(locationData.latitude)
 8     print(locationData.longitude)
 9     print(locationData.accuracy)
10     print(locationData.altitude)
11     print(locationData.altitudeAccuracy)
12     print(locationData.heading)
13     print(locationData.speed)
14 }

getCurrentPosition(callback, errorCallback)

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

1 function setup(){
2     getCurrentPosition(doThisOnLocation)
3 }
4 
5 function doThisOnLocation(position){
6     print("lat: " + position.latitude);    //  "широта: "
7     print("long: " + position.longitude);  //  "долгота: "
8 }

watchPosition(callback, errorCallback, options)

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

 1 // опциональные настройки для watchPosition()
 2 // watchPosition(positionChanged, watchOptions)
 3 
 4 // watchOptions = {
 5 //   enableHighAccuracy: true,
 6 //   timeout: 5000,
 7 //   maximumAge: 0
 8 // };
 9 
10 function setup(){
11     watchPosition(positionChanged)
12 }
13 
14 function positionChanged(position){
15     print("lat: " + position.latitude);    //  "широта: "
16     print("long: " + position.longitude);  //  "долгота: "
17 }

clearWatch()

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

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

intervalCurrentPosition(callback, interval, errorCallback)

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

1 function setup(){
2     intervalCurrentPosition(positionPing, 5000)
3 }
4 
5 function positionPing(position){
6     print("lat: " + position.latitude);    //  "широта: "
7     print("long: " + position.longitude);  //  "долгота: "
8 }

clearIntervalPos()

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

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

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

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

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

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

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

 1 var fence;
 2 function setup(){
 3 
 4 	// опциональные настройки для объекта «fence»:
 5 	// fence = new geoFenceCircle(44.979779, -93.325499, .05, insideTheFence, 'mi', fenceOptions)
 6     // fenceOptions = {
 7     //   enableHighAccuracy: false,
 8     //   timeout: 5000,
 9     //   maximumAge: 0
10     // };
11 
12     fence = new geoFenceCircle(44.979779, -93.325499, 0.05, insideTheFence, outsideTheFence, 'mi')
13 }
14 
15 function insideTheFence(position){
16     print("INlat: " + position.latitude);    //  "широта: "
17     print("INlong: " + position.longitude);  //  "долгота: "
18     print("user is inside of the fence")
19       //  "пользователь находится внутри зоны"
20 }
21 
22 function outsideTheFence(position){
23     print("OUTlat: " + position.latitude);    //  "широта: "
24     print("OUTlong: " + position.longitude);  //  "долгота: "
25     print("user is outside of the fence")
26       //  "пользователь находится вне зоны"
27 }

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

1 var fence;
2 function setup(){
3     fence = new geoFenceCircle(44.979779, -93.325499, 0.05, insideTheFence, outsideTheFence, 'mi')
4 }
5 
6 function mousePressed(){
7 	fence.clear();
8 }

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

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

1 var fence;
2 function setup(){
3  	fence = new geoFenceCircle(44.979779, -93.325499, 0.05)
4 }
5 
6 function draw(){
7 	print(fence.insideFence);
8 }

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

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

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

 1 var fence;
 2 var polygon = [
 3     {lat: 34.045303, lon: -118.334650},  // верхняя левая точка 
 4     {lat: 34.045252, lon: -118.334462},  // верхняя правая точка
 5     {lat: 34.045131, lon: -118.334498},  // нижняя правая точка
 6     {lat: 34.045185, lon: -118.334684},  // нижняя левая точка
 7 ];
 8 function setup(){
 9 
10     // опциональные настройки для объекта «fence» 
11     // fence = new geoFenceCircle(polygon, insideTheFence, 'mi', fenceOptions)
12     // fenceOptions = {
13     //   enableHighAccuracy: false,
14     //   timeout: 5000,
15     //   maximumAge: 0
16     // };
17 
18     fence = new geoFencePolygon(polygon, insideTheFence, outsideTheFence, 'mi')
19 }
20 
21 function insideTheFence(position){
22     print("INlat: " + position.latitude);    //  "широта: "
23     print("INlong: " + position.longitude);  //  "долгота: "
24     print("user is inside of the fence")
25       //  ""пользователь находится внутри зоны"
26 }
27 
28 function outsideTheFence(position){
29     print("OUTlat: " + position.latitude);    //  "широта: "
30     print("OUTlong: " + position.longitude);  //  "долгота: "
31     print("user is outside of the fence")
32       //  ""пользователь находится снаружи зоны"
33 }

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

1 var fence;
2 function setup(){
3     fence = new geoFenceCircle(44.979779, -93.325499, 0.05, insideTheFence, outsideTheFence, 'mi')
4 }
5 
6 function mousePressed(){
7 	fence.clear();
8 }

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

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

 1 var fence;
 2 var polygon = [
 3     {lat: 34.045303, lon: -118.334650},  // верхняя левая точка  
 4     {lat: 34.045252, lon: -118.334462},  // верхняя правая точка
 5     {lat: 34.045131, lon: -118.334498},  // нижняя правая точка
 6     {lat: 34.045185, lon: -118.334684},  // нижняя левая точка
 7 ];
 8 function setup(){
 9     fence = new geoFencePolygon(polygon)
10 }
11 
12 function draw(){
13     print(fence.insideFence);
14 }

См.также

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