Эта статья продолжает http://habrahabr.ru/blogs/google/52009/
Методы создания и редактирования KML
- Создание внутренними средствами Google Earth
- Экспорт из ГИС как внутренними средствами, так и с помощью специальных расширений
- Генерация средствами php, python и другими языками программирования
- Генерация средствами spreadsheets, pipes, xslt и другими средствами трансформации данных
- Прямое редактирование текста
http://www.editgrid.com/ - наиболее мощное решение веб2 для spreadsheets, обладающее такими свойствами, как поддержка скриптов, xslt, простая и строгая базовая структура данных XML.



Пример использования - вычисление параметров маршрута и создание 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- <workbook>
- <sheet name="path1" index="0">
- <row row="0">
- <cell col="0"/>
- <cell col="1" type="string" input="R km" value="R km">R km</cell>
- <cell col="2" datetime="19170611T190448" type="float" input="6372.795" value="6372.795">6372.795</cell>
- <cell col="3" type="string" input="Seg" value="Seg">Seg</cell>
- <cell col="4" type="string" input="Sum" value="Sum">Sum</cell>
- <cell col="5"/>
- <cell col="6"/>
- <cell col="7"/>
- <cell col="8"/>
- <cell col="9"/>
- <cell col="10"/>
- <cell col="11"/>
- <cell col="12"/>
- <cell col="13"/>
- <cell col="14"/>
- <cell col="15"/>
- </row>
- ...
- <row row="3">
- <cell col="0" type="string" input="Joe" value="Joe">Joe</cell>
- <cell col="1" datetime="19000202T223336" type="float" input="33.94" value="33.94">33.940</cell>
- <cell col="2" datetime="" type="float" input="-118.4" value="-118.4">-118.400</cell>
- <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>
- <cell col="4" datetime="19130704T174441" type="float" input="=E3+D4" value="4934.73936727376">4935</cell>
- <cell col="5" type="string" input="1997-07-17" value="1997-07-17">1997-07-17</cell>
- <cell col="6" type="string" input="10:30:15" value="10:30:15">10:30:15</cell>
- <cell col="7" type="string" input="=concatenate(F4,"T",G4,"Z")" value="1997-07-17T10:30:15Z">1997-07-17T10:30:15Z</cell>
- <cell col="8"/>
- <cell col="9"/>
- <cell col="10"/>
- <cell col="11" type="string" input=" " value=" "> </cell>
- <cell col="12"/>
- <cell col="13"/>
- <cell col="14"/>
- <cell col="15"/>
- </row>
- ...
- </sheet>
- </workbook>
Как видим, внутреннее устройство таблицы довольно простое
Теперь XSLT преобразования.
В Editgrid есть вкладка My data formats, предназначенная для создания XSLT и добавления mime
Мы формируем несколько XSL скриптов
Создаем точки с тегами времени
Код xsl
Copy Source | Copy HTML- <?xml version="1.0" encoding="UTF-8" ?>
- <xsl:stylesheet version="1.0" xmlns="http://earth.google.com/kml/2.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
- <xsl:output method="xml" />
- <xsl:template match="/">
- <kml>
- <Document>
- <name>
- Spreadsheets name
- </name>
- <xsl:apply-templates />
- </Document>
- </kml>
- </xsl:template>
- <xsl:template match="sheet">
- <xsl:for-each select="row[@row >= 2]">
- <Placemark>
- <Snippet maxLines="0"></Snippet>
- <name>
- <xsl:value-of select="cell[@col=0]" />
- </name>
- <description>
- <![CDATA[
- <b>Length:</b><br>
- Seg: ]]><xsl:value-of select="format-number(cell[@col=3]/@value,'#.000')" /><![CDATA[ ,km<br>
- Sum: ]]><xsl:value-of select="format-number(cell[@col=4]/@value,'#.000')" /><![CDATA[ ,km<br>
- ]]>
- </description>
- <Point>
- <coordinates>
- <xsl:value-of select="cell[@col=2]/@value" />,
- <xsl:value-of select="cell[@col=1]/@value" />
- </coordinates>
- </Point>
- </Placemark>
- </xsl:for-each>
- </xsl:template>
- </xsl:stylesheet>
-
Результирующий KML является результатом трансформации.
Кроме этого, отдельные xsl созданы для
сегментов xsl kml
и общего трека - xsl kml
Отдельные элементы собраны в общий системный KML также с помощью xsl
и к системной области создано сетевое соединение KML xsl являющееся уже внешним пользовательским.
О системной области и сетевом линке постараюсь больше написать в следующих публикациях. Это отдельная тема.
Что мы в результате получили?
Полноценное веб приложение с заданным уровнем доступа.
Пользователи могут дополнять и изменять данные.
KML и вид треков будет меняться автоматически у всех пользователей.
Шаблон для создания новых приложений.
Не написано ни одной строчки кода, кроме xsl
Кросспост http://habrahabr.ru/blogs/xslt/52911/
Комментариев нет:
Отправка комментария