emscripten版proj.4で、nadgridsファイルをネット越しに読めるようにする勇者を募集中

emscripten版proj.4で、nadgridsファイルをネット越しに読めるようにする勇者を募集中。
これさえクリアできれば、JavaScript上で完全なproj.4＋αを再現できるはず…なのだが、そもそもnadgridsファイルの意味も判ってないし、emscriptenのネット越しデータ取得ノウハウもないし、同期と非同期の差をどうクリアするかも考えてないし、前途多難。

freadの在処等を元に、今判ってる事…

* nadgridsファイルにはいくつかフォーマットがあるっぽい、そのうち
ctable, ctable2については、nad_init.cの中で読んでいる。
ntv1, ntv2, gtxについては、pj_gridinfo.cの中で読んでいる模様。

* emscriptenで遠隔からファイルを取るには、emscripten_async_wgetを使えばよいっぽい。
https://groups.google.com/forum/#!topic/emscripten-discuss/MYdoVxKVY78

[追記1]
判らないなりにぼんやりと…
下手にfreadあたりをネット経由の読み込みに置き換える事を考えるよりも、JavaScriptでするにせよemscripten_async_wgetでするにせよ、ネット越しに読み込んできたファイルをemscriptenの仮想ファイルシステム上に置いて、そこから標準の処理で読み込ませた方が話が早そう？
emscriptenの仮想ファイルシステムの理解が必要そう…。

[追記2]

試しにサンプルプロジェクトで

```shell-session
$ ~/emscripten/em++ -o hello.html hello.cpp --embed-file data.txt --embed-file data2.txt
```

みたいな事やってみると、生成されたhello.jsの中で、

```js:hello.js
Module['FS_createDataFile']('/', 'data.txt', [72, 101, 108, 108, 111, 44, 32, 70, 105, 108, 101, 32, 83, 121, 115, 116, 101, 109, 33, 10, 10], true, true);
Module['FS_createDataFile']('/', 'data2.txt', [72, 101, 108, 108, 111, 44, 32, 70, 105, 108, 101, 32, 83, 121, 115, 116, 101, 109, 33, 10, 10], true, true);
```

みたいな記述が生成されることがわかった。
これを使えば、動的にnadgridを作成できるかも。
方針は見えたかな？

* 既存のままで、とりあえず静的にnadgridファイルを付加してコンパイルしてやって、nadgridつき投影法の投影がテスト通るか確かめる
* proj_text定義の中身をパースして、nadgrid定義が含まれていれば動的に取得して、FS_createDataFileで仮想ファイルシステムに加えてやる処理をJSで書く

でいけるかも…。

[追記3]

そんな単純なもんでもなかった。
エラーの出てるNAD27のnadgrids定義は、

```shell-session
+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat
```

なので、単純にコンパイルしてやって、proj.4がnadgridsファイルを探しにいく仕様の/usr/local/shareの下に、

```js:emproj4.js
Module['FS_createPath']('/', 'usr', true, true);
Module['FS_createPath']('/usr', 'local', true, true);
Module['FS_createPath']('/usr/local', 'share', true, true);
Module['FS_createDataFile']('/usr/local/share', 'conus', [...], true, true);
Module['FS_createDataFile']('/usr/local/share', 'alaska', [...], true, true);
Module['FS_createDataFile']('/usr/local/share', 'ntv1_can.dat', [...], true, true);
```

と作って(ntv2_0.gsbだけはファイルが見つからなかったため省略、テストデータを作ってるのも同じ環境のため多分無問題)テストを走らせてみたが、エラー数減少せず。
試しに、ファイルを作るのを'/usr/local/share'下ではなく、'/'下にしてみたが特に変化なし。

とりあえず現状、お手上げ。

[追記4]

電車に乗ってる間に書いた、次手動かせるようになったらやってみることメモ:

* もしかしたらコンパイル環境での、環境変数値が定数としてコンパイルされてるのかもしれない。  
/opt/localとか試してみる。 => 早速やったがダメだった
* ダメだったら、cロジックの中でnadgridsファイル名生成してるところ洗い出してデバグ出力
* いきなり実践的な変換でなく、ダミー投影系でもいいので簡単なものから試す。ただのwgs84定義にconus読み込ませてみるとか。  
それでテストケース作って、小さくデバグ。

[追記5]

projects.hから、グリッドシフト情報の構造体らしきもの。

```c:projects.h
typedef struct _pj_gi {
    char *gridname;   /* identifying name of grid, eg "conus" or ntv2_0.gsb */
    char *filename;   /* full path to filename */
    
    const char *format; /* format of this grid, ie "ctable", "ntv1", 
                           "ntv2" or "missing". */

    int   grid_offset; /* offset in file, for delayed loading */

    struct CTABLE *ct;

    struct _pj_gi *next;
    struct _pj_gi *child;
} PJ_GRIDINFO;
```

こいつの中のfilename属性見てやれば、それを見に行ってるという事と思うので、それを仮想ファイルシステム内の名前にしてやれば何とかなるか？

[追記6]

奇麗なインタフェースの準備とかはまだですが、とりあえず読めるようにはなりました。
その調査中に覚えた[emscriptenの小ネタ集](http://qiita.com/kochizufan/items/c160a645f0c4c7baaaae)作りました。