NetTopologySuite, ProjNet, GeoAPIあたりが軒並みPCL対応済み[Xamarin]

あめいさんによって「[FOSS4G 開発者の為の、図形演算ライブラリガイド](http://qiita.com/amay077/items/7a99df1c0da881cc47f6)」で紹介され、モバイルに対応してないと聞いて私が「[
Net Topology Suite Xamarin Android/iOSで動くようにしてみた](http://qiita.com/kochizufan/items/b47e11eb08f94cff446e)」で暫定的にモバイルに移植した、.NET版の[GEOS](http://trac.osgeo.org/geos/)(図形演算ライブラリ)にあたる[NetTopologySuite](https://code.google.com/p/nettopologysuite/)ですが、今日アップデートがあればモバイル版に充てるか、と思って確認したところ、本家側で余裕でPCLに対応していました！

しかも、.NET版の[Proj.4](http://trac.osgeo.org/proj/)(地図座標/投影系変換ライブラリ)にあたるProj.NETのPCL化のおまけつき！

サイトの指示通り、

```shell-session
$ svn checkout http://nettopologysuite.googlecode.com/svn/trunk/ nettopologysuite-read-only
```

で落としてやって、Xamarin Studioで開いてやると、

![NetTopologySuite/PCL](https://qiita-image-store.s3.amazonaws.com/0/10108/be1b27d4-d41b-b5cf-2ecb-3742c6f2b566.png)

輝かしいPCLの文字が！
この辺コンパイルしてやると、dllとして普通にXamarin.iOS/Androidに組み込めます。
自分の暫定コンパイル版作った際に、テストした図形演算の実行結果：

```shell-session:Android版実行結果
Intersection - POLYGON ((35 138, 35.666666666666664 138, 36 137, 35 137, 35 138))
Union - POLYGON ((34 136, 34 138, 35 138, 35 140, 35.666666666666664 138, 37 138, 37 136, 34 136))
SymmetricDifference - MULTIPOLYGON (((34 136, 34 138, 35 138, 35 137, 36 137, 35.666666666666664 138, 37 138, 37 136, 34 136)), ((35.666666666666664 138, 35 138, 35 140, 35.666666666666664 138)))
Difference - POLYGON ((34 136, 34 138, 35 138, 35 137, 36 137, 35.666666666666664 138, 37 138, 37 136, 34 136))
Buffer - POLYGON ((36.474341649025256 137.15811388300841, 36.495617628087523 137.06605427108747, 36.499194825230774 136.97163582430565, 36.484945496749909 136.87823027805737, 36.453378494112243 136.78917319649409, 36.405621092587779 136.70764485766813, 36.343378735620611 136.63655668402956, 36.268874132492371 136.57844727390696, 36.1847678841341 136.53539174674506, 36.0940634715831 136.5089276394321, 36 136.5, 35 136.5, 34.902454838991936 136.50960735979839, 34.808658283817458 136.53806023374435, 34.722214883490196 136.58426519384872, 34.646446609406723 136.64644660940672, 34.584265193848729 136.72221488349021, 34.538060233744353 136.80865828381746, 34.509607359798387 136.90245483899193, 34.5 137, 34.5 140, 34.510107989507731 140.10002908604923, 34.54002327222338 140.19601380028945, 34.588536314691694 140.28407329278286, 34.653685639615645 140.3606471458248, 34.732837132224162 140.42263932860277, 34.822790542690022 140.46754337578443, 34.919908878496521 140.49354372881874, 35.020265455166296 140.499589142523
```

```shell-session:iOS版実行結果
2014-05-21 03:36:26.037 NTSTestTouch[4633:70b] Intersection - POLYGON ((35 138, 35.666666666666664 138, 36 137, 35 137, 35 138))
2014-05-21 03:36:26.040 NTSTestTouch[4633:70b] Union - POLYGON ((34 136, 34 138, 35 138, 35 140, 35.666666666666664 138, 37 138, 37 136, 34 136))
2014-05-21 03:36:26.044 NTSTestTouch[4633:70b] SymmetricDifference - MULTIPOLYGON (((34 136, 34 138, 35 138, 35 137, 36 137, 35.666666666666664 138, 37 138, 37 136, 34 136)), ((35.666666666666664 138, 35 138, 35 140, 35.666666666666664 138)))
2014-05-21 03:36:26.046 NTSTestTouch[4633:70b] Difference - POLYGON ((34 136, 34 138, 35 138, 35 137, 36 137, 35.666666666666664 138, 37 138, 37 136, 34 136))
2014-05-21 03:36:26.082 NTSTestTouch[4633:70b] Buffer - POLYGON ((36.474341649025256 137.15811388300841, 36.495617628087523 137.06605427108747, 36.499194825230774 136.97163582430565, 36.484945496749909 136.87823027805737, 36.453378494112243 136.78917319649409, 36.405621092587779 136.70764485766813, 36.343378735620611 136.63655668402956, 36.268874132492371 136.57844727390696, 36.1847678841341 136.53539174674506, 36.0940634715831 136.5089276394321, 36 136.5, 35 136.5, 34.902454838991936 136.50960735979839, 34.808658283817458 136.53806023374435, 34.722214883490196 136.58426519384872, 34.646446609406723 136.64644660940672, 34.584265193848729 136.72221488349021, 34.538060233744353 136.80865828381746, 34.509607359798387 136.90245483899193, 34.5 137, 34.5 140, 34.510107989507731 140.10002908604923, 34.54002327222338 140.19601380028945, 34.588536314691694 140.28407329278286, 34.653685639615645 140.3606471458248, 34.732837132224162 140.42263932860277, 34.822790542690022 140.46754337578443, 34.919908878496521 140.49354372881874, 35.020265455166296 140.49958914252304, 35.119802659803312 140.48543518898413, 35.214496008327167 140.45165414025746, 35.300516863244532 140.39961183028743, 35.374387232959613 140.33141243156655, 35.43312039378435 140.24981337932164, 35.474341649025256 140.15811388300841, 36.474341649025256 137.15811388300841))
```

問題なく動いてます。

GISerならこんなん手に入ったら、うおお、何作ろー、とワクテカするようなものが普通に公式に、Xamarinモバイルの世界に参入してきたわけですが、GISer×Xamarinな人がまだ私とあめいさんくらいしかいなくて、素晴らしさがおそらく伝わらないのが残念です。
あと、まだNugetにはPCL版が反映されてないみたいです…。さっき試してみたけどエラー出た。