2008/09/17

iPod nano

注文していたピンマイクが届いたので、早速近所でオーディオマッピングを数回試してみました。が、何回やっても上手く行かなかったのでMP3プレーヤーを暫く観察していると、どうやら録音機能に問題があって3分を過ぎた頃に勝手にリセットされたり電源がオフになったりしていたようです。更新用のファームウェアを探してみましたが見つからず、MP3プレーヤーでのオーディオマッピングは中止しました。

仕方が無いのでICレコーダーを探すことにしようかとも一瞬思ったのですが、前に買った物のことを考えるとちょっと気が進みませんでした。そうこうしているうちに、自分が持っている第2世代iPod nanoでも録音ができることが分かりました。

アマゾンで探してみると、iPodで録音するためのアクセサリーはいくつかのサードパーティーから発売されていました。
今回は右から2番目のiTalk Proを選びました。理由は注文時点で一番安かったから。(今は在庫切れで、在庫切れの状態ではその時の値段が表示されないみたいです。)

まぁ、上手く行くのかちょっと心配ですが、届くのが楽しみです。

2008/09/11

Xubuntu

一昨日UbuntuでMarbleを動かした後、もう少しLinuxに触ってみたいなぁなんて思い始め、昨日の午後からウィキペディアを参考にLinuxディストリビューションの選定を始めました。導入先は海外旅行の時に持って行く以外は最近ほとんど触らなくなってしまった古いノートPCです。本当はCentOSVine Linuxとか、SLAX-jaとか、Ubuntuとは系統の違うものを試して見たかったのですが、自分の経験値を考えると敷居が高そうなので、結局Xubuntuを使うことにしました。

早速ダウンロードして焼いたLiveCDを入れてみるといい感じで立ち上がり、このノートPCでも十分使えそうだったので、デスクトップ上に表示されているアイコンをクリックして、そのままインストール作業を開始しました。随分前の話ですがこのノートPCをメインのマシンとして使っていたことがあり、今使っているノートPCを買ってメインのマシンではなくなった時に、雑誌の付録のVine Linuxをインストールしたことがあります。Vine Linuxの方は入れてみたものの、日本語入力で躓いたのでネットワークへの接続にも挑戦せずに放置したまま使っていませんでしたが、実はその時のブートローダやext3とswapのパーティションが残っていたので、ディスクの整理やパーティションの切り直しなどはせずにそのまま使うことにしました。スワップ領域含めて5GBしかないので狭いですけど、Webとちょっとしたコマンドやスクリプトを試すだけということにして、まぁこれで我慢しようと思います。

今回は作業の途中でメモを取らなかったので、残せる情報があまり無いのですが、思い出せるものを書いておこうと思います。

1. 日本語入力

ウィキペディアによると「Xubuntuには、日本語ローカライズ版はない」とのことなので少々不安を感じていましたが、LiveCDで立ち上げるとメニューやデスクトップ上のアイコン名などが日本語で表示されていました。どのように判断しているのかよく分かりませんが、Windowsが立ち上がっている時にLiveCDを入れて再起動の操作をしていたので、それと関係があるのかも知れません。で、インストールの際には言語の選択があるので、そこでは「日本語」を選択します。

インストールが終わると日本語の表示は問題ありませんでしたが、日本語入力はできませんでした。検索すると日本語入力をできるようにするための方法を書かれている人が居たので、リンクを貼っておきます。 上記のページを参考にパッケージを追加すると、メニューの「Applications → 設定」に「Anthy 辞書管理」が追加されていました。でも、全然変換できないと言うか、変換システムが動いている様子がありません。自分が引っ掛かった点は、Caps Lockにしていたためのようです。これはメニューの「Applications → 設定 → SCIM入力メソッドの設定」を起動し、パッケージの追加後に表示されるようになった「IMエンジン → Anthy」をクリック、「ローマ字入力」タブをクリック、「大文字入力時に一時ASCIIモードに切り替える」のチェックを外すことで直るようです。

2. 無線LAN

有線のLANはケーブルを繋いだだけで使えるようになったのですが、無線LANはなかなか繋がりませんでした。使用している無線LANカードはエレコムの「Laneed Wireless PC Card LD-WL11/CB」というCardBus対応のものです。いろいろ試行錯誤したのでやったことやその順序の記憶があやふやなのですが、作業の最初の頃に下のコマンドを打った時に表示されていたような気がするので、今考えると無線LANカードはハードウェア的には自動的に認識されていたように思います。

lspciコマンドの出力結果の一番下に表示されているのが、無線LANカードです。
x20@thinkpad-x20:~$ sudo su
[sudo] password for x20:
root@thinkpad-x20:/home/x20# lspci -v
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 03)
Flags: bus master, medium devsel, latency 64
Memory at f8000000 (32-bit, prefetchable) [size=64M]
Capabilities: [a0] AGP version 1.0

00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03) (prog-if 00 [Normal decode])
Flags: bus master, 66MHz, medium devsel, latency 128
Bus: primary=00, secondary=01, subordinate=01, sec-latency=64
I/O behind bridge: 00002000-00002fff
Memory behind bridge: f4100000-f5ffffff
Prefetchable memory behind bridge: 20000000-200fffff

00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 02)
Flags: bus master, medium devsel, latency 0

00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) (prog-if 80 [Master])
Flags: bus master, medium devsel, latency 64
[virtual] Memory at 000001f0 (32-bit, non-prefetchable) [disabled] [size=8]
[virtual] Memory at 000003f0 (type 3, non-prefetchable) [disabled] [size=1]
[virtual] Memory at 00000170 (32-bit, non-prefetchable) [disabled] [size=8]
[virtual] Memory at 00000370 (type 3, non-prefetchable) [disabled] [size=1]
I/O ports at 1800 [size=16]

00:07.2 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB (rev 01) (prog-if 00 [UHCI])
Flags: bus master, medium devsel, latency 64, IRQ 11
I/O ports at 1820 [size=32]

00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
Flags: medium devsel, IRQ 9

00:08.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev 80)
Subsystem: IBM ThinkPad A/T/X Series
Flags: bus master, medium devsel, latency 168, IRQ 11
Memory at 50000000 (32-bit, non-prefetchable) [size=4K]
Bus: primary=00, secondary=02, subordinate=05, sec-latency=176
Memory window 0: 10000000-13fff000 (prefetchable)
Memory window 1: 14000000-17fff000
I/O window 0: 00001400-000014ff
I/O window 1: 00001c00-00001cff
16-bit legacy interface ports at 0001

00:08.1 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev 80)
Subsystem: IBM ThinkPad A/T/X Series
Flags: bus master, medium devsel, latency 168, IRQ 11
Memory at 50100000 (32-bit, non-prefetchable) [size=4K]
Bus: primary=00, secondary=06, subordinate=09, sec-latency=176
Memory window 0: 18000000-1bfff000 (prefetchable)
Memory window 1: 1c000000-1ffff000
I/O window 0: 00003000-000030ff
I/O window 1: 00003400-000034ff
16-bit legacy interface ports at 0001

00:0a.0 Ethernet controller: Intel Corporation 82557/8/9/0/1 Ethernet Pro 100 (rev 09)
Subsystem: Intel Corporation EtherExpress PRO/100+ MiniPCI
Flags: bus master, medium devsel, latency 66, IRQ 11
Memory at f4010000 (32-bit, non-prefetchable) [size=4K]
I/O ports at 1840 [size=64]
Memory at f4020000 (32-bit, non-prefetchable) [size=128K]
[virtual] Expansion ROM at 20100000 [disabled] [size=1M]
Capabilities: [dc] Power Management version 2

00:0a.1 Serial controller: Xircom Mini-PCI V.90 56k Modem (prog-if 02 [16550])
Subsystem: Intel Corporation Unknown device 2408
Flags: medium devsel, IRQ 11
I/O ports at 1810 [size=8]
Memory at f4011000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [dc] Power Management version 2

00:0b.0 Multimedia audio controller: Cirrus Logic Crystal CS4281 PCI Audio (rev 01)
Subsystem: IBM Unknown device 0183
Flags: bus master, medium devsel, latency 64, IRQ 11
Memory at f4012000 (32-bit, non-prefetchable) [size=4K]
Memory at f4000000 (32-bit, non-prefetchable) [size=64K]
Capabilities: [40] Power Management version 2

01:00.0 VGA compatible controller: ATI Technologies Inc Rage Mobility P/M AGP 2x (rev 64) (prog-if 00 [VGA controller])
Subsystem: IBM Unknown device 0182
Flags: bus master, stepping, medium devsel, latency 66, IRQ 11
Memory at f5000000 (32-bit, non-prefetchable) [size=16M]
I/O ports at 2000 [size=256]
Memory at f4100000 (32-bit, non-prefetchable) [size=4K]
[virtual] Expansion ROM at 20000000 [disabled] [size=128K]
Capabilities: [50] AGP version 1.0
Capabilities: [5c] Power Management version 2

02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8180L 802.11b MAC (rev 20)
Subsystem: Elecom Co Ltd Unknown device b003
Flags: bus master, medium devsel, latency 64, IRQ 11
I/O ports at 1400 [size=256]
Memory at 14000000 (32-bit, non-prefetchable) [size=512]
Capabilities: [50] Power Management version 2

無線LANカードのチップがRealtek Semiconductor社のRTL8180Lと分かりRealtek社のサイトで検索すると「Linux kernel 2.6.X」と書かれたドライバがあったので、なんとなく古そうな感じもしましたがまずはこれをダウンロードしてみることにしました。解凍してできたフォルダにMakefileが含まれていたので分かりもしないくせにそのフォルダでmakeを実行してみると、ファイルだかディレクトリだかが無いというメッセージが出てフォルダの中身が消えてしまい、カードのランプも全然点灯せず結局駄目だったようです。

仕方がないのでndiswrapperを試してみることに。Realtek社のサイトからWindows 98SE/ME/2K/XP用のNDIS5ドライバらしきものをダウンロードして解凍しておきます。「Applications → システム」の「Synaptic パッケージマネージャ」を起動してndiswrapperを検索すると、3つのパッケージ(ndisgtk、ndiswrapper-common、ndiswrapper-utils-1.9)が表示されたので、全部インストール。ここで再起動が必要だったどうかは忘れましたが、「Applications → システム」に「Windows Wireless Drivers」が追加されているので、これを起動。Install New Driverをクリックするとinfファイルの場所を尋ねられるので、先程解凍したフォルダの中にあるNET8180.INFを指定してインストールします。これでカードのランプが一つ点くようになりました。

後はアクセスポイントとの接続設定で、ネットワーク名やワイヤレスセキュリティ(暗号化の種類やキーなど)を設定し、上手く繋がるとカードのランプが1つは点灯、もう1つは点滅するようになります。この辺の手順はアクセスポイント側の設定によっても異なりますし、何度も試行錯誤してよく思い出せないので、残念ながら書けません。

3. スクリーンショット

大したことではありませんが、せっかくなのでついでに。
Ubuntuではスクリーンショットを撮るためのアプリケーションが最初からメニューに登録されていますが、Xubuntuのメニューでは見付かりませんでした。Xubuntuの場合は画面の上下に表示されているパネル(バー)を右クリックし、表示されたメニューの「アイテムを追加」をクリックして、Screenshotというアイテムを追加するとパネルにカメラのアイコンが表示されるようになります。

2008/09/09

Marble

先日、国土数値情報の空港データをインポートするためのPerlスクリプトがLinux上で動かないという問い合わせがありました。私自身はWindows上でしか使ったことが無かったので、OpenStreetMapの日本語メーリングリスト (talk-ja) で尋ねてみると、鉄道データ用のスクリプトFedora8/9とCentOS5.2で特に問題無く動いているとのこと。私も、Mapnikを動かして以来使っていなかったUbuntu8.04で試してみました。久々にUbuntuを使う為、無線LANの調子が悪い中を170MBのファイルをダウンロードしてVMware Playerをアップデートしたり、Ubuntuに224個のアップデートを適用したりしたのですが、CPANから"XML::Simple"をインストールしなければならなかったことを除けば、空港データ用のスクリプトも特に問題無く動きました。

意外にあっさり終わってしまったなと思っていた時に、talk-jaで話題になっていたMarbleのことを思い出しました。Marbleというアプリケーションは、(衛星画像や地図が表面に貼り付けられた)地球をGoogle Earthのようにグリグリと回せるもので、OpenStreetMapの地図の表示もできます。

talk-jaでは「KDE Marble」と紹介されていたのでLinuxをあまり使ったことの無い私はUbuntuには関係の無い話だと思っていましたが、Windows版Qtを使っており、もしかしたらと思って公式サイトを眺めているとQt-onlyでもコンパイルできることが分かったので、私もMarbleを触ってみることにしました。

せっかくなので、MarbleをQt-onlyアプリケーションとしてコンパイルして動かすまでに試行錯誤したことを書いておこうと思います。



1. Qtの導入

QtはMapnikViewerを動かす為に入れてあったので、今回は無し。その時のメモはこちら

2. ソースコードの入手

ソースコード (.tar.gzファイル) はダウンロードページから入手できますが、コンパイルの手引きのページではSVNからの入手を奨めているので、今回はSVNから安定版を入手することにしました。
vmuser@vmuser-desktop:~$ sudo su
[sudo] password for vmuser:
root@vmuser-desktop:/home/vmuser# cd /usr/local/src
root@vmuser-desktop:/usr/local/src# svn co svn://anonsvn.kde.org/home/kde/branches/KDE/4.1/kdeedu/marble


3. cmakeのインストール

cmakeは使ったことが無く、Ubuntu8.04にも入っていなかったのでインストールしました。
vmuser@vmuser-desktop:~$ sudo su
[sudo] password for vmuser:
root@vmuser-desktop:/home/vmuser# apt-get install cmake
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libestraier8 libqdbm14
これらを削除するには 'apt-get autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
cmake
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
4808kB のアーカイブを取得する必要があります。
この操作後に追加で 12.4MB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com hardy/main cmake 2.4.7-1build1 [4808kB]
4808kB を 5min24s で取得しました (14.8kB/s)
未選択パッケージ cmake を選択しています。
(データベースを読み込んでいます ... 現在 141371 個のファイルとディレクトリがインストールされています。)
(.../cmake_2.4.7-1build1_i386.deb から) cmake を展開しています...
cmake (2.4.7-1build1) を設定しています ...


4. buildディレクトリの作成

buildディレクトリを作成して移動します。
root@vmuser-desktop:/usr/local/src# cd ../bin
root@vmuser-desktop:/usr/local/bin# mkdir marble-build
root@vmuser-desktop:/usr/local/bin# cd marble-build
※ディレクトリの作成場所はコンパイルの手引きのページに書いてあるものと異なっています。

5. cmakeの実行

cmakeを実行します。
root@vmuser-desktop:/usr/local/bin/marble-build# cmake -DQTONLY=ON ../../src/marble
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Check size of void*
-- Check size of void* - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
WARNING: This project requires version 2.4.8 of CMake. You are running version 2.4.7.

CMake Error: Qt qmake not found!
-- Configuring done
qmakeが見付からないと怒られたので、cmakeをやり直しました。
root@vmuser-desktop:/usr/local/bin/marble-build# cmake -DQTONLY=ON -DQT_QMAKE_EXECUTABLE=/usr/local/Trolltech/Qt-4.3.4/bin/qmake ../../src/marble
WARNING: This project requires version 2.4.8 of CMake. You are running version 2.4.7.

-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - found
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found.
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - not found.
-- Found Qt-Version 4.3.4

-- Not building with Gpsd Support
-- not building with gpsd support
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/bin/marble-build

root@vmuser-desktop:/usr/local/bin/marble-build# ls
CMakeCache.txt Makefile src
CMakeFiles cmake_install.cmake svnscript.cmake
CPackConfig.cmake cmake_uninstall.cmake tests
CPackSourceConfig.cmake data

root@vmuser-desktop:/usr/local/bin/marble-build#
なんかCMakeのバージョンが古いという警告メッセージが出ていますけど、CMakeはさっきインストールしたばかりでどうしたらいいのか分からないので、そのまま進むことにしました。

6. makeの実行

makeを実行します。
root@vmuser-desktop:/usr/local/bin/marble-build# make
出力メッセージは長いので省略。

7. make installの実行

make installを実行します。
root@vmuser-desktop:/usr/local/bin/marble-build# make install
出力メッセージは長いので省略。

8. marbleの実行

marbleを実行します。
vmuser@vmuser-desktop:~$ marble
marble: error while loading shared libraries: libQtCore.so.4: cannot open shared object file: No such file or directory
vmuser@vmuser-desktop:~$
動きません。ホームディレクトリにlibQtCore.so.4のシンボリックリンクを作ってみましたが、状況は変わらず駄目でした。

cmakeの段階でQT_QTCORE_LIBRARYを指定してやり直し。
root@vmuser-desktop:/usr/local/bin/marble-build# cmake -DQTONLY=ON -DQT_QMAKE_EXECUTABLE=/usr/local/Trolltech/Qt-4.3.4/bin/qmake -DQT_QTCORE_LIBRARY=/usr/local/Trolltech/Qt-4.3.4/lib/libQtCore.so.4.3.4 ../../src/marble > cmakelog.txt
WARNING: This project requires version 2.4.8 of CMake. You are running version 2.4.7.


root@vmuser-desktop:/usr/local/bin/marble-build#
状況は変わらず、これも駄目。

検索して少し調べてみると、環境変数でLD_LIBRARY_PATHを指定すると良いようです。 .bashrc の末尾に追加して試してみると、
LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.3.4/lib
export LD_LIBRARY_PATH
今度は libmarblewidget.so.6 が見付からないと怒られてしまいましたので、.bashrc を修正すると、
LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.3.4/lib:/usr/local/bin/marble-build/src/lib
export LD_LIBRARY_PATH
解決!

2008/09/03

ピンマイク

オーディオマッピングで使おうと思っているMP3プレーヤーには内臓マイクが付いていて、大きさ・形(・色まで)が今使っているGPSロガーとほぼ同じUSBメモリータイプなので、そのまま手に持って使うこともできます。でも、いくら小さいとは言っても両手に1つずつ同じような物を持って歩くのが嫌だったので、外部マイクを買うことにしました。

本当は下の画像(アマゾンの広告)の一番左の物のようなハンドマイクみたいな形で、手元でマイクのOn/Offができる物を探していたのですが、トランシーバー用のハンドマイクしか見付からなかったので諦めました。OpenStreetMapの日本語メーリングリスト (Talk-ja) でピンマイクを使っていると言う人がいたので、私もそのタイプにすることにして探してみると真ん中の画像の物が一番安かったみたいですが、実際には一番右の画像の物を注文しました。理由は単に、私のMP3プレーヤーが2.5Фマイク端子で、一番右の画像の物が3.5Ф→2.5Ф変換プラグ付きだったからです。



注文してから気が付いたのですが、一番右の画像の物はコードの長さが1.8mなんですよね。車に乗っている時は構いませんけど、徒歩の時にはちょっと長いような気がします。MP3プレーヤーを鞄に入れるとしても、1.2m位がちょうど良かったのに。鞄の中でコードがぐちゃぐちゃになるなぁ。まぁ、コード整理用の小物を見付けて来れば済む話ですけど、なるべくなら余計なものを持って歩きたくないですし...

2008/08/30

Audio Mapping

最近のOpenStreetMapの日本語メーリングリスト (Talk-ja) でのやりとりで、Audio Mapping を始めてみると言う人が増えつつあるようです。

実は私も2~3か月前に、オーディオマッピングをやってみようかなと思ったことがありました。その時、数年前に購入してほとんど使わずにほったらかしにしていたSONYのICレコーダーを引っ張り出してみたのですが、電池の液漏れの形跡も無いのに既にお亡くなりになっていました。ICレコーダーに限らず私はそのような小物類を思いつきで買い、直ぐに飽きて放置、久しぶりに使おうと思うと壊れているということが多いのです。また、その時点でオーディオマッピングに関する日本語ドキュメントが未整備ということもあって、新しいICレコーダーを買うのは止めて暫く様子見をすることにしました。

そして、最近のTalk-jaを読んでいるうちに、ふと、以前使っていたMP3プレーヤーに録音機能が付いていたことを思い出しました。オーディオマッピングに関するドキュメントは今も英語のものしかないようですが、それらと過去のTalk-jaを読むと、WAVE形式の音声ファイル (.wav) を使用するとのこと。MP3プレーヤーの取説にはWAVEかMP3で録音できると書いてありました。「なーんだ、これでOKじゃん。なんであの時に思いださなかったんだよ!」ということで、私もオーディオマッピングをやってみようという気がムクムクと起きてきました。これから段々涼しくなっていくので、時期的にはちょうど良かったかも知れませんね。で、これからオーディオマッピングを始めるにあたっての、ごく簡単なまとめというか、備忘録。

オーディオマッピングに必要なもの
GPS
GarminのハンディGPSのような高級機からGPS付き携帯電話や私が使っているような廉価版のGPSロガーなど、最終的にOSMで使用できる(タイムスタンプの入った)gpxファイルを取得できるものなら何でもOK。当たり前か...
録音機器
ICレコーダー、MP3プレーヤー、携帯電話など、最終的にJOSMで使用できるWAVEファイルを取得できるものなら何でもOK。過去のTalk-jaによると、録音機器のデータ容量に制約がある場合は、MP3で録音しPC上でWAVEに変換すると良いらしいです。
JOSM
今年の春頃のバージョンではオーディオマッピングが使えるようになっていたような気がしますが、ちょこちょこといろいろな機能が改良されているので最新版をダウンロードし直した方が良いですね。

2008/08/25

GPSロガーの設定をいぢってみる - 6

前回の続きです。

Wintec社のGPSロガー「Easy Showily (WPL-1000)」にプリセットされたGPSの受信設定の5つ目を試してみました。今回は5番の「捕捉時間最短」で、設定値の内容は次の通りです。

5. Fast Acquisition time / 捕捉時間最短
GPS Parameters / GPS設定項目Values / 設定値
Fix mode / 測位モード2. Auto 2D/3D
2D Fix Altitude[m] / 2D Fix高度500.00
Initial Min. SVs[3~6] / 初回衛星数3
Initial Signal Min. Strength[dBHz] / 初回信号強度15
Navigation Signal Min. Strength[dBHz] / 測位後信号強度14
P Accuracy Masks[m] / 測位精度マスク200
T Accuracy Masks[m] / 時間精度マスク300
PDOP Mask / PDOPマスク28.0
TDOP Mask / TDOPマスク28.0
SBASON


今回もログモードは前回と同じプリセットの1.Walk(歩行)を使用しました。その内容は複合条件(10秒毎, 20m毎, 最高時速=2000km/h, 最低時速=1km/h)です。

結果は、低層(2階建)や中層(5~6階建)の建物沿いの道や近くに建物が無い公園沿いの道では前4回とあまり違いがありませんでした。そして前々回のように、高層(15階建前後)の建物の間の通過した直後だけぶれが大きくなっていました(ひび野2丁目交差点手前)。
こうしてみると、高い建物で囲まれた場所ではその影響を受けますが、通過した直後の大きなぶれはGPS設定とはあまり関係が無さそうに思えます。

GPS受信設定の5種類のプリセットを試してみましたが、試した場所や方法(徒歩)のせいか、あまり大きな違いは無かったようです。とほほ...
でも、精度の高い設定にすると「電源ON後になかなかFIXしないのではないか」とか、或いは「頻繁にLOSTするのではないか」とか心配だったので、試してみて良かったとは思っています。因みに、採れたログの内容はともかく、丸の内のビル街で「1.高精度」にしてもFIX自体はしていましたので、初回FIXを行う場所の選び方や歩き方、或いは乗り物での乗車位置など、ログの採り方に気を付けて工夫していった方が良さそうです。

2008/08/21

どんと来い、中国語

便利そうなオンラインサービスがあったので、ブックマーク代わりに記事にしておこうと思います。

どんと来い、中国語

主なサービスやコンテンツは次の通りです。
四声付きピンインフォント入力ツール
画面上のボタンを押すことで簡単にピンイン文字を入力できます。
中国語「簡体字」ピンイン変換
簡体字の中国語をピンインに変換します。声調はアクセント付き文字または数字を選べます。(500文字まで変換可能)
中国語「簡体字、繁体字」や日本語の「漢字」のピンイン変換
繁体字・簡体字・日本語の漢字の中国語をピンインに変換します。声調はアクセント付き文字または数字を選べます。(100文字まで変換可能)
中国語カタカナ変換
繁体字・簡体字・日本語の漢字の中国語の読みをカタカナに変換します。カタカナのほかにアクセント付き文字または数字を選べるので、簡単に比較できます。(40文字まで変換可能)
中国語の多音字辞典
例外的に複数の読み方がある漢字かどうかを確認できます。
中国語の簡体字・繁体字辞典
簡体字と繁体字を対応表にまとめてあります。
文字参照変換ツール
文字化けを回避するために文字参照に変換するツールです。中国語の漢字、ピンイン文字、日本語、ハングル文字など多言語に対応しているそうです。でも、私のPCでは動きませんでした。
その他
中国語の入力方法(IMEの設定)」などのお役立ち情報や「中国語のイロハ」などのコラムが掲載されています。


ここ数年、香港や台湾に興味があって旅行にも行ったりしているので、ブログへの投稿などに活用できそうです。変換結果の利用について何も書かれていないので、ウィキトラベルなどに使っていいのか、ちょっと微妙な感じもしますが...

2008/08/14

Flickr検索用Bookmarklet (Internet Explorer)

Wikitravel用検索Bookmarkletを作った後、それをベースにウィキトラベルで利用できるライセンス (CC-BY, CC-BY-SA) の写真をフリッカーで検索するブックマークレットを作ってみました。検索条件に「クリエイティブ・コモンズ 表示 (CC-BY)」又は「クリエイティブ・コモンズ 表示-継承 (CC-BY-SA)」により使用許諾された画像であることを組み込んであります。Internet Explorerで動きます(Windows XP Service Pack 3で確認)。Firefox・Safari用は別途作成しています。

使い方は次の通りです。
そのままブックマークレットをクリックした場合
→ IE6ではプロンプトを表示し、そこに入力されたキーワードでフリッカーを検索します。IE7では何も行いません。
文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でフリッカーを検索します。
Wikitravelの検索結果ページ (*) でブックマークレットをクリックした場合
→ レフトナビの検索box内のキーワードでフリッカーを検索します。
* ··· ウィキペディアなどのMediaWikiを使用しているサイト(検索boxがId="searchInput"となっているサイト)の検索結果ページでは、Wikitravelと同じ動作(レフトナビの検索box内のキーワードによる検索)になります。

ブックマークレットの入手方法

"Flickr CC images"のリンクを右クリックして「お気に入りに追加」を選択して保存して下さい。

IE6用 — Flickr CC images


IE7用 — Flickr CC images


IE7用ではポップアップブロックを回避するため、prompt()によるプロンプトを表示しないことにしました。(IE7でprompt()によるプロンプトを動かすための設定もあるようなので、この設定であれば上のIE6用ブックマークレットがIE7で動くかも知れません。でも、安全性を高めるためのポップアップブロックだと思うので、この設定は使わない方が良さそうな気がします。)

コード

後で見たくなるような気がするのでここに置いておくことにしました。読み易くするために改行とインデントを入れてあります。

IE6用

javascript:

G='http://flickr.com/search/?q=';
L='&l=commderiv';
T=document.selection.createRange().text;

if(document.getElementById('searchInput'))
 V=document.getElementById('searchInput').getAttribute('value');

if(T!=''){

 location.href=G+encodeURIComponent(T)+L;

}
else{

 if((typeof V == 'undefined')||(V=='')){
  void(V=prompt('Keywords',''));
 };

 if(V){
  location.href=G+encodeURIComponent(V)+L;
 }

}


IE7用

javascript:

G='http://flickr.com/search/?q=';
L='&l=commderiv';
T=document.selection.createRange().text;

if(document.getElementById('searchInput'))
 V=document.getElementById('searchInput').getAttribute('value');

if(T!=''){

 location.href=G+encodeURIComponent(T)+L;

}
else{

 if((typeof V == 'undefined')||(V=='')){
  void(0);
 }
 else{
  location.href=G+encodeURIComponent(V)+L;
 }

}

2008/08/13

Flickr検索用Bookmarklet (Firefox, Safari)

Wikitravel用検索Bookmarkletを作った後、それをベースにウィキトラベルで利用できるライセンス (CC-BY, CC-BY-SA) の写真をフリッカーで検索するブックマークレットを作ってみました。検索条件に「クリエイティブ・コモンズ 表示 (CC-BY)」又は「クリエイティブ・コモンズ 表示-継承 (CC-BY-SA)」により使用許諾された画像であることを組み込んであります。FirefoxSafariで動きます(Windows XP Service Pack 3で確認)。Internet Explorer用は別途作成しています。

使い方は次の通りです。
そのままブックマークレットをクリックした場合
→ プロンプトを表示し、そこに入力されたキーワードでフリッカーを検索します。
文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でフリッカーを検索します。
Wikitravelの検索結果ページ (*) でブックマークレットをクリックした場合
→ レフトナビの検索box内のキーワードでフリッカーを検索します。
* ··· ウィキペディアなどのMediaWikiを使用しているサイト(検索boxがId="searchInput"となっているサイト)の検索結果ページでは、Wikitravelと同じ動作(レフトナビの検索box内のキーワードによる検索)になります。

ブックマークレットの入手方法
  • Firefoxの場合は、"Flickr CC images"のリンクを右クリックして「このリンクをブックマーク」を選択して保存して下さい。
  • Safariの場合は、"Flickr CC images"のリンクをドラッグしてブックマークバーにドロップして下さい。


コード

後で見たくなるような気がするのでここに置いておくことにしました。読み易くするために改行とインデントを入れてあります。
javascript:

var selectText=window.getSelection();

if(document.getElementById('searchInput'))
 var searchValue=document.getElementById('searchInput').getAttribute('value');

if(selectText!=''){

 location.href='http://flickr.com/search/?q='+encodeURIComponent(selectText)+'&l=commderiv'

}
else{

 if((searchValue=='')||(searchValue==undefined)){
  void(searchValue=prompt('Keywords...',''));
 };

 if(searchValue)
  location.href='http://flickr.com/search/?q='+encodeURIComponent(searchValue)+'&l=commderiv'

}

2008/08/12

GPSロガーの設定をいぢってみる - 5

前回の続きです。

Wintec社のGPSロガー「Easy Showily (WPL-1000)」にプリセットされたGPSの受信設定の4つ目を試してみました。今回は4番の「捕捉時間標準」で、設定値の内容は次の通りです。

4. Middle Acquisition time / 捕捉時間標準
GPS Parameters / GPS設定項目Values / 設定値
Fix mode / 測位モード2. Auto 2D/3D
2D Fix Altitude[m] / 2D Fix高度500.00
Initial Min. SVs[3~6] / 初回衛星数3
Initial Signal Min. Strength[dBHz] / 初回信号強度18
Navigation Signal Min. Strength[dBHz] / 測位後信号強度14
P Accuracy Masks[m] / 測位精度マスク150
T Accuracy Masks[m] / 時間精度マスク300
PDOP Mask / PDOPマスク25.0
TDOP Mask / TDOPマスク25.0
SBASON


今回もログモードは前回と同じプリセットの1.Walk(歩行)を使用しました。その内容は複合条件(10秒毎, 20m毎, 最高時速=2000km/h, 最低時速=1km/h)です。

結果は、低層(2階建)や中層(5~6階建)の建物沿いの道や近くに建物が無い公園沿いの道では前3回とあまり違いがありませんでした。そして前回とは少し異なって、高層(15階建前後)の建物の間の通過中にぶれが大きくなっていました(ひび野2丁目交差点手前)。

2008/08/09

Wikitravel用検索Bookmarklet (Internet Explorer)

2007年の秋にウィキトラベルの検索で不具合が起きた際、ウィキトラベルの各言語版shared画像収納庫)を横断的に一括検索できると便利だなと思って作ってみたブックマークレットです。Internet Explorerで動きます(Windows XP Service Pack 3で確認)。Firefox・Safari用は別途作成しています。

上手く説明できないのですが、使い方は次の通りです。
Wikitravelのページで何も選択せずにそのままブックマークレットをクリックした場合
→ IE6ではプロンプトを表示し、そこに入力されたキーワードでGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。IE7では何も行いません。
Wikitravelのページ上の文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でGoogleのウェブ検索(ドメイン指定無し)を行います。
Wikitravelの検索結果ページでブックマークレットをクリックした場合
→ レフトナビの検索box内のキーワードでGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。
Wikitravelの検索結果ページ上の文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でGoogleのウェブ検索(ドメイン指定無し)を行います。
他のサイト (*) で何も選択せずにそのままブックマークレットをクリックした場合
→ IE6ではプロンプトを表示し、そこに入力されたキーワードでGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。IE7では何も行いません。
他のサイト (*) で文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。
* ··· ウィキペディアなどのMediaWikiを使用しているサイト(検索boxがId="searchInput"となっているサイト)では、Wikitravelのページ上での使用と同じ動作(site:wikitravel.orgの指定の有無)になります。

ブックマークレットの入手方法

"WT to Google"のリンクを右クリックして「お気に入りに追加」を選択して保存して下さい。

IE6用 — WT to Google


IE7用 — WT to Google


IE7用ではポップアップブロックを回避するため、prompt()によるプロンプトを表示しないことにしました。(IE7でprompt()によるプロンプトを動かすための設定もあるようなので、この設定であれば上のIE6用ブックマークレットがIE7で動くかも知れません。でも、安全性を高めるためのポップアップブロックだと思うので、この設定は使わない方が良さそうな気がします。)

コード

後で見たくなるような気がするのでここに置いておくことにしました。読み易くするために改行とインデントを入れてあります。

IE6用

javascript:

G='http://google.com/search?q=';
W='+site:wikitravel.org';
T=document.selection.createRange().text;

if(document.getElementById('searchInput'))
 V=document.getElementById('searchInput').getAttribute('value');

if(T!=''){

 if(typeof V == 'undefined'){
  location.href=G+encodeURIComponent(T)+W;
 }
 else{
  location.href=G+encodeURIComponent(T);
 }

}
else{

 if((typeof V == 'undefined')||(V=='')){
  void(V=prompt('Keywords',''));
 };

 if(V){
  location.href=G+encodeURIComponent(V)+W;
 }

}


IE7用

javascript:

G='http://google.com/search?q=';
W='+site:wikitravel.org';
T=document.selection.createRange().text;

if(document.getElementById('searchInput'))
 V=document.getElementById('searchInput').getAttribute('value');

if(T!=''){

 if(typeof V == 'undefined'){
  location.href=G+encodeURIComponent(T)+W;
 }
 else{
  location.href=G+encodeURIComponent(T);
 }

}
else{

 if((typeof V == 'undefined')||(V=='')){
  void(0);
 }
 else{
  location.href=G+encodeURIComponent(V)+W;
 }

}

2008/08/08

Wikitravel用検索Bookmarklet (Firefox, Safari)

2007年の秋にウィキトラベルの検索で不具合が起きた際、ウィキトラベルの各言語版shared画像収納庫)を横断的に一括検索できると便利だなと思って作ってみたブックマークレットです。FirefoxとSafariで動きます(Windows XP Service Pack 3で確認)。Internet Explorer用は別途作成しています。

上手く説明できないのですが、使い方は次の通りです。
Wikitravelのページで何も選択せずにそのままブックマークレットをクリックした場合
→ プロンプトを表示し、そこに入力されたキーワードでGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。
Wikitravelのページ上の文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でGoogleのウェブ検索(ドメイン指定無し)を行います。
Wikitravelの検索結果ページでブックマークレットをクリックした場合
→ レフトナビの検索box内のキーワードでGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。
Wikitravelの検索結果ページ上の文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でGoogleのウェブ検索(ドメイン指定無し)を行います。
他のサイト (*) で何も選択せずにそのままブックマークレットをクリックした場合
→ プロンプトを表示し、そこに入力されたキーワードでGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。
他のサイト (*) で文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。
* ··· ウィキペディアなどのMediaWikiを使用しているサイト(検索boxがId="searchInput"となっているサイト)では、Wikitravelのページ上での使用と同じ動作(site:wikitravel.orgの指定の有無)になります。

ブックマークレットの入手方法
  • Firefoxの場合は、"WT to Google"のリンクを右クリックして「このリンクをブックマーク」を選択して保存して下さい。
  • Safariの場合は、"WT to Google"のリンクをドラッグしてブックマークバーにドロップして下さい。


コード

後で見たくなるような気がするのでここに置いておくことにしました。読み易くするために改行とインデントを入れてあります。
javascript:

var selectText=window.getSelection();

if(document.getElementById('searchInput'))
 var searchValue=document.getElementById('searchInput').getAttribute('value');

if(selectText!=''){

 if(searchValue==undefined){
  location.href='http://www.google.com/search?q='+encodeURIComponent(selectText)+'+site:wikitravel.org'
 }
 else{
  location.href='http://www.google.com/search?q='+encodeURIComponent(selectText)
 }

}
else{

 if((searchValue=='')||(searchValue==undefined)){
  void(searchValue=prompt('Keywords...',''));
 };

 if(searchValue)
  location.href='http://www.google.com/search?q='+encodeURIComponent(searchValue)+'+site:wikitravel.org'

}

2008/08/07

ラオス航空? ラオス国営航空?

今日、たまたまウィキトラベルラオスの記事を読んでいたら、「外部リンク」節に「ラオス航空公式ページ (日本語) 」というものが書かれていました。地元の航空会社へのリンクなら通常は記事本文内に置くので「着く」節に移動しようと思って、念のためにリンク先を開いたり検索したりしてみましたが、ちょっと混乱してしまいした。

グーグルで「ラオス航空」を検索すると、次のような結果でした。
  • Lao Airlines - ラオス航空 (www.jumping-lao.com/air/)
    • ラオス、ミャンマー、タイ、ベトナム、カンボジア等への航空券やツアー ... (www.jumping-lao.com/)
  • ようこそ!ラオス国営航空 (www.lao-airlines.jp/)
  • ラオス国営航空 - Wikipedia (ja.wikipedia.org/wiki/ラオ航空)
  • (以下、省略。)
ウィキトラベルとウィキペディアの記事を比べるとIATAのコードはどちらも QV、www.jumping-lao.com/air と www.lao-airlines.jp を比べるとロゴはどちらも同じなので、「ラオス航空 = ラオス国営航空」みたいですね。

日本語の公式ページが2つ?

しかし、ウィキペディアの記事を良く読むと、本物の公式ページ(英語)は www.laoairlines.com でした。

じゃあ、www.jumping-lao.com/airwww.lao-airlines.jp は何なのかと、それぞれをよくよく読んでみると、前者は「ラオス政府観光庁駐日代表事務所/日本ラオス協会会員/ラオス航空日本地区予約販売代理店」をやっている旅行会社のサイトの一部、後者は「日本地区総代理店」のようです。因みに、前者にはラオス政府観光局の日本語サイトからリンクがされている、或いは、過去にリンクされていた模様(1個は生きているが、もう1個は404 not found)。

うーん、まぁ、ちょっと分かったような気がしないでもないです。たぶん、代理店が変わったか増えたかして、そんな過去の経緯があった上で、さらに観光局のサイトが更新されていなかったと。そんな感じでしょうか。

と、ここでもう一度ウィキトラベルの記事を読み直すと「着く」節にも航空会社へのリンクがちゃんとあったので、「外部リンク」節から削除して、航空会社の日本語名称はウィキペディアに合わせておこうと思います。リンク先は... 代理店じゃなく本物にしておこうかな。どっちが旅行者に良いのか、ちょっと迷います。あれれ、別の英語のページ (www.laos-airlines.com) もありました。

記事の書き換えは、もう少し調べてからのほうが良さそうです。

追記

その後、本物の公式ページ (www.laoairlines.com) から CONTACT US → GENERAL SALES AGENT と辿っていくと、日本の代理店として lao-airlines.jp 、フランス及びヨーロッパの代理店として laos-airlines.com が載っていました。これに従って記事を編集しようと思います。

2008/08/06

安曇野市 夏のイベント

最近、ウィキトラベル長野県下の記事に継続的な更新が入っているので、暫くして落ち着いたら安曇野市の記事に追加する予定。

信州安曇野わさび祭り
25回目となる2008年は8月3日(日曜日)に開催。2部構成で、10:00~19:00がYOSAKOI安曇野、19:00~21:00が納涼祭となっている。場所は穂高駅前通りと穂高神社北神苑。詳細はこちら
安曇野花火
2007年から始まった花火大会。2回目となる2008年は8月14日(木曜日)に開催(雨天の場合は8月16日)。打ち上げ開始は20:00。場所は明科御宝田遊水池周辺。詳細はこちら
信州安曇野薪能
夕日に染まる北アルプスの雄大な自然を背景とした特設舞台で演じられる能と狂言を楽しむことができる。元々は1991年から15年間続いた「水郷明科薪能」であった。2008年は8月23日(土曜日)に開催。場所は明科龍門渕公園の特設能舞台、JR篠ノ井線明科駅から徒歩5分(雨天の場合は明科体育館)。入場料は前売り¥3,000、当日¥3,500。詳細はこちら
でも、既に今年の日程が終了しているものもあるので、早く記事に追加しないと。

2008/08/05

Sidebar Icons

ウィキトラベルで使おうと思って1年前に作成したJavaScriptですが、残念ながらサイトの管理者(開発者)に興味を持ってもらえず、採用には至りませんでした。

先日、Blogger Slippy Mapウィジェットを作成した際にちらちらと見ていたので、こっちに貼っておこうと思います。

ウィキトラベルはMediaWikiを使っていますので、MediaWikiで動くように書いたつもりですが、動作確認はローカル (自分のPCのブラウザ) でしか行っておらず、サーバーに置いての確認はしていません。(サーバー持ってないし、ウィキトラベルではユーザーのCSSやJavaScriptを使うことできないので...)

JavaScript
 /* 
 
     User JavaScript
 
 */

 /** Icons for sidebar links ***************************************
  *
  *  Description: Mark sidebar links with icons (star, dotm, otbp) by changing the bullet 
  *                 into other list marker designated by Template:Sidebar-icons.
  *  Author: [[User:Tatata]]
  */
 
 function SidebarIcons()  {

     var markers, pLangLinks;

     // find marking template info
     markers = document.getElementsByTagName("span");
     for ( var i=0; i < markers.length; i++ ) {

          switch ( markers[i].className ) {
             case "sidebaricon-star":
             case "sidebaricon-dotm":
             case "sidebaricon-otbp":

                // links in p-lang ( "In other languages" box )
                if ( document.getElementById( "p-lang" ) ) {
                   pLangLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );

                   // find language code and replace class name with if matched
                   for ( var j=0; j < pLangLinks.length; j++) {

                      var a, b;
                      a = markers[i].id;
                      b = markers[i].className + "-lang-" + pLangLinks[j].getElementsByTagName("a")[0].getAttribute("hreflang");

                      if ( a == b ) {
                         switch ( markers[i].className ) {
                            case "sidebaricon-star":
                               pLangLinks[j].className = markers[i].className;
                               pLangLinks[j].title = "This is a Star article in another language.";
                               break;
                            case "sidebaricon-dotm":
                               pLangLinks[j].className = markers[i].className;
                               pLangLinks[j].title = "This is a previous Destinations of the month article in another language.";
                               break;
                            case "sidebaricon-otbp":
                               pLangLinks[j].className = markers[i].className;
                               pLangLinks[j].title = "This is a previous Off the beaten path article in another language.";
                               break;
                            default:
                               break;
                         }
                      }
                   }
                }
                break;

             default:
                break;

          }

     }

 }
 
 addOnloadHook( SidebarIcons );



CSS
/* 
 
User CSS (Cascading Style Sheets)  
 
*/
 
/* Sidebar  Icons */

li.sidebaricon-star {
  list-style-image: url("http://wikitravel.org/upload/ja/0/07/Listmarker-star.png");
}
 
li.sidebaricon-dotm {
  list-style-image: url("http://wikitravel.org/upload/ja/0/08/Listmarker-dotm.png");
}

li.sidebaricon-otbp {
  list-style-image: url("http://wikitravel.org/upload/ja/e/e6/Listmarker-otbp.png");
}

GPSロガーの設定をいぢってみる - 4

前回の続きです。

Wintec社のGPSロガー「Easy Showily (WPL-1000)」にプリセットされたGPSの受信設定の3つ目を試してみました。今回は3番の「出荷時設定」で、設定値の内容は次の通りです。

3.Factory setting / 出荷時設定
GPS Parameters / GPS設定項目Values / 設定値
Fix mode / 測位モード2. Auto 2D/3D
2D Fix Altitude[m] / 2D Fix高度500.00
Initial Min. SVs[3~6] / 初回衛星数4
Initial Signal Min. Strength[dBHz] / 初回信号強度20
Navigation Signal Min. Strength[dBHz] / 測位後信号強度15
P Accuracy Masks[m] / 測位精度マスク100
T Accuracy Masks[m] / 時間精度マスク300
PDOP Mask / PDOPマスク23.0
TDOP Mask / TDOPマスク23.0
SBASON


今回もログモードは前回と同じプリセットの1.Walk(歩行)を使用しました。その内容は複合条件(10秒毎, 20m毎, 最高時速=2000km/h, 最低時速=1km/h)です。

結果は、低層(2階建)や中層(5~6階建)の建物沿いの道や近くに建物が無い公園沿いの道では前2回とあまり違いがありませんでしたが、高層(15階建前後)の建物の間を通過した直後だけ前2回と比較して大きくぶれていました(ひび野2丁目交差点付近)。

2008/08/03

那覇

沖縄県 那覇市

  • lat=26.2124
  • lon=127.6783
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

博多

福岡県 福岡市

  • lat=33.5909
  • lon=130.4232
  • z=12
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

徳島

徳島県 徳島市

  • lat=34.074
  • lon=134.5544
  • z=12
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

広島

広島県 広島市

  • lat=34.3902
  • lon=132.4606
  • z=13
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

奈良

奈良県 奈良市

  • lat=34.6804
  • lon=135.8224
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

大阪府 堺市

  • lat=34.5796
  • lon=135.4828
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

京都

京都府 京都市 下京区

  • lat=35.0061
  • lon=135.7677
  • z=13
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

柏崎

新潟県 柏崎市

  • lat=37.3791
  • lon=138.5757
  • z=13
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

2008/08/02

鎌倉

神奈川県 鎌倉市

  • lat=35.3186
  • lon=139.5506
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

岡村

神奈川県 横浜市 磯子区

  • lat=35.41607
  • lon=139.61207
  • z=16
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

多摩センター

東京都 多摩市

  • lat=35.6261
  • lon=139.4216
  • z=13
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

八王子

東京都 八王子市

  • lat=35.657
  • lon=139.3541
  • z=13
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

丸ノ内

東京都 東京 千代田区

  • lat=35.67663
  • lon=139.76357
  • z=15
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

馬橋

千葉県 松戸市

  • lat=35.8269
  • lon=139.9128
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

海浜幕張

千葉県 千葉市 美浜区

  • lat=35.6435
  • lon=140.0463
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

蘇我

千葉県 千葉市 中央区

  • lat=35.5901
  • lon=140.1266
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

小手指

埼玉県 所沢市

  • lat=35.7967
  • lon=139.4466
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

飯能

埼玉県 飯能市

  • lat=35.8551
  • lon=139.328
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

大宮

埼玉県 さいたま市

  • lat=35.9164
  • lon=139.6282
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

福島

福島県 福島市

  • lat=37.757
  • lon=140.4659
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。

旭川

Blogger Slippy MapウィジェットがIE6でも動くようになりました。

でも、まだ不具合がありそうなので、テストも兼ねて日本の中で OpenStreetMap の地図が育っている街を幾つか表示してみようと思います。

北海道 旭川市

  • lat=43.7648
  • lon=142.3742
  • z=14
オープンストリートマップの地図はクリエイティブ・コモンズのライセンス「表示-継承 2.0 一般」に基づいて利用することができます。利用許諾条項の要約及び詳細については上の"CC-BY-SA-2.0"のリンク先をご覧下さい。
オープンストリートマップのサイトでは地図の画像ファイルやデータをエクスポートすることができます。上の"Data by OpenStreetMap"のリンク先をご覧下さい。
地図の作成に興味がある方はウィキをご覧下さい。また、日本コミュニティのサイトもあります。


このブログのトップページアーカイブ のページの動きが暫く重くなります。 ;-)

Slippy MapウィジェットがIE6でも動くようになりました

Firefox3とSafari3では動いたのにIE6では動かなかった Blogger Slippy Mapウィジェット がIE6でも動くようになりました。(稼動確認したPCはWindowsXP SP3とSP2です。)

何箇所か alert を入れてみて何となく悪そうな場所は分かったのですが、そこから先は Visual Web Developer 2008 Express Edition をインストールしても分かりませんでした。(これはデバッグツールの使い方自体良く分かっていないせいだと思います。)

また検索を繰り返し、次のページに辿り着いて漸く分かりました。 そこに書かれていた原因とは「IEの場合、動的にスクリプトエレメント(<script></script>)にテキストの追加は、できないようです。」ということで、解決策は「動的に関数を作成したいとかそういうことなら、文字列として、関数を構成してeval すればいいです。(script タグを追加する必要はない)」でした。

で、 eval とやらをしてみました。
IEのためのコードを追加しなければならないのかと思っていたので助かりました。普段からJavaScriptを書いている人には当たり前のことなんだろうなぁ(汗

今回のコード(IE6対応版)はこちら。( "+ expand source" のリンクをクリックして下さい。)
<style>
.slippymap img { padding: 0px !important; border: none !important;}
</style>
<!-- bring in the OpenLayers javascript library -->
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<!-- bring in the OpenStreetMap OpenLayers layers. Using this hosted file will make sure we are kept up to date with any necessary changes. -->
<script src="http://openstreetmap.org/openlayers/OpenStreetMap.js"></script>

<script type="text/javascript"><!--
// Blogger Slippy Map 0.1.1
var i = 0;
var lat = 54;
var lon = 0;
var z = 4;
var style = "width:300px; height:200px;";
var element1, element2, element3, text;
var tags = document.getElementsByTagName("div");

  for ( var j=0; j < tags.length; j++ ) {

    if ( tags[j].className == "slippymap" ) {

      i++;

      if ( tags[j].getAttribute("lat") ) {
         lat = tags[j].getAttribute("lat");}
      if ( tags[j].getAttribute("lon") ) {
         lon = tags[j].getAttribute("lon");}
      if ( tags[j].getAttribute("z") ) {
         z = tags[j].getAttribute("z");}
      if ( tags[j].getAttribute("style") ) {
         style = tags[j].getAttribute("style");}

      element1 = document.createElement("div");
      element1.setAttribute("class","tempmap");
      element1.setAttribute("style","margin-bottom:-35px;");
      <!-- define a DIV into which the map will appear -->
      element2 = document.createElement("div");
      element2.setAttribute("id", "map" + i);
      element2.setAttribute("style", style 
        + " border-style:solid; border-width:1px; border-color:#000;");
      element1.appendChild(element2);
      element2 = document.createElement("br");
      element1.appendChild(element2);
      element2 = document.createElement("span");
      element2.setAttribute("class","tempmap")
      element2.setAttribute("style",
        "font-size:70%; background-color:white; position:relative;top:-65px;left:5px;z-index:1003;");
      text = document.createTextNode("Data by ");
      element2.appendChild(text);
      element3 = document.createElement("a");
      element3.setAttribute("href","http://www.openstreetmap.org/?lat=" + lat 
        + "&lon=" + lon + "&zoom=" + z );
      element3.setAttribute("title","See this map on OpenStreetMap.org");
      text = document.createTextNode("OpenStreetMap");
      element3.appendChild(text);
      element2.appendChild(element3);
      element3 = document.createElement("br");
      element2.appendChild(element3);
      element3 = document.createElement("a");
      element3.setAttribute("href","http://creativecommons.org/licenses/by-sa/2.0/");
      element3.setAttribute("title","Creative Commons Attribution-Share Alike 2.0");
      text = document.createTextNode("CC-BY-SA-2.0");
      element3.appendChild(text);
      element2.appendChild(element3);
      element1.appendChild(element2);
      tags[j].appendChild(element1);

      eval("var lat"+ i + "=" + lat + "; var lon"
        + i + "=" + lon + "; var zoom"+ i + "=" + z + "; var map" + i
        + "; function lonLatToMercator(ll) { var lon = ll.lon * 20037508.34 / 180; "
        + "var lat = Math.log (Math.tan ((90 + ll.lat) * Math.PI / 360)) / "
        + "(Math.PI / 180); lat = lat * 20037508.34 / 180; return new "
        + "OpenLayers.LonLat(lon, lat); } ;"
        + "if (typeof window.addEventListener == 'function') { "
        + "window.addEventListener('load', init, false);} else if (typeof "
        + "window.attachEvent == 'object') { window.attachEvent('onload', "
        + "init);} else { var oldonload = window.onload ; if (typeof "
        + "window.onload != 'function') { window.onload = init;} else { "
        + "window.onload = function() { oldonload(); init(); } } };"
        + "function init() { map" + i + " = new OpenLayers.Map('map" + i 
        + "', { controls:[ new OpenLayers.Control.Navigation()"
        + ", new OpenLayers.Control.PanZoom(), new OpenLayers.Control"
        + ".LayerSwitcher()], maxExtent: new OpenLayers.Bounds(-20037508.34, "
        + "-20037508.34, 20037508.34, 20037508.34), maxResolution:156543.0399, "
        + "units:'meters', projection: 'EPSG:900913' } ); var mapnik = new "
        + "OpenLayers.Layer.OSM.Mapnik('Mapnik'); map" + i + ".addLayer(mapnik);"
        + " var osmarender = new OpenLayers.Layer.OSM.Osmarender('Osmarender'); "
        + "map" + i + ".addLayer(osmarender); var cyclemap = new OpenLayers"
        + ".Layer.OSM.CycleMap('Cycle Map'); map" + i + ".addLayer(cyclemap); "
        + "var maplint = new OpenLayers.Layer.OSM.Maplint('Maplint'); map" + i 
        + ".addLayer(maplint); var lonLat" + i + " = lonLatToMercator(new "
        + "OpenLayers.LonLat(lon" + i + ", lat" + i + ")); map" + i 
        + ".setCenter (lonLat" + i + ", zoom" + i + "); } ");
    }
  }
--></script>
しかし...
Firefox3とSafari3ではクレジットとライセンスが地図の枠内に収まるのに、IE6では枠外に出てしまうな。
良く見るとIE6では枠の線も表示されてないよ。
まっ、いっかぁ~。とりあえず動くようになったし。

あと、あんまり地図を貼り付けるとページの動きが遅くなりますね。当たり前か。

2008/08/01

JavaScript カスタム関数

便利そうなのでリンクしておきます。 IE6でSlippy Mapを複数表示できない件も調べてみようかな。

2008/07/31

Blogger Slippy Map

[ja] Slippy Map MediaWiki Extensionからの出力を基にBlogger用のSlippy Mapウィジェットを作成しました。
divタグに幾つかの属性値を設定して使用します(使用例をご覧下さい)。
ウィジェットを追加するには下のボタンを押して下さい。
Firefox3とSafari3では動きますが、IE6では動きませんでした。
Firefox3、Safari3、IE6で動きました。

[en] I made a Slippy Map widget based on output from Slippy Map MediaWiki Extension.
Usage is just adding some attributes to div tag; see examples below.
To get this widget, click the button.
It works on Firefox3 and Safari3, doesn't work on IE6.
It works on Firefox3, Safari3 and IE6.






使用例 (Examples)




<div class="slippymap" lat="36" lon="139" z="3" style="width:250px;height:200px;"></div>






<div class="slippymap" lat="52.516" lon="13.378" z="9" style="width:300px;height:300px;"></div>






<div class="slippymap" lat="51.5012" lon="-0.123" z="14" style="width:500px;height:400px;"></div>





履歴 (History)

0.1
2008-07-31 新規作成。Firefox3とSafari3で動作。
0.1.1
2008-08-02 IE6で動作。

Slippy Mapのウィジェットを作ってみる

Blogger上でSlippy Mapを一応表示できるようになったので、ウィジェットとして作ってみることにしました。

前回は「地図作成時のオブジェクト名」と「地図描画スペースとなるdiv要素のid」が共に"map"だったので、1ページに複数のSlippy Mapを表示させるには、この組み合わせ毎にユニークにしてあげればいっかなーと考えていましたが、普段からJavaScriptなどをやり慣れていない私にはそれほど単純ではありませんでした。


とりあえずコードを書いて1ページに複数のSlippy Mapを表示させようとすると、前回のSlippy Mapを含めて、どれか1つしかタイルが読み込まれませんでした。コードと睨めっこしても他にユニークにするべきところも無さそうだしJavaScript自体は動いているので、もしかしたらOpenLayersの制約かななどと思いながらコードを眺めていると、window.onload=init; と書かれた行が目に留まりました。色々検索しているうちに次のページが見付かったので参考にさせてもらいました。



単純に window.onload を使わないようにコードを修正すると、1ページに複数のSlippy Mapを表示させることができるようになりましたが、よーっく地図を見ると全て同じ座標とズームレベルになっています。地図そのもののオブジェクトだけでなく、座標とズームレベルのオブジェクトも別の名前で作ってあげないと駄目みたいですね...

このウィジェットの追加ボタンのページを作成して、そちらに簡単な使用例を載せておきます。

現時点のコード(一応完成版)はこちら。( "+ expand source" のリンクをクリックして下さい。)
<style>
.slippymap img { padding: 0px !important; border: none !important;}
</style>
<!-- bring in the OpenLayers javascript library -->
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<!-- bring in the OpenStreetMap OpenLayers layers. Using this hosted file will make sure we are kept up to date with any necessary changes. -->
<script src="http://openstreetmap.org/openlayers/OpenStreetMap.js"></script>

<script type="text/javascript"><!--
// Blogger Slippy Map 0.1
var i = 0;
var lat = 54;
var lon = 0;
var z = 4;
var style = "width:300px; height:200px;";
var element1, element2, element3, text;
var tags = document.getElementsByTagName("div");

  for ( var j=0; j < tags.length; j++ ) {

    if ( tags[j].className == "slippymap" ) {

      i++;

      if ( tags[j].getAttribute("lat") ) {
         lat = tags[j].getAttribute("lat");}
      if ( tags[j].getAttribute("lon") ) {
         lon = tags[j].getAttribute("lon");}
      if ( tags[j].getAttribute("z") ) {
         z = tags[j].getAttribute("z");}
      if ( tags[j].getAttribute("style") ) {
         style = tags[j].getAttribute("style");}

      element1 = document.createElement("script");
      element1.setAttribute("type","text/javascript");
      text = document.createTextNode("var lat"+ i + "=" + lat + "; var lon"
        + i + "=" + lon + "; var zoom"+ i + "=" + z + "; var map" + i
        + "; function lonLatToMercator(ll) { var lon = ll.lon * 20037508.34 / 180; "
        + "var lat = Math.log (Math.tan ((90 + ll.lat) * Math.PI / 360)) / "
        + "(Math.PI / 180); lat = lat * 20037508.34 / 180; return new "
        + "OpenLayers.LonLat(lon, lat); } ;"
        + "if (typeof window.addEventListener == 'function') { "
        + "window.addEventListener('load', init, false);} else if (typeof "
        + "window.attachEvent == 'object') { window.attachEvent('onload', "
        + "init);} else { var oldonload = window.onload ; if (typeof "
        + "window.onload != 'function') { window.onload = init;} else { "
        + "window.onload = function() { oldonload(); init(); } } };"
        + "function init() { map" + i + " = new OpenLayers.Map('map" + i 
        + "', { controls:[ new OpenLayers.Control.Navigation()"
        + ", new OpenLayers.Control.PanZoom(), new OpenLayers.Control"
        + ".LayerSwitcher()], maxExtent: new OpenLayers.Bounds(-20037508.34, "
        + "-20037508.34, 20037508.34, 20037508.34), maxResolution:156543.0399, "
        + "units:'meters', projection: 'EPSG:900913' } ); var mapnik = new "
        + "OpenLayers.Layer.OSM.Mapnik('Mapnik'); map" + i + ".addLayer(mapnik);"
        + " var osmarender = new OpenLayers.Layer.OSM.Osmarender('Osmarender'); "
        + "map" + i + ".addLayer(osmarender); var cyclemap = new OpenLayers"
        + ".Layer.OSM.CycleMap('Cycle Map'); map" + i + ".addLayer(cyclemap); "
        + "var maplint = new OpenLayers.Layer.OSM.Maplint('Maplint'); map" + i 
        + ".addLayer(maplint); var lonLat" + i + " = lonLatToMercator(new "
        + "OpenLayers.LonLat(lon" + i + ", lat" + i + ")); map" + i 
        + ".setCenter (lonLat" + i + ", zoom" + i + "); } ");
      element1.appendChild(text);
      tags[j].appendChild(element1);
      element1 = document.createElement("div");
      element1.setAttribute("class","tempmap");
      element1.setAttribute("style","margin-bottom:-35px;");
      <!-- define a DIV into which the map will appear -->
      element2 = document.createElement("div");
      element2.setAttribute("id", "map" + i);
      element2.setAttribute("style", style 
        + " border-style:solid; border-width:1px; border-color:#000;");
      element1.appendChild(element2);
      element2 = document.createElement("br");
      element1.appendChild(element2);
      element2 = document.createElement("span");
      element2.setAttribute("class","tempmap")
      element2.setAttribute("style",
        "font-size:70%; background-color:white; position:relative;top:-65px;left:5px;z-index:1003;");
      text = document.createTextNode("Data by ");
      element2.appendChild(text);
      element3 = document.createElement("a");
      element3.setAttribute("href","http://www.openstreetmap.org/?lat=" + lat 
        + "&lon=" + lon + "&zoom=" + z );
      element3.setAttribute("title","See this map on OpenStreetMap.org");
      text = document.createTextNode("OpenStreetMap");
      element3.appendChild(text);
      element2.appendChild(element3);
      element3 = document.createElement("br");
      element2.appendChild(element3);
      element3 = document.createElement("a");
      element3.setAttribute("href","http://creativecommons.org/licenses/by-sa/2.0/");
      element3.setAttribute("title","Creative Commons Attribution-Share Alike 2.0");
      text = document.createTextNode("CC-BY-SA-2.0");
      element3.appendChild(text);
      element2.appendChild(element3);
      element1.appendChild(element2);
      tags[j].appendChild(element1);
    }
  }
--></script>
Atom