Журнал LinuxFormat - перейти на главную

LXF158:Карта ваших прогулок

Материал из Linuxformat
Перейти к: навигация, поиск


КАР­ТА ВА­ШИХ ПРО­ГУ­ЛОК


Про­гул­ки — это хо­ро­шо. И ве­се­ло. А ес­ли вы хо­ти­те по­де­лить­ся свои­ми мар­шру­та­ми, ис­поль­зуя GPS? Иэн Бар­тон по­ка­жет, как это де­ла­ет­ся.

Бу­ду­чи знту­зиа­стом аль­пи­низ­ма и ве­ло­спор­та, я ис­поль­зую GPS-на­ви­га­тор для за­пи­си сво­их мар­шру­тов, а циф­ро­вую ка­ме­ру – что­бы за­пе­чат­леть ви­ды. Желая по­де­лить­ся мар­шру­та­ми, мне на­до по­ка­зать свои пе­ре­ме­ще­ния на кар­те в web-брау­зе­ре. Как и в Google Maps, мне на­до бы­ло при­вя­зать мои фо­то­гра­фии к Point of Interest (POI, ин­те­рес­ное ме­сто) на кар­те и сде­лать так, что­бы фо­то­гра­фии всплы­ва­ли, ко­гда поль­зо­ва­тель щел­ка­ет на POI. Весь про­цесс за­дей­ст­ву­ет ог­ром­ную под­бор­ку ин­ст­ру­мен­тов с от­кры­тым ко­дом – от из­вле­че­ния мар­шру­тов из на­ви­га­то­ра и снаб­же­ния фо­то­гра­фий гео­тэ­га­ми по дан­ным GPS до ото­бра­же­ния и мар­шру­тов, и фо­то на кар­те при по­мо­щи биб­лио­те­ки JavaScript, OpenLayers.

233145.png

Содержание

За­груз­ка дан­ных

Пер­вый шаг – из­вле­чение дан­ных с GPS-на­ви­га­то­ра. У ме­ня Garmin eTrex с по­сле­до­ва­тель­ным пор­том. Од­на­ко мно­гие бо­лее но­вые уст­рой­ст­ва снаб­же­ны пор­та­ми USB. Ес­ли ва­ше уст­рой­ст­во GPS име­ет по­сле­до­ва­тель­ный порт, вам, ве­ро­ят­но, по­на­до­бит­ся сты­ко­вать его с USB че­рез ка­бель. Най­ти та­кой кабель мож­но на eBay.

Для за­груз­ки мар­шру­тов и то­чек сле­до­вания из GPS мы при­меним GPSBabel. Эта программа – настоящий швей­цар­ский нож в ми­ре GPS. Она уме­ет кон­вер­ти­ро­вать пунк­ты мар­шру­та и пу­ти сле­до­вания в са­мые раз­ные фор­ма­ты. Ес­ли вы ис­поль­зуе­те кон­вер­тор из по­сле­до­ва­тель­но­го пор­та в USB, то при под­клю­чении его к ва­ше­му ком­пь­ю­те­ру и за­пуске dmesg вы долж­ны по­лу­чить нечто вро­де

[ 5753.489759] usb 5-1: pl2303 converter now attached to ttyUSB0

[ 5753.489786] usbcore: registered new interface driver pl2303

[ 5753.489789] pl2303: Prolific PL2303 USB to serial adaptor driver

Ис­поль­зуя GPS от Garmin, вы по­лу­чи­те наи­луч­ший ре­зуль­тат при за­груз­ке необ­ра­бо­тан­но­го жур­на­ла трас­сы [tracklog]. Со­хранен­ные жур­на­лы те­ря­ют из­ряд­ную до­лю ин­фор­ма­ции, в том чис­ле от­мет­ки вре­мени. Но ес­ли вы хо­ти­те сде­лать гео­тэ­ги для сво­их фо­то­гра­фий, от­мет­ки вре­мени вам по­на­до­бят­ся!

Луч­ше все­го со­хра­нять дан­ные в фор­ма­те GPX: это наи­бо­лее ши­ро­ко под­дер­жи­вае­мый фор­мат дан­ных GPS. GPSBabel име­ет обо­лоч­ку GUI, на­пи­сан­ную на Qt. GUI стро­ит команд­ную стро­ку, а та пе­ре­да­ет­ся GPSBabel. Ко­ман­да ото­бра­жа­ет­ся в GUI; осво­ив про­грам­му, вы смо­же­те ис­поль­зо­вать команд­ную стро­ку для за­груз­ки мар­шру­тов.

Мно­гие со­вре­мен­ные уст­рой­ст­ва GPS име­ют пор­ты USB и опо­зна­ют­ся как уст­рой­ст­ва мас­со­во­го хранения дан­ных, так что вы смо­же­те за­гру­зить жур­нал с по­мо­щью фай­ло­во­го менед­же­ра.

(thumbnail)
OpenStreetMap по­ка­зы­ва­ет всплы­ваю­щую POI Эл­лы и мар­шрут на­ви­га­то­ра для по­хо­да по Уэль­су.
233145.png

Оп­ре­де­лим до­пуски

Я опо­рож­няю жур­нал из сво­его GPS-на­ви­га­то­ра, толь­ко когда он за­полнит­ся. Од­на­ко я не хо­чу за­гру­жать весь жур­нал це­ли­ком по­сле ка­ж­дой пе­шей или ве­ло­си­пед­ной про­гул­ки. GPSBabel по­зво­ля­ет вы­брать раз­лич­ные фильт­ры, в том чис­ле ин­тер­ва­ла вре­мени, что­бы уточнить, ка­кие дан­ные за­гру­зят­ся из ва­ше­го на­ви­га­то­ра. Сле­дую­щая ко­ман­да за­гру­жа­ет жур­нал для ука­зан­ной да­ты и со­хра­ня­ет его в ви­де фай­ла GPX:

gpsbabel -t -i garmin -f /dev/ttyUSB0 -x track,start=20120212000001,stop=20120212235959 -o gpx track.gpx

Вы – на­стоя­щий про­фи, и показания ча­сов на ва­шем фо­то­ап­па­ра­те сов­па­да­ют с показаниями ча­сов в уст­рой­ст­ве GPS? Кхе... тер­петь не мо­гу в этом соз­на­вать­ся, но у ме­ня почему-то так не по­лу­ча­ет­ся.

Ча­сы в ва­шем на­ви­га­то­ре син­хронизи­ру­ют­ся со спутником GPS, и вре­мя на них всегда точ­ное. Поч­ти все циф­ро­вые ка­ме­ры хра­нят ин­фор­ма­цию о том, когда бы­ла соз­да­на фо­то­гра­фия, в тэ­гах EXIF. Со­от­вет­ст­вую­щие тэ­ги – ‘DateTimeOriginal’, ‘CreateDate’ и ‘TimeCreated’. И все, что вам нуж­но сде­лать – это об­но­вить эти тэ­ги, ис­поль­зуя разницу во вре­мени на ка­ме­ре и уст­рой­ст­ве GPS.

Для уточнения ин­фор­ма­ции EXIF мы восполь­зу­ем­ся ин­ст­ру­мен­том exiftool от Фи­ла Хар­ви [Phil Harvey] (www.sno.phy.queensu.ca/~phil/exiftool). В мо­ем слу­чае ча­сы на ка­ме­ре на 1 час 21 ми­ну­ту опе­ре­жа­ли ча­сы GPS, так что в тэ­гах EXIF мне на­до бы­ло от­нять 1 час 21 ми­ну­ту от указанного там вре­мени. С exiftool, ко­ман­да та­ко­ва:

exiftool “-DateTimeOriginal-=0:00:00 01:21:0” \

“-CreateDate-=0:00:00 01:21:0” \

“-TimeCreated-=0:00:00 01:21:0” *.JPG

Об­ра­ти­те внимание на – пе­ред зна­ком ра­вен­ст­ва: он умень­ша­ет зна­чение вре­мени. Пе­ред об­нов­лением тэ­гов EXIF соз­дай­те ре­зерв­ную ко­пию фо­то­гра­фий, на слу­чай ошиб­ки.

Мож­но так­же соз­дать ко­пию дан­ных EXIF в тек­сто­вом фай­ле для всех фо­то­гра­фий в те­ку­щей ди­рек­то­рии, ко­ман­дой

exiftool -s *.JPG > exif_backup.txt

Ес­ли все по­лу­чит­ся кри­во, вы смо­же­те ис­поль­зо­вать их для восста­нов­ления ис­ход­ных дан­ных.

233145.png

Гео­тэ­ги

Сле­дую­ще­ий этап – при­менить от­мет­ки вре­мени EXIF в фо­то­гра­фи­ях для их кор­ре­ля­ции с жур­на­лом на­ви­га­то­ра. За­тем мы за­пи­шем дан­ные по­ло­жения GPS в со­от­вет­ст­вую­щие тэ­ги EXIF в фо­то­гра­фи­ях. Этот про­цесс из­вес­тен как соз­дание гео­тэ­гов.

Для соз­дания гео­тэ­гов фо­то­гра­фий восполь­зу­ем­ся GPSPrune. Ес­ли вы уже ликвидирова­ли разницу во вре­мени ме­ж­ду ва­ши­ми за­пи­ся­ми GPS и фо­то­гра­фия­ми, пер­вым ша­гом бу­дет за­груз­ка мар­шру­та GPS в GPSPrune.

В ме­ню Photo вы­бе­ри­те Add Photos [до­ба­вить фо­то] и вы­бе­ри­те ди­рек­то­рию, где хра­нят­ся ва­ши фо­то­гра­фии. В ме­ню Photo вы­бе­ри­те Correlate Photos [скор­ре­ли­ро­вать фо­то]. Мно­же­ст­во оп­ций в этом диа­ло­го­вом окне по­зво­лят вам на­стро­ить Correlation Limits [до­пуски], по­сколь­ку есть ве­ро­ят­ность, что дан­ные в ва­шем жур­на­ле GPS и у фо­то­гра­фии в точ­но­сти со­от­вет­ст­ву­ют друг дру­гу. Две са­мых по­лез­ных оп­ции –

» Time Limit [до­пуск по вре­мени]

» Distance Limit [до­пуск по рас­стоянию]

Ес­ли вре­мя или рас­стояние в по­ле EXIF и на трас­се ле­жат в уста­нов­лен­ных ва­ми до­пусках, то GPSPrune бу­дет счи­тать, что фо­то­гра­фия и точ­ка в жур­на­ле сов­па­да­ют.

За­тем GPSPrune от­ме­тит флаж­ка­ми все фо­то, где мож­но при­вес­ти в со­от­вет­ст­вие вре­мя EXIF со вре­менем GPS. Когда вы на­жме­те на OK, GPSPrune от­ме­тит точ­ки, со­от­вет­ст­вую­щие ка­ж­дой фо­то­гра­фии, на ва­шей трас­се. По на­жа­тии на точ­ку поя­вит­ся при­вя­зан­ная к ней фо­то­гра­фия. После этого мож­но впи­сать ши­ро­ту и дол­го­ту в со­от­вет­ст­вую­щие по­ля EXIF ка­ж­дой фо­то­гра­фии. Вы­бе­ри­те Save to EXIF в ме­ню Photo. Ото­бра­зит­ся спи­сок фо­то­гра­фий, в ко­то­рые за­пи­шут­ся дан­ные EXIF.

В по­ряд­ке ме­ры безо­пас­но­сти, мо­же­те вы­брать режим непе­ре­записи ис­ход­ных фо­то­гра­фий – в этом слу­чае они ско­пи­ру­ют­ся в файл с рас­ши­рением _original.

Те­перь GPSPrune бу­дет при­сое­ди­нять но­вые точ­ки сле­до­вания к кон­цу ва­ше­го GPS-фай­ла, с ме­сто­по­ло­жением ка­ж­дой фо­то­гра­фии, от­мет­кой вре­мени и пол­ным пу­тем и именем фай­ла фо­то­гра­фии. При­мер при­ве­ден ниже:

<trkpt lat=”53.06943558”

lon=”-4.18059098”><ele>749</ ele><time>2011-02-20T09:53:57Z</time>

<link href=”/home/ian/Pictures/Holidays/North_Wales/2011-02-North_Wales/20022011085.jpg”>

<text>20022011085.jpg</text> </link></trkpt>

234096.pngСоз­дание миниа­тюр

Вам, естественно, захочется соз­дать миниа­тю­ры для ка­ж­до­го изо­бра­жения, ко­то­рое вы намерены по­ка­зы­вать на кар­те. Есть де­сят­ки спо­со­бов сде­лать это, но мы восполь­зу­ем­ся про­стым скрип­том обо­лоч­ки, ко­то­рый вы­зы­ва­ет про­грам­му кон­вер­ти­ро­вания imagemagick для соз­дания миниа­тюр ши­ри­ной 75px. Миниа­тю­ры будут названы именем ис­ход­ного фай­ла, к которому припишется рас­ши­рение .thumb.

По­мес­ти­те сле­дую­щий скрипт, ко­то­рый на­хо­дит­ся на DVD, в ди­рек­то­рию с вашими фо­то­гра­фия­ми:

FILES=”$@”

for i in $FILES

do

echo “Об­ра­бот­ка изо­бра­же­ния $i ...”

/usr/bin/convert -thumbnail 75 $i thumb.$i done

и за­пус­ти­те

./thumbnail.sh *.JPG

Из всех фай­лов с рас­ши­рением .JPG в этой ди­рек­то­рии соз­да­дут­ся миниа­тю­ры.

233145.png

Ин­те­рес­ные мес­та

Что­бы по­ка­зать ме­сто, где бы­ли сде­ла­ны фо­то­гра­фии на ва­шей кар­те, вы соз­дае­те точ­ку Point of Interest (POI), со­от­вет­ст­вую­щую ка­ж­дой из них. К сча­стью, OpenLayers за­гру­зит дан­ные для ото­бра­жения POI из фай­ла, так что вам не при­дет­ся до­бав­лять все POI вруч­ную. По­ля за­пи­си дан­ных по­ка­за­ны ниже. Уч­ти­те, что по­ля раз­де­ля­ют­ся зна­ка­ми та­бу­ля­ции, а за­пи­си – пе­ре­во­дом стро­ки.

lat lon title description icon iconSize iconOffset.

[Ши­ро­та Дол­го­та На­звание Опи­сание Раз­мер­Знач­ка Сме­щение­Знач­ка]

В тек­сто­вом по­ле мож­но раз­мес­тить URL’ы. Мы бу­дем ис­поль­зо­вать это для ото­бра­жения миниа­тю­ры фо­то­гра­фии, ссыл­ки на пол­но­раз­мер­ную фо­то­гра­фию и тек­ста опи­сания.

Точ­ки сле­до­вания, со­дер­жа­щие дан­ные о фо­то, из­вле­ка­ют­ся из фай­ла GPX, ко­то­рый вы соз­да­ли в про­цес­се соз­дания гео­тэ­гов фо­то­гра­фий с по­мо­щью GPSPrune.

GPSPrune весь­ма удоб­но при­ла­га­ет эти дан­ные к кон­цу ва­ше­го жур­на­ла, и мы лег­ко смо­жем их до­быть с по­мо­щью тек­сто­во­го ре­дак­то­ра. Ско­пи­руй­те дан­ные XML, не за­быв вклю­чить все необ­хо­ди­мые тэ­ги, и вставь­те их в шаб­лон, при­ве­ден­ный ниже. Об­ра­ти­те внимание, что шаб­лон со­дер­жит един­ст­вен­ную точ­ку сле­до­вания, помещенную для демонстрации, ка­ким дол­жен быть пра­виль­ный син­так­сис. Со­храните дан­ные в файл, на­при­мер, photos.gpx.

<?xml version=”1.0” encoding=”UTF-8”?>

<gpx version=”1.0” creator=”GpsPrune v13 activityworkshop.net”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xmlns=”http://www.topografix.com/GPX/1/0”

xsi:schemaLocation=”http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd”>

<name>Your Walk Name</name>

<desc>Export from GPSPrune</desc><trk><name>Your Walk Description</name><number>1</number>

<trkseg>

<trkpt lat=”53.13602777777778” lon=

”-3.9945555555555554”><ele>575</ele><link href=”./images/DSCF1869.JPG”><text>DSCF1869.JPG</text></link></trkpt>

</trkseg>

</trk>

</gpx>

Те­перь кон­вер­ти­ру­ем фо­то­дан­ные XML из соз­дан­но­го ва­ми фай­ла photos.gpx в раз­де­лен­ные зна­ка­ми та­бу­ля­ции дан­ные, ис­поль­зуе­мые для ото­бра­жения POI в OpenLayers. По­сколь­ку дан­ные – это про­сто XML, для кон­вер­ти­ро­вания восполь­зу­ем­ся скрип­том Python. Пол­но­стью его код при­ве­ден на на­шем DVD. За­пусти­те скрипт с DVD и пе­ре­на­правь­те вы­ход­ные дан­ные в файл: ./generate_poi.py > poi.txt. За­меть­те, что в кон­це фай­ла долж­на быть пустая стро­ка, ина­че по­следний POI не бу­дет ото­бра­жать­ся. По­мес­ти­те по­лу­чен­ный файл (poi.txt) в ту самую ди­рек­то­рию, где на­хо­дит­ся страница HTML, ко­то­рая соз­да­ет кар­ту.

(thumbnail)
Об­ра­бот­ка фай­ла с по­мо­щью GPSBabel.
233145.png

Ото­бра­жение на кар­те

Те­перь у вас есть фо­то­гра­фии с гео­тэ­га­ми, миниа­тю­ры и тек­сто­вый файл, со­дер­жа­щий ин­фор­ма­цию для ото­бра­жения фо­то­гра­фий в ви­де POI на кар­те. Конеч­ная ста­дия – соз­дание страницы HTML, со­дер­жа­щей всю ин­фор­ма­цию, необ­хо­ди­мую для за­груз­ки дан­ных кар­ты и ото­бра­жения мар­шру­та и фо­то­гра­фий. Вы мо­же­те ис­поль­зо­вать прак­ти­че­­ски лю­бой web-сер­вер, по­сколь­ку ра­бо­та ве­дет­ся в брау­зе­ре.

Для ото­бра­жения кар­ты и со­пут­ст­вую­щей ин­фор­ма­ции мы бу­дем ис­поль­зо­вать OpenLayers, биб­лио­те­ку JavaScript с от­кры­тым ко­дом для ото­бра­жения кар­то­гра­фи­че­­ских дан­ных. Она ра­бо­та­ет с боль­шин­ст­вом со­вре­мен­ных брау­зе­ров, и она пол­но­стью кли­ент­ская, не тре­бую­щая ника­ких спе­ци­аль­ных про­грамм на сер­ве­ре.

Ис­поль­зуя OpenLayers, вы мо­же­те ото­бра­жать ва­ши дан­ные с по­мо­щью од­но­го и то­го же JavaScript, ис­поль­зуя кар­ты от всех про­вай­де­ров, вклю­чая Google, Ordnance Survey и OpenStreetMap.

Од­на­ко ес­ли вы хо­ти­те ис­поль­зо­вать Google Maps или Ordnance Survey, вам нуж­но бу­дет под­пи­сать­ся, что­бы по­лу­чить ключ API. Внима­тель­но про­чи­тай­те их усло­вия со­гла­шения, по­сколь­ку там есть ряд ог­раничений на ис­поль­зо­вание дан­ных. В про­ти­во­по­лож­ность им, OpenStreetMaps со­вер­шен­но не име­ет ог­раничений.

Вы­бор ис­поль­зуе­мо­го сер­ви­са за­ви­сит от ва­ших тре­бо­ваний. В Ве­ли­ко­бри­тании я уста­но­вил, что Ordnance Survey луч­ше все­го под­хо­дит для ото­бра­жения пе­ше­ход­ных марш­­ру­тов, а OpenStreetMap – для ве­ло­си­пед­ных.

Впро­чем, ис­поль­зуя LayerSwitcher, вид­жет OpenLayers, вы смо­же­те пе­ре­клю­чать свою кар­ту ме­ж­ду раз­ны­ми кар­то­гра­фи­че­­ски­­ми сис­те­ма­ми, и при же­лании ис­поль­зо­вать все три на од­ной и той же web-странице.

Биб­лио­те­ка OpenLayers весь­ма об­шир­на, и на пер­вый взгляд ка­жет­ся про­сто оше­лом­ляю­щей. К сча­стью, в ней мас­са при­ме­ров, по­мо­гаю­щих вам приступить к делу. Мы бу­дем ис­поль­зо­вать соз­дан­ный ва­ми ранее файл GPX, что­бы ото­бра­зить мар­шрут на OpenStreetMap.

Кар­та так­же бу­дет ото­бра­жать POI, ко­то­рые вы соз­да­ли по тем мес­там, где снимали фо­то­гра­фии. При щелч­ке по POI ото­бра­зит­ся всплы­ваю­щее ок­но с под­пи­сью и миниа­тю­рой фо­то­гра­фии. Ес­ли щелк­нуть по миниа­тю­ре, во всплы­ваю­щем окне ото­бра­зит­ся пол­но­раз­мер­ная фо­то­гра­фия.

233145.png

LayerSwitcher

Пер­вый шаг – соз­дать страницу, ко­то­рая ото­бра­жа­ет кар­ту ин­те­ре­сую­щей вас ме­ст­но­сти. Бу­дем ис­поль­зо­вать OpenLayers LayerSwitcher, ко­то­рый по­зво­лит пе­ре­клю­чать­ся ме­ж­ду раз­ны­ми слоя­ми OpenStreetMap. Вы так­же мо­же­те ис­поль­зо­вать ее для пе­ре­клю­чения ме­ж­ду раз­ны­ми кар­та­ми, на­при­мер, Google и OpenStreetMap.

Пол­ный код для web-страницы слиш­ком ве­лик, что­бы мы по­ка­зы­ва­ли его здесь, но он име­ет­ся на DVD. Вот несколь­ко прие­мов и со­ве­тов:

  • Обес­печь­те, что­бы на ва­шей странице был дей­ст­вую­щий DOCTYPE, ина­че нач­нут­ся стран­но­сти.
  • Храните все фай­лы JavaScript на своем сер­ве­ре.
  • Од­на­ко у вас бу­дут все са­мые све­жие за­плат­ки (и но­вые ошиб­ки то­же), ес­ли вы об­ра­ти­тесь к биб­лио­те­ке на уда­лен­ном сай­те.
  • Ис­поль­зуя Google Maps или Ordnance Survey, убе­ди­тесь, что у вас дей­ст­вую­щий ключ API. Ключ при­вя­зан к ва­ше­му до­мен­но­му имени, и на дру­гом сай­те ра­бо­тать не бу­дет.
  • Слой Cycle Map [ве­ло­си­пед­ный] в OpenStreetMaps так­же от­лич­но под­хо­дит для ото­бра­жения дан­ных по пе­ше­ход­ным мар­шру­там, по­сколь­ку ото­бра­жа­ет кон­тур­ные линии.

Код, ото­бра­жаю­щий слой кар­ты, на­хо­дит­ся в од­ном бло­ке JavaScript. Сна­ча­ла вы объ­яв­ляете несколь­ко пе­ре­мен­ных, ко­то­рые со­об­щат кар­те нуж­ную ши­ро­ту и дол­го­ту. Про­чие ат­ри­бу­ты, на­при­мер, ото­бра­жение панелей LayerSwitcher и Pan [па­но­ра­ма] and Zoom [мас­шта­би­ро­вание], так­же долж­ны быть оп­ре­де­ле­ны.

Те­перь до­бавь­те слой, ко­то­рый ото­бра­жа­ет ваш мар­шрут GPX на кар­те в соб­ст­вен­ном слое. ‘Carneddau’ – на­звание мар­шру­та, ко­то­рый ото­бра­жа­ет­ся в LayerSwitcher.

(thumbnail)
GPSPrune об­ра­ба­ты­ва­ет ва­ши мар­шру­ты GPS и на­но­сит фо­то на трас­су. При щелч­ке по точ­ке на кар­те ото­бра­зит­ся со­от­вет­ст­вую­щий пей­заж

Ес­ли вы хо­ти­те ото­бра­зить бо­лее од­но­го марш­ру­та, про­сто ско­пи­руй­те этот раз­дел и за­тем со­от­вет­ст­вую­щим об­ра­зом из­мените па­ра­мет­ры.

// До­ба­вим слой с трас­сой GPX

var lgpx = new OpenLayers.Layer.GML(“Carneddau”, “carneddau.gpx”, {

format: OpenLayers.Format.GPX,

style: {strokeColor: “green”, strokeWidth: 5, strokeOpacity: 0.5},

projection: map.displayProjection});

map.addLayer(lgpx);

Да­лее, оп­ре­де­ли­те слой, ко­то­рый бу­дет ото­бра­жать ва­ши POI:

// Load our Points of Interest

var pois = new OpenLayers.Layer.Text( “POI”,{ location:”poi.txt”,

projection: map.

displayProjection });

map.addLayer(pois);

И, на­конец, мож­но до­ба­вить мар­кер, что­бы по­ка­зать, где вы на­ча­ли и где за­вер­ши­ли мар­шрут.

// До­ба­вим мар­кет на­чаль­но­го пунк­та.

var size = new OpenLayers.Size(21, 25);

var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);

var icon = new OpenLayers.Icon(‘http://www.openstreetmap.org/openlayers/img/marker.png’,size,offset);

layerMarkers.addMarker(new OpenLayers.Marker(lonLat,icon));

Вы долж­ны оп­ре­де­лить div в те­ле страницы, на ко­то­рой хо­ти­те ото­бра­жать кар­ту. Помните, что имя div то же, что и у слоя, ис­поль­зо­ван­но­го для оп­ре­де­ления кар­ты – про­явив недю­жин­ную изо­бре­та­тель­ность, я на­звал его ‘map’:

По­сле за­груз­ки страницы функ­ция body.onloaded() вы­зо­вет функ­цию JavaScript init(), ко­то­рая за­гру­жа­ет дан­ные кар­ты. При щелч­ке на миниа­тю­ре, ото­бра­жен­ной в POI, пол­но­мер­ная фо­то­гра­фия ото­бра­жа­ет­ся во всплы­ваю­щем окне.

Всплы­ваю­щее ок­но соз­да­ет­ся с по­мо­щью JavaScript, ко­то­рый ис­поль­зу­ет URL, за­клю­чен­ный в тек­сто­вом фай­ле с дан­ны­ми для POI.

233145.png

Гра­фи­ки восхо­ж­дения

(thumbnail)
Соз­да­ние гра­фи­ков вос­хо­ж­де­ния для мар­шру­тов ва­ших про­гу­лок вро­де это­го — про­стое и бы­строе уп­раж­не­ние.

Мне час­то хо­чет­ся изо­бра­зить свой мар­шрут GPX в ви­де гра­фи­ка восхо­ж­дения, ко­то­рый ото­бра­жа­ет вы­со­ту на всей про­тя­жен­но­сти мар­шру­та. Ес­ли, как мы ска­за­ли, GPSBabel – это швей­цар­ский нож для дан­ных GPS, то для гра­фи­ков это­го звания досто­ин Gnuplot. Вы мо­же­те соз­дать гра­фик с по­мо­щью GPSPrune (ко­то­рый вы­зы­ва­ет GnuPlot), но ра­бо­та непо­сред­ст­вен­но с GnuPlot бу­дет бо­лее гиб­кой.

Мы восполь­зу­ем­ся скрип­том Python gpxplot от Сер­гея Ас­танина [Sergey Astanin], но ав­тор сде­лал свое от­ветв­ление, до­ба­вив функ­цио­наль­но­сти. Эта вер­сия име­ет­ся на Github по ад­ре­су https://github.com/geekinthesticks/GPX-Tools. Скрипт счи­ты­ва­ет дан­ные из фай­ла GPX и уме­ет да­вать на вы­хо­де гра­фи­ки в раз­ных фор­ма­тах. За­пусти­те ./gpxplot.py –help, что­бы по­зна­ко­мить­ся с оп­ция­ми. Вам так­же нуж­но бу­дет уста­но­вить gnuplot.py, ко­то­рый име­ет­ся в боль­шин­ст­ве ди­ст­ри­бу­ти­вов. Ес­ли у вас не уста­нов­лен gnuplot.py, ис­поль­зо­вание оп­ции --gprint option сгенери­ру­ет скрипт GnuPlot, ко­то­рый мож­но пе­ре­дать на­пря­мую GnuPlot из команд­ной стро­ки.

Вот каким образом на эк­ране соз­да­ет­ся гра­фик мар­шру­та с ука­занием вы­сот:

./gpxplot.py –output-format gnuplot --y-axis elevation \ --x-axis distance --tzname ‘Europe/

London’ \

--imperial –file

arneddau.gpx

По умол­чанию дан­ные вы­во­дят­ся в мет­ри­че­­ской сис­те­ме (вы­со­та – в мет­рах, рас­стояние – в ки­ло­мет­рах); оп­ция --imperial ото­бра­зит вы­со­ты в фу­тах, а рас­стояние в ми­лях.

Ес­ли вы хо­ти­те вы­вес­ти гра­фик в файл изо­бра­жения, а не на эк­ран, ис­поль­зуй­те оп­цию --image, за ко­то­рой долж­но сле­до­вать имя фай­ла. Фор­мат изо­бра­жения оп­ре­де­ля­ет­ся рас­ши­рением имени фай­ла: так, --imagetrack.png соз­даст файл PNG. Дру­гие под­дер­жи­вае­мые фор­ма­ты вы­во­да – GoogleChart, Gprint, table (ко­лон­ки, раз­де­лен­ные про­бе­лом) и orgtable (таб­ли­цы в фор­ма­те org-mode Emacs).

Вре­мя в фай­лах GPX обыч­но ото­бра­жа­ет­ся в фор­ма­те UTC. Же­лая ото­бра­жать ва­ши дан­ные по ме­ст­но­му вре­мени, ис­поль­зуй­те оп­цию --tzname и за­дай­те ча­со­вой по­яс в фор­ма­те ‘Europe/London’.

В GnuPlot мас­са оп­ций для на­строй­ки цве­тов, за­го­лов­ков и про­чих па­ра­мет­ров. Ес­ли вы ре­шите под­пра­вить вы­ход­ные дан­ные, соз­дай­те файл Gprint и от­ре­дак­ти­руй­те его, что­бы по­лу­чить же­лае­мый фор­мат. Файл Gprint мож­но за­тем ис­поль­зо­вать в ка­че­­ст­ве ис­ход­ной ин­фор­ма­ции для GnuPlot при соз­дании гра­фи­ка.

233145.png

За­клю­чение

На на­шем уро­ке мы рас­смот­ре­ли толь­ко осно­вы – вы мо­же­те сде­лать на­мно­го боль­ше, на­при­мер, до­ба­вить слои карт для Ordnance Survey и Google Maps, что­бы ва­ши поль­зо­ва­те­ли мог­ли пе­ре­клю­чать­ся ме­ж­ду раз­ны­ми кар­та­ми.

По­ми­мо все­го ко­да из этой ста­тьи с DVD, вы так­же мо­же­те по­лу­чать об­нов­ления из ре­по­зи­то­рия ав­то­ра на Github по ад­ре­су: https://github.com/geekinthesticks/Plotting-gpx-Data-and-Showing-Geotagged-Photos-Using-OpenLayers. |
Персональные инструменты
купить
подписаться
Яндекс.Метрика