пятница, 27 февраля 2009 г.

KML=XML+XSL Разработка веб приложений

Продолжаю серию публикаций о методах генерации KML
Эта статья продолжает http://habrahabr.ru/blogs/google/52009/

Методы создания и редактирования KML

  • Создание внутренними средствами Google Earth

  • Экспорт из ГИС как внутренними средствами, так и с помощью специальных расширений

  • Генерация средствами php, python и другими языками программирования

  • Генерация средствами spreadsheets, pipes, xslt и другими средствами трансформации данных

  • Прямое редактирование текста

Для начала - сайт в студию http://spreadsheetsgis.googlepages.com/ - раздел Editgrid Solutions. В эту часть включены примеры генерации KML методами XSLT

http://www.editgrid.com/ - наиболее мощное решение веб2 для spreadsheets, обладающее такими свойствами, как поддержка скриптов, xslt, простая и строгая базовая структура данных XML.

image

image
image

О возможностях EG попробую написать в другой статье.

Пример использования - вычисление параметров маршрута и создание KML на основе путевых точек.
Решение задачи - http://spreadsheetsgis.googlepages.com/pathcalculator включает создание таблицы исходных данных в Editgrid - http://www.editgrid.com/user/valery35/Pathv3 и добавление вычисляемых полей
расчета дистанции по большой дуге http://en.wikipedia.org/wiki/Great-circle_distance и приведения времени к стандартному виду типа 1997-08-27T10:30:15Z
Все необходимые поля значений у нас есть, можно приступать к формированию преобразования XML в KML

Исходные данные в формате XML http://www.editgrid.com/user/valery35/Pathv3.xml

Copy Source | Copy HTML
  1. <workbook>

  2.   <sheet name="path1" index="0">

  3.     <row row="0">

  4.       <cell col="0"/>

  5.       <cell col="1" type="string" input="R km" value="R km">R km</cell>

  6.       <cell col="2" datetime="19170611T190448" type="float" input="6372.795" value="6372.795">6372.795</cell>

  7.       <cell col="3" type="string" input="Seg" value="Seg">Seg</cell>

  8.       <cell col="4" type="string" input="Sum" value="Sum">Sum</cell>

  9.       <cell col="5"/>

  10.       <cell col="6"/>

  11.       <cell col="7"/>

  12.       <cell col="8"/>

  13.       <cell col="9"/>

  14.       <cell col="10"/>

  15.       <cell col="11"/>

  16.       <cell col="12"/>

  17.       <cell col="13"/>

  18.       <cell col="14"/>

  19.       <cell col="15"/>

  20.     </row>

  21. ...

  22.     <row row="3">

  23.       <cell col="0" type="string" input="Joe" value="Joe">Joe</cell>

  24.       <cell col="1" datetime="19000202T223336" type="float" input="33.94" value="33.94">33.940</cell>

  25.       <cell col="2" datetime="" type="float" input="-118.4" value="-118.4">-118.400</cell>

  26.       <cell col="3" datetime="19130704T174441" type="float" input="=$C$1*atan2(sin(radians(B3))*sin(radians(B4))+cos(radians(B3))*cos(radians(B4))*cos(radians(C4)-radians(C3)),sqrt(power(cos(radians(B4))*sin(radians(C4)-radians(C3)),2)+power(cos(radians(B3))*sin(radians(B4))-sin(radians(B3))*cos(radians(B4))*cos(radians(C4)-radians(C3)),2)))" value="4934.73936727376">4935</cell>

  27.       <cell col="4" datetime="19130704T174441" type="float" input="=E3+D4" value="4934.73936727376">4935</cell>

  28.       <cell col="5" type="string" input="1997-07-17" value="1997-07-17">1997-07-17</cell>

  29.       <cell col="6" type="string" input="10:30:15" value="10:30:15">10:30:15</cell>

  30.       <cell col="7" type="string" input="=concatenate(F4,&quot;T&quot;,G4,&quot;Z&quot;)" value="1997-07-17T10:30:15Z">1997-07-17T10:30:15Z</cell>

  31.       <cell col="8"/>

  32.       <cell col="9"/>

  33.       <cell col="10"/>

  34.       <cell col="11" type="string" input=" " value=" "> </cell>

  35.       <cell col="12"/>

  36.       <cell col="13"/>

  37.       <cell col="14"/>

  38.       <cell col="15"/>

  39.     </row>

  40. ...

  41.   </sheet>

  42. </workbook>



Как видим, внутреннее устройство таблицы довольно простое
Теперь XSLT преобразования.
В Editgrid есть вкладка My data formats, предназначенная для создания XSLT и добавления mime

Мы формируем несколько XSL скриптов

Создаем точки с тегами времени
Код xsl

Copy Source | Copy HTML
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <xsl:stylesheet version="1.0" xmlns="http://earth.google.com/kml/2.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  3.     <xsl:output method="xml" />

  4.     <xsl:template match="/">

  5.         <kml>

  6.             <Document>

  7.                 <name>

  8.                     Spreadsheets name

  9.                 </name>

  10.                 <xsl:apply-templates />

  11.             </Document>

  12.         </kml>

  13.     </xsl:template>

  14.     <xsl:template match="sheet">

  15.         <xsl:for-each select="row[@row >= 2]">

  16.             <Placemark>

  17.                 <Snippet maxLines="0"></Snippet>

  18.                 <name>

  19.                     <xsl:value-of select="cell[@col=0]" />

  20.                 </name>

  21.                 <description>

  22.                     <![CDATA[

  23.                         <b>Length:</b><br>

  24.                         Seg: ]]><xsl:value-of select="format-number(cell[@col=3]/@value,'#.000')" /><![CDATA[ ,km<br>

  25.                         Sum: ]]><xsl:value-of select="format-number(cell[@col=4]/@value,'#.000')" /><![CDATA[ ,km<br>

  26.                     ]]>

  27.                 </description>

  28.                 <Point>

  29.                     <coordinates>

  30.                         <xsl:value-of select="cell[@col=2]/@value" />,

  31.                         <xsl:value-of select="cell[@col=1]/@value" />

  32.                     </coordinates>

  33.                 </Point>

  34.             </Placemark>

  35.         </xsl:for-each>

  36.     </xsl:template>

  37. </xsl:stylesheet>

  38.  



Результирующий KML является результатом трансформации.

Кроме этого, отдельные xsl созданы для
сегментов xsl kml
и общего трека - xsl kml
Отдельные элементы собраны в общий системный KML также с помощью xsl
и к системной области создано сетевое соединение KML xsl являющееся уже внешним пользовательским.
О системной области и сетевом линке постараюсь больше написать в следующих публикациях. Это отдельная тема.

Что мы в результате получили?
Полноценное веб приложение с заданным уровнем доступа.
Пользователи могут дополнять и изменять данные.
KML и вид треков будет меняться автоматически у всех пользователей.
Шаблон для создания новых приложений.
Не написано ни одной строчки кода, кроме xsl


Комментариев нет: