厄介なことに、海岸線データは Shapefile で提供される[1]。 前地図システムでは、PostgreSQL/PostGISデータベースに取り込んで、 CSVファイルでエクスポートしたものを使っていた。 Shapefileを C#の基本機能だけで読み込むのは困難である。 SharpMap[2]などを使う方法もあるが、 広く一般に使われているものではないので、手軽には使えない。
QGISまたはPostgreSQL/PostGISを使って、 CSVファイルでエクスポートする。
QGISの方が操作は簡単である[3]。 simplified-land-polygons-complete-3857.zipおよび land-polygons-split-3857.zip をダウンロードして、タブ区切りファイルとした。
3857形式の方が レンダリングでの座標変換が簡単であるから、 パフォーマンス上は有利であるが、極座標の方が分かりやすいため、 4326形式でエキスポートする。
それならば land-polygons-complete-4326.zip の方がいいと言えるが、 低ズーム用がないため、ダウンロードは 3857 で揃えた。
形式上は MultiPolygon であるが、実際は閉ループひとつのシングルポリゴンである。
地図システム Ver. 2 では、16進表示のテキストファイルであったが、 Ver 3. では osm(xml)ファイルと同様にバイナリファイルに変換する。
低ズーム用はゾーン分割しないが、中・高ズーム用も日本地図領域に限定し、ファイルサイズが 十分小さければゾーン分割をやめ、ファイル全体をメモリに読み込み空間検索を行う。
WKT,FID "MULTIPOLYGON (((-4.732901 55.524961,-4.736315 55.525553,-4.738457 55.528084,-4.733933 55.527892,-4.732901 55.524961)))","0" "MULTIPOLYGON (((-1.9880991 50.6819996,-1.9893854 50.684027,-1.9812813 50.6845458,-1.9828153 50.6817161,-1.9880991 50.6819996)))","1" ...
低ズーム用のバイナリファイルは 10.5MB、高ズーム用は日本地図境界ボックスに限定すると 14.3MB となった。
zoom 15で皇居を中心としてレンダリングしたときの結果を下に示す。 この場合の land polygon はひとつだけで、ノード数は 65819 である。 最初のタイル 15_29103_12901 のレンダリングで読み込むため、 レンダリングと合わせて 67 msかかっている。その後はレンダリングだけであるが、ノードが多いため、 平均的には 30数ms かかっている。
以前はもっと小さく分割されていたように思うが、変わったのかも知れない。
land polygon ではなく、water polygon を使えば、内陸部ではレンダリングがなくなるが、 何故か、何故か地図の一部の描画に乱れがある。
c:\gis3>gis3 GPSLog.Load Archive.Load: d:/gisarc/japan/15/1818/806.arc Archive.Load: d:/gisarc/japan/15/1819/806.arc OSM初期化完了 GetAllBytes: d:/osmzone/japan/7/113.dat 48ms GetAllBytes: d:/osmzone/japan/10/909.dat 46ms GetAllBytes: d:/osmzone/japan/13/7275.dat 15ms OSM.GetOSM3: 336 12073 22073 Render: ready 1ms 15_29103_12901 1 65819 Render: coastline 67ms Render: Append 84ms Render: landcover 202ms Render: waterway 300ms Render: 道路など 637ms Render: 15_29103_12901 34482 合計 1193ms OSM.GetOSM3: 598 8313 10697 Render: ready 2ms 15_29103_12902 1 65819 Render: coastline 35ms Render: Append 39ms Render: landcover 61ms Render: waterway 92ms Render: 道路など 347ms Render: 15_29103_12902 19608 合計 482ms OSM.GetOSM3: 760 11419 10827 Render: ready 1ms 15_29103_12904 1 65819 Render: coastline 37ms Render: Append 41ms Render: landcover 72ms Render: waterway 130ms Render: 道路など 433ms Render: 15_29103_12904 23006 合計 561ms GetAllBytes: d:/osmzone/japan/13/7276.dat 19ms OSM.GetOSM3: 715 28062 17670 Render: ready 0ms 15_29104_12901 1 65819 Render: coastline 29ms Render: Append 34ms Render: landcover 64ms Render: waterway 129ms Render: 道路など 536ms Render: 15_29104_12901 46447 合計 820ms GetAllBytes: d:/osmzone/japan/7/113.dat 62ms GetAllBytes: d:/osmzone/japan/10/909.dat 53ms OSM.GetOSM3: 1034 16104 7922 Render: ready 1ms 15_29104_12902 1 65819 Render: coastline 28ms Render: Append 30ms Render: landcover 54ms Render: waterway 107ms Render: 道路など 455ms Render: 15_29104_12902 25060 合計 571ms OSM.GetOSM3: 951 16777 9025 Render: ready 1ms 15_29104_12904 1 65819 Render: coastline 40ms Render: Append 42ms Render: landcover 59ms Render: waterway 111ms Render: 道路など 544ms Render: 15_29104_12904 26753 合計 652ms OSM.GetOSM3: 667 34460 27966 Render: ready 1ms 15_29106_12901 1 65819 Render: coastline 33ms Render: Append 39ms Render: landcover 77ms Render: waterway 176ms Render: 道路など 808ms Render: 15_29106_12901 63093 合計 1074ms OSM.GetOSM3: 920 15018 15074 Render: ready 1ms 15_29106_12902 1 65819 Render: coastline 29ms Render: Append 33ms Render: landcover 51ms Render: waterway 94ms Render: 道路など 532ms Render: 15_29106_12902 31012 合計 663ms OSM.GetOSM3: 701 10449 8688 Render: ready 1ms 15_29106_12904 1 65819 Render: coastline 28ms Render: Append 31ms Render: landcover 49ms Render: waterway 83ms Render: 道路など 342ms Render: 15_29106_12904 19838 合計 441ms GPSLog.Load: 23340 12s
沿岸(福井県)では下のように、ノード数が少ない無数のポリゴンが含まれているが、レンダリング時間は2,3倍になる。 大きな比重を占めるのは、ノード数 87346 の巨大ポリゴンであろう。
OSM.GetOSM3: 2241 3809 0 Render: ready 0ms 87346 8 13 6 6 6 9 9 9 10 8 9 9 8 11 8 8 11 12 11 10 8 8 9 9 8 9 8 8 8 7 7 8 8 11 8 5 10 9 8 7 8 14 8 10 9 5 10 7 8 15 8 5 8 7 7 20 8 8 11 8 7 8 9 10 9 9 7 7 10 10 12 11 8 6 8 15 6 6 7 6 7 7 7 7 8 5 6 8 7 8 15 6 8 7 9 6 14 7 6 7 6 5 7 6 6 8 7 8 6 6 8 7 8 9 5 7 9 8 9 7 42 8 15 12 8 6 7 7 8 6 15 7 6 7 6 6 8 5 7 7 6 19 7 10 9 8 8 6 7 6 10 7 6 6 12 10 7 7 6 8 6 7 Render: coastline 34ms Render: Append 34ms Render: landcover 48ms Render: waterway 54ms Render: 道路など 62ms Render: 10_898_401 6050 合計 72ms OSM.GetOSM3: 3528 10943 0 Render: ready 0ms 87346 9 8 7 13 8 14 10 7 6 10 6 12 10 8 8 16 11 20 7 12 7 21 6 7 7 7 10 10 15 8 8 12 11 6 8 6 10 8 12 11 10 8 13 7 8 8 23 8 16 14 9 9 7 6 6 14 8 10 8 6 9 7 7 9 8 7 21 22 7 7 13 7 7 6 17 10 7 8 5 7 5 6 7 6 10 7 6 12 5 8 18 10 6 6 6 6 7 10 7 5 7 6 8 7 8 7 7 22 7 13 6 6 7 8 9 7 11 9 7 6 5 7 6 7 6 10 8 23 13 9 7 13 7 10 7 6 5 11 8 8 8 8 10 10 7 8 10 10 6 6 8 8 20 6 8 7 8 9 10 8 7 7 9 8 9 6 9 10 9 9 7 18 9 9 9 10 9 11 9 10 8 9 8 6 9 8 8 6 9 10 8 7 10 8 9 7 7 7 10 11 7 8 15 9 7 9 8 12 8 10 8 9 10 7 15 7 10 7 11 12 9 9 7 10 6 7 7 7 8 8 9 10 13 9 9 8 7 6 7 7 10 9 9 6 10 10 7 7 9 7 8 6 7 9 8 8 10 7 9 8 9 12 8 7 6 8 9 8 6 7 6 6 10 7 10 6 33 14 7 10 10 11 7 8 7 11 7 7 5 7 6 9 9 7 7 7 8 11 7 8 8 7 8 6 7 8 7 5 8 8 7 8 6 8 7 6 7 8 6 8 13 7 6 7 6 6 8 6 8 9 7 12 7 6 9 7 5 7 9 18 8 16 23 25 5 9 7 18 7 7 9 5 7 19 7 15 6 15 6 21 17 7 5 8 8 7 11 9 7 9 11 10 12 7 8 9 9 11 16 9 17 26 11 9 7 9 12 6 6 8 11 15 11 7 6 8 9 9 16 6 14 7 5 9 7 6 8 8 7 6 8 7 6 9 7 8 8 8 7 7 8 8 6 8 7 10 6 6 6 4 7 9 4 9 6 5 6 8 6 4 6 7 8 7 6 7 9 8 6 7 9 6 11 7 6 6 9 8 8 8 7 7 7 7 9 9 8 7 7 8 8 7 6 5 7 8 7 8 5 7 8 6 7 7 6 9 7 7 6 8 6 4 5 6 Render: coastline 50ms Render: Append 52ms Render: landcover 79ms Render: waterway 94ms Render: 道路など 112ms Render: 10_898_402 14471 合計 139ms OSM.GetOSM3: 4732 37913 0 Render: ready 0ms 87346 7 7 9 7 8 9 8 7 10 8 9 9 8 12 6 9 8 10 8 8 8 8 10 14 24 30 17 16 5 12 13 10 9 9 8 11 15 48 10 22 9 8 9 10 7 6 6 6 5 5 5 4 4 6 4 8 8 8 9 6 7 7 7 9 8 8 9 7 10 11 8 13 7 10 6 6 11 14 8 8 8 6 9 8 6 6 6 5 7 15 42 17 9 9 7 23 10 7 10 7 9 7 12 6 10 11 12 17 6 8 7 6 6 5 10 10 4 9 6 6 10 9 10 13 9 11 9 623 6 7 10 10 10 11 8 9 12 7 11 13 14 10 10 11 9 9 6 11 9 10 7 8 12 5 9 7 12 7 6 10 12 6 9 7 13 8 8 7 15 9 8 8 20 9 13 20 8 6 15 6 16 8 9 9 7 7 9 8 8 12 16 9 14 50 10 9 8 19 15 34 8 6 40 15 8 9 14 7 11 10 10 6 7 6 9 5 17 15 9 8 9 13 8 8 7 7 7 9 5 8 8 8 7 7 5 6 7 6 5 6 10 8 7 30 6 8 9 6 6 8 6 8 6 7 9 9 8 6 7 7 8 8 9 6 6 8 6 8 10 11 6 8 17 9 7 21 6 14 9 11 14 6 13 15 7 9 15 7 7 11 18 16 12 12 15 10 5 9 5 6 7 19 7 8 7 212 8 9 15 9 8 8 8 16 7 9 13 7 6 17 15 8 8 8 20 11 10 9 7 6 10 7 7 8 6 8 7 9 8 8 30 13 12 8 10 18 13 15 7 9 8 8 6 9 17 15 8 6 10 21 7 6 7 7 9 8 11 10 15 12 10 9 6 7 8 7 8 9 16 8 7 10 14 10 10 6 7 8 7 7 6 6 7 10 8 15 10 4 19 9 17 7 16 7 18 9 5 11 7 6 8 7 8 9 8 6 6 8 7 7 7 6 11 7 7 9 9 10 8 9 9 8 7 9 9 9 8 9 9 9 9 9 8 8 8 9 9 8 9 9 9 9 9 9 9 8 8 10 9 9 10 8 13 9 8 9 8 7 8 7 7 9 8 9 9 9 8 7 9 8 9 6 8 7 13 19 9 9 7 16 8 6 7 8 8 10 8 9 6 7 6 5 9 9 9 7 8 9 8 6 9 9 8 8 7 9 8 7 8 8 9 9 9 9 10 14 9 8 7 9 8 11 9 7 8 9 8 9 8 10 9 10 8 7 8 10 8 8 15 7 9 9 8 9 8 7 9 7 7 9 10 9 11 11 15 8 10 15 8 6 8 8 8 13 17 7 9 9 8 16 6 6 8 12 7 8 9 8 8 7 9 8 8 8 8 9 8 8 7 10 7 8 8 8 9 15 7 7 8 12 12 8 9 10 8 7 9 8 7 8 7 8 7 7 8 9 7 9 7 7 9 9 8 7 8 12 7 7 8 7 8 7 8 8 7 10 8 8 7 5 8 9 9 11 8 10 9 9 9 8 8 9 9 9 8 8 9 8 10 7 9 6 8 8 8 7 9 7 8 14 7 25 7 7 7 7 6 8 7 8 7 8 9 10 9 9 9 7 12 9 7 7 9 9 9 8 9 8 10 8 8 9 8 8 8 9 8 9 9 9 8 9 8 10 6 9 9 7 10 10 7 9 9 9 8 8 8 9 9 9 7 9 7 7 8 9 9 8 7 8 6 9 9 9 7 8 8 11 9 9 8 6 7 6 6 8 9 9 12 5 9 9 8 9 8 8 9 8 8 9 10 7 9 7 7 7 7 7 9 10 23 21 11 6 6 6 6 6 6 8 6 7 8 7 6 6 6 7 6 8 5 7 7 8 6 9 6 11 7 8 5 7 6 Render: coastline 80ms Render: Append 86ms Render: landcover 155ms Render: waterway 225ms Render: 道路など 294ms Render: 10_898_403 42645 合計 449ms