これが超簡単で感激したので、何年かぶりの書込み。。
まずインストールやけど、Nugetパッケージで取れるので、簡単。
Onlineのところで、検索窓に dotspatial で検索、
DotSpatial.Projections をインストール。これだけ。C#のコードは
using DotSpatial.Projections; //先頭で宣言
:
:
//値の準備
double[] lonlat = { 135.654321, 34.123456 }; //経度をセット、経度が先
double[] alt = {0d}; //高度はゼロ固定
ProjectionInfo wgs84 = ProjectionInfo.FromEpsgCode(4326); //WGS84 変換元プロジェクション
ProjectionInfo jdg2000_6 = ProjectionInfo.FromEpsgCode(2448); //測量座標系2000の6系のプロジェクション
//変換
DotSpatial.Projections.Reproject.ReprojectPoints(
lonlat,
alt,
wgs84,
jdg2000_6,
0,
1
);
//これでlonlatが書き換わって返ってくる
Console.Write(lonlat[0]); //これは -31886.089481363244
Console.Write(lonlat[1]); //これは -208112.27778280032
と超楽。この例では1点だけやけど、インテリセンスで出てくる引数を見てると、座標と高さを配列で与えると一括処理もできるみたい。
国土地理院の計算サイトで結果を比較してみると、誤差が出てくるのが0.1ミリのオーダーだったからまあよし。
ただ、東日本大震災でずれた地盤に対応したJGD2011に未対応みたい。(残念)
JGD2011の6系(EPSG 6674)を指定すると、
ProjectionInfo.FromEpsgCode(6674);
まんま、プロジェクションが無いエラーになる。
DotSpatial のサイトでソースを取ってきて、マスターと思われるGDALのファイルとDIFFしてみると、明らかにDotSpatialのファイルが古いみたいで、JGD2011だけじゃなくて6000番台あたりいろいろ無いのがわかる。
定義ファイルが入ってないだけみたいなので、一応Issueに上げておいた。。。
2019/2/2 追記
とりあえずForkして、JGD2011 が使えるもの を作っておいた。