9 ポイント 投稿者 GN⁺ 2024-04-22 | 1件のコメント | WhatsAppで共有
  • tinyworldmapは、オフラインファーストおよび低帯域幅のWebアプリ向けの世界地図で、Leafletと一緒に使うよう設計されている
  • 全ズームレベルをサポートし、最も完全なバージョンはgzip 450KBで、10年前の低性能な携帯電話でも体感できる遅延が出ないよう、クライアントレンダリングをプロファイリングしてテストしている
  • 基本地図には、OpenStreetMapに追加された人口上位10,000都市が表示され、執筆時点で人口48,000人以上の都市と町を含む
  • 利用方法は、OpenStreetMapタイルを置き換えるベースマップ、またはオフライン時にOSMタイル要求をローカル生成タイルに切り替えるフォールバック地図の2種類
  • 地図データはOpenStreetMapと同様にODBLライセンスに従い、LeafletフッターなどにOpenStreetMapとtinyworldmapのクレジット表記が必要

tinyworldmapの目的と範囲

  • tinyworldmapは、オフラインファーストおよび低帯域幅のWebアプリ向けの世界地図
  • Leafletと一緒に使うよう設計されており、すべてのズームレベルをサポートする
  • 最も完全なバージョンはgzip 450KB、展開後は1.1MB
  • クライアント側レンダリングは10年前の低性能な携帯電話で広範にプロファイリングおよびテストされ、体感できる遅延はなかった
  • デモはNightly demoStable demov3 announcementで提供されている

基本地図データ

  • デフォルト設定では、OpenStreetMapに追加された人口上位10,000都市を表示する
  • 執筆時点で、この範囲には人口48,000人以上のすべての都市と町が含まれる

Leafletで使う2つの方法

  • ベースマップとして使用

    • tinyworldmapをLeafletのベースマップとして使うには、headタグに配布スクリプトを追加する
    • 安定版スクリプトはhttps://tinyworldmap.com/dist/v3/tiny-world-all-10000.jsで、地図表示のためのすべてのデータを含む
    • Leafletのタイルレイヤーの代わりに、次の形式でL.GridLayer.TinyWorldを追加する
    new L.GridLayer.TinyWorld({maxZoom: 19}).addTo(map)
    
  • オフラインのフォールバック地図として使用

    • オフラインファーストのWebアプリで画像ベースの地図をすべてのズームレベルにわたってキャッシュするのは、タイル数が多すぎて不可能であり、全体サイズがしばしばテラバイト単位になる
    • このリポジトリは、地図を含むWebアプリのオフライン機能のためにサービスワーカーを提供している
    • サービスワーカーがインストールされると、フォールバック地図がプリロードされる
    • 訪問したページはキャッシュされる
    • ベースマップはキャッシュから除外される
    • サーバーにアクセス可能なときは、キャッシュデータは使われない
    • ユーザーがオフラインの場合、Webサイトはキャッシュから提供され、サービスワーカーがOSMタイルサーバーへのリクエストを横取りしてtinyworldmapによる代替タイルをローカル生成する
    • サービスワーカーを登録する前に、サービスワーカー内のIMPORTANTと表示された箇所をすべて修正する必要がある
    • 登録後、Leafletタイルレイヤーのクレジット表記にはOpenStreetMapとtinyworldmapの両方を含める必要がある
    • Hitchmapは、tinyworldmapをフォールバックとして使う本番アプリの例
    • サービスワーカー対応ブラウザでWebサイトを開き、少し待ってからインターネットを切断して再読み込みすると、フォールバック地図でアプリが正常に動作するはず
    • サービスワーカーのインストールには時間がかかる場合がある

地図スタイルとカスタム地図

  • コンストラクタはrenderオプションを受け取り、地図の見た目を変更できる
  • 各レイヤーのstyleオプションは、CanvasのCanvasRenderingContext2Dに適用される
  • たとえばstate_bordersレイヤーにfillStyleを指定してスタイルを変更できる
let render = {
    state_borders: {
        style: {fillStyle: '#f00'}
    }
}

new L.GridLayer.TinyWorld({maxZoom: 19, render}).addTo(map)
  • 組織で道路地図、都市地図、他言語の地図、OSMまたは非OSMデータを含むカスタムコンテンツ地図が必要な場合は、business@tinyworldmap.comへ見積もりを依頼できる

より小さい地図ファイルのオプション

  • 境界線なしバージョン

    • tiny-world-cities-10000.js(on)は、完全版から州境、国境、海岸線を除いたデータを含む
    • このバージョンではgzip基準で300KB、展開後基準で825KB削減される
    • 境界線なしバージョンには、含まれるデータがすべて高精度であるという利点がある
    • 完全版の国境線は高ズームレベルでは正確ではないため、国境線や海岸線に合わせた図形をオーバーレイすると不自然に見えることがある
    • そのような場合は、境界線なしバージョンのほうが見た目が良いことが多い
  • 都市ラベルなしバージョン

    • 都市ラベルのないファイルは2種類ある
    • tiny-world-borders.js(on): 州境を省略
    • tiny-world-nocities.js(on): 州境を維持
    • 都市ラベルは、展開後で410KB、圧縮後で172KBを占める
  • 都市数を減らしたバージョン

    • 都市ラベル付きファイルには、2,000個4,000個の都市バージョンも用意されている
    • ファイル名の100002000または4000に変更すればよい
    • | 含まれる都市数 | 人口基準 |
    • | --- | --- |
    • | 10,000 | 48,000人超 |
    • | 4,000 | 137,000人超 |
    • | 2,000 | 287,000人超 |

ライセンスとクレジット表記

  • tinyworldmapのデータは、OpenStreetMapデータと同様にODBLライセンスに従う
  • ODBLはクレジット表記を要求する
  • 案内どおりに設定していれば、LeafletフッターにOpenStreetMapとtinyworldmapのクレジット表記が含まれているはず
  • そうでない場合は、OpenStreetMapとtinyworldmapのクレジット表記を別途追加する必要がある

1件のコメント

 
GN⁺ 2024-04-22
Hacker News の意見
  • アイデアは気に入った。あまりに遠くまで縮小して、たった今リクエストした大陸タイルをサーバーがレンダリングするまで待たなければならない問題を解決してくれるので良い
    ただ、Detroit 郊外の West Bloomfield Township と Waterford Charter Township の相対的な位置は分かるのに、それがどの州にあるのか、あるいは Great Lakes が存在するのかも分からない、というユースケースが何なのかはよく分からない
    海岸線にははるかに多くのデータを使い、大都市圏の細分化にはもっと少なく使うとよさそう

    • 方向性は良いが、上位100の島上位50の湖上位200の川 のような主要な地形は必ず含めるべきだと思う
    • 道路や鉄道も同じ。車に置く道路地図なら必要だが、それ以外では道路の位置を知る必要はあまりない
      他に入れられる情報をあまりにも多く覆い隠してしまう
    • 興味本位でいくつか見てみたが、米国 Virginia の Alexandria は川の反対側にあり、Bahrain はかなりひどい表示になっている
    • この部分は v2 で改善された
  • 素晴らしいが、海岸線のディテール が低すぎる。英国のいくつかの町は海の上に浮かんでいて、逆に Greenland と Northern Canada が頂点を全部持っていっている
    Mercator 投影によるディテールレベルはすでに考慮しているようだが、人がほとんど住んでいない地域の優先度を下げるとよさそう

    • 良いプロジェクトだ。含める場所を選ぶときに Wikidata の QRank も使えば、人口が少なくても有名な島が表示されるかもしれない
      QRank の SQLite DB も以前 HN に投稿されたことがある
      [1] https://qrank.wmcloud.org/
      [2] https://github.com/hikeratlas/qrank
    • 都市のディテールと海岸線のディテールの比率が、妙に都市側へ偏っている。正確な国境や海岸線よりも、都市を多く入れる方向に見える
      Netherlands のある州が国の本土から切り離され、島のように表示されているが、実際にはそうではない。なのに、その州内の都市名は5つも把握していて、そのうちいくつかはほとんど重なっている
      一方で Afsluitdijk を入れているのは個人的には不要なディテールに思えるが、どの陸地を描くかと単なる海上インフラをプログラムで区別するのが難しいのは理解できる
      issue tracker にチケットを立てるべきだろうが、モバイルでログインしていないので今は HN コメントが最善だ。同じように感じる人がいれば、このコメントを根拠に比率調整、都市間の最小距離の導入、全体のファイル縮小といった改善を提案してもよいと思う
    • このため、島や 群島地域 ではほとんど使えなくなる。Philippines も島が多いとはいえ、かなり大きな島がいくつもあるのに、地図としては使い物にならない
      French Polynesia は地図上に存在すらしない
    • フィヨルドを取り除き、他の場所により多くのディテールを入れた nightly バージョン を公開した。全体的に解像度も高い
      もともとそうしなかった理由は、古いスマートフォン、特に Firefox for Android で多数のポリゴンを描画するとクラッシュする可能性があったためだ。その後、描画手順を最適化したが、注意は必要
      [1] https://tinyworldmap.com/beta.html
    • 単純化が全体的に雑だ。Caribbean では国全体が抜けている
      これは基本的な 品質管理 で検出すべき部分だ
  • 似たものを作った。オフラインファーストで、とても小さく、ベクターベースだが、国際化 に重点を置いている
    UN のすべての言語で提供している。ただし Spanish は単に忘れていて抜けており、数時間で作れるはずなので恥ずかしい
    国名と都市名には、UN に登録された正式名称を使っている。そのため UK の正式な短縮名は “United Kingdom of Great Britain and Northern Ireland” だ
    https://map.ache.one/en

    • 悪くないが、バグがかなりある。“Cape town” が South Sudan に表示されているのに、肝心の国名はなく、Eritrea も名前が抜けている。Somalia のブロックは色の違う2つに分かれている
      軽量な地図を描き、国際化を扱うのは比較的簡単だった。公開データソースとライブラリがいくつもあるからだ
      本当に難しいのは、純粋に 行政上の定義 だ。大半の国に紐づくデータがあると、地図ソースと必ず食い違う部分が出てきて、最終的には独自に調整した地図を作る必要がある
      「国」とは何かについて合意がない。Western Sahara は公式には国だが、実質的には Morocco がずっと占領してきたし、Somalia では Somaliland と Puntland が事実上の独立国のように動いているが、公式な承認はない。Greenland や Niue などはその中間のどこかにある
    • どう作ったのかという説明は見つけられなかったが、地図は美しい。Tiny World Maps にも関連する内容はあるが、そこも作成方法の説明は十分ではない
      国単位でやってみた経験では、汚いハックを含む手作業のプロセスで、きちんと合わせられたかをテストするのが一番大変だった。特に適切な 一般化レベル と、人々が自分の地域の地図に期待する見た目が難しい
      この地図を大きく改善するためにかける労力に価値があると見ているのか気になる
    • 星印が最大の都市を意味するのか首都を意味するのか分からないが、後者なら Tanzania は間違っている
      星印は Dar Es Salaam にあるのに、ラベルは Dodoma になっている。Dodoma が実際の首都だが、国の中央寄りにある
    • “i18n” という略語自体があまり国際化されていない
  • かわいい。以前、完全に同じではないが似たものを作ったことがある
    https://web.archive.org/web/20020611095429/http://www.cs.man.ac.uk/~hancockd/CityZen/index.html
    線分2万本、場所3,350か所、ビューアとクイズまで全部合わせて 162KB だった

  • フィードバックに感謝。選択の背景を説明すると、最近までこのプロジェクトの主な焦点は国の形ではなかった
    長い間 README にあった国境なし版が唯一のバージョンで、全世界を追加できるとは思っていなかった。ところが可能だった
    フィヨルドを削除し、要望の多かった島々を含めてほかの場所により多くのディテールを入れた nightly 版を公開した。全体的に解像度も高い
    もともとそうしなかった理由は、古いスマートフォン、特に Firefox for Android で多数のポリゴンを描画するとクラッシュする可能性があったため。その後、描画手順を最適化したが、注意は必要
    [1] https://tinyworldmap.com/beta.html

  • 人口上位 10,000 都市が最善のフィルターなのかはよく分からない
    この方法だと大きな国の都市が優先され、小さな国では大半の都市が漏れる可能性が高い
    国ごとに上位 X 都市を入れる補助フィルターが必要。そのほうが小国の主要都市も拾えそう

    • 都市の重要度を測る別の尺度もある
      首都、地方の中心都市、世界都市、地域内での中心性といった基準は、基本条件を補完するのに役立つかもしれない
      この議論には 地理学者や地図製作者のほうが有用な助言をくれそう
  • 世界で最大の 集落 10,000 件を選ぶと人口 48,000 人まで下がるというのが興味深かった
    この数字が驚くべきものなのかどうか、まだ判断しているところ

    • 米国の都市を人口順に上位 100 件ほど見ると、おおよそ 20 万人程度まで下がることは昔から知っていた
      200 件に増やしても、なお 10 万人以上。Wikipedia 基準で 333 位のカリフォルニア州デイリーシティは人口 100,007 人: <https://en.wikipedia.org/wiki/List_of_United_States_cities_b...>
      このような規模分布は、ほかの多くのスケーリング状況と同様に、ログ・ロググラフではおおむね線形に近い
      中国では、人口 100 万未満の都市が出てくるまで 106 位まで行く必要がある。米国にはそのような都市は 9 つしかない
      インドは今確認したところ、人口 100 万超の都市が 46 あり、100 位のマレガオンは 47.1 万人、300 位のアウランガーバードもなお 10 万人を超える
      ただし「都市」は非常に恣意的な定義。世界最大級の都市の一部は、別の国の基準では大都市圏、さらには州や省に相当する場合もある
      面積基準で最大の都市は、むしろ人口が非常に少ない。グリーンランドのセルメルソークは人口 24,148 人、面積 575,300km²で、ロードアイランド州の約 144 倍、米国の州の中ではテキサス州とアラスカ州だけがそれより大きい。アラスカ州も 12% 程度大きいだけ
      都市地理学は複雑な分野なので、通常は大都市統計圏、市街地面積、人口といった複数のスケールや定義を合わせて比較する。そうすることで政治的境界の恣意性を和らげ、総人口や経済的影響力をよりよく反映できる
  • 国境がこれほど粗いのにファイルサイズがこの程度というのは、かなり驚き
    全体のデータサイズは、有用性とファイルサイズのバランス点をかなり下回っているように思える。たとえば 2 倍のサイズでも、国境はここまでギザギザにはならなかったはず

    • ファイル全体は gzip 圧縮なしで約 700KB
      「国境と海岸線を除いた完全版の全データがあり、それによりサイズが 200KB 減る」という説明を見ると、約 29% が国境・海岸データで、71% が都市名と位置ということになる
      個人的には多くの都市を削除できそうに思う。特に互いに重なっている都市は、灰色の陸地と都市名が見える程度まで拡大しないと見えないので、その代わりに海岸線をより正確にしたほうがよさそう
      一般的な世界地図上の位置がどれほど頻繁に必要なのかもよく分からない。たとえば今見ている関心地点の Web サイトでは、そこへ行くために使う周辺の高速道路や公共交通機関の路線を含む軽量地図のほうが、より頻繁に必要なのではないか
      地球全体を数 km² 単位で分けたバージョンを作れば、10 分の 1 のサイズでもかなり有用なディテールを盛り込めそう。地球全体の低ポリゴン地図にも国際宇宙ステーションの追跡のような用途はあるだろうが、ずっとまれに見える
  • 人口が 4 万人未満でも、首都は必ず含め、何らかの形で星印を付けるべき

  • 本当にすばらしい。スマートフォンでこれほど速く読み込まれるのは印象的
    空間データを Paths に圧縮するアイデアがとても良い
    ODbL ライセンスを避けるなら、OSM の代わりに Natural Earth データを使うのもよさそう
    空間データを Paths に変換するツールも含めると本当に良さそう