пятница, 23 апреля 2010 г.

Скрипты в Google spreadsheets



Недавно стал доступен сервис скриптов в таблицах Google для персональных аккаунтов (gmail).
http://googledocs.blogspot.com/2010/03/apps-script-gallery-for-google.html
Краткое описание
http://www.google.com/google-d-s/scripts/scripts.html
Кроме этого, непосредственно из таблиц стал доступен сервис публикации скриптов в галерею.

Теперь мы можем создавать скрипты для Google Spreadsheets, загружать готовые, публиковать, обмениваться с другими пользователями.
Скрипты имеют богатый набор возможностей. Мы можем использовать всё управление, доступное в сервисах Google.
http://www.google.com/google-d-s/scripts/overview.html

Результатом работы скрипта, например, могут быть:
  • новая функция, отсутствующая в стандартном наборе;
  • значение, возвращаемое веб сервисом, в том числе, SOAP, WSDL и другие;
  • управление другими сервисами, например, сайтом, календарем, почтовой рассылкой;
  • автоматическое заполнение таблиц (непосредственное управление нашими spreadsheets);
  • создание пользовательских интерфейсов (custom spreadsheets UI).

Примеры применения скриптов в неогеографии

Расчет расстояния между точками по большой дуге
Copy Source | Copy HTML
  1. function GCD1(lat1, lon1, lat2, lon2) {
  2. // Return Great Circle Distance between points calculation
  3. function radians(a) {
  4. var outNum =Math.PI*a/180;
  5. return outNum;
  6. }
  7. var R = 6372.795;
  8. var d1=Math.sin(radians(lat1))*Math.sin(radians(lat2))+Math.cos(radians(lat1))*Math.cos(radians(lat2))*Math.cos(radians(lon2)-radians(lon1));
  9. var d2=Math.cos(radians(lat2))*Math.sin(radians(lon2)-radians(lon1));
  10. var d3=Math.cos(radians(lat1))*Math.sin(radians(lat2))-Math.sin(radians(lat1))*Math.cos(radians(lat2))*Math.cos(radians(lon2)-radians(lon1));
  11. var len=R*Math.atan2(Math.sqrt(d2*d2+d3*d3),d1);
  12. return len;
  13. }​

Прямое геокодирование
Вернуть KML по названию
Copy Source | Copy HTML
  1. function getKML(placeName) {
  2. // Return KML by placename
  3. if (placeName == "") {
  4. return "You have to write the name the place"
  5. }
  6. var url = "http://maps.google.com/maps/geo?q="+ placeName+"&output=kml";
  7. var response = UrlFetchApp.fetch(url);
  8. var str = response.getContentText();
  9. return str;
  10. }

Вернуть координаты по названию
  1. function getLngLat(placeName) {
  2. // Return LngLatitude by placename
  3. if (placeName == "") {
  4. return "You have to write the name the place"
  5. }
  6. var url = "http://maps.google.com/maps/geo?q="+ placeName+"&output=json";
  7. var response = UrlFetchApp.fetch(url);
  8. var str=eval('(' + response.getContentText() + ')').Placemark[ 0].Point.coordinates;
  9. return str;
  10. }
Вернуть долготу по названию
  1. function getLng(placeName) {
  2. // Return Longitude by placename
  3. if (placeName == "") {
  4. return "You have to write the name the place"
  5. }
  6. var url = "http://maps.google.com/maps/geo?q="+ placeName+"&output=json";
  7. var response = UrlFetchApp.fetch(url);
  8. var str=eval('(' + response.getContentText() + ')').Placemark[ 0].Point.coordinates[ 0];
  9. return str;
  10. }
Вернуть широту по названию
  1. function getLat(placeName) {
  2. // Return Latitude by placename
  3. if (placeName == "") {
  4. return "You have to write the name the place"
  5. }
  6. var url = "http://maps.google.com/maps/geo?q="+ placeName+"&output=json";
  7. var response = UrlFetchApp.fetch(url);
  8. var str=eval('(' + response.getContentText() + ')').Placemark[ 0].Point.coordinates[1];
  9. return str;
  10. }
Обратное геокодирование

Вернуть адрес по координатам
  1. function getAddress(placeCoord) {
  2. // Return Address by placeCoord (reverse geocoding) placeCoord=lat,lng
  3. if (placeCoord == "") {
  4. return "You have to write the name the place"
  5. }
  6. var url = "http://maps.google.com/maps/geo?q="+ placeCoord+"&output=json";
  7. var response = UrlFetchApp.fetch(url);
  8. var str=eval('(' + response.getContentText() + ')').Placemark[ 0].address;
  9. return str;
  10. }

Пример таблицы расчетов с применением этих скриптов