質問編集履歴

2

検証した内容を記載

2022/03/27 08:09

投稿

xail2222
xail2222

スコア1497

test CHANGED
File without changes
test CHANGED
@@ -8,8 +8,6 @@
8
8
  著作権の問題で、そのまま使えるのが見つけられません。
9
9
  組み込むのが可能な関数等あれば教えてください。
10
10
 
11
-
12
-
13
11
  pyprojというpythonのライブラリがあるので、それを使ってexeを作って
14
12
  それを配布するとかいう方法もあるのかなと思ったりもしています。
15
13
  これのライセンスについてもまだ調べきれていませんが…
@@ -17,8 +15,84 @@
17
15
  .Netでexeを作ってそれを使用するというのでもよいです。
18
16
  ただ、.Netにしてもそこで使える関数とかがわかっていません。
19
17
 
20
- ### 補足情報
18
+ ### 検証
19
+ 緯度:34.68638889
20
+ 経度:135.52
21
+ とした場合
21
22
 
22
23
  [平面直角座標への換算(国土地理院のHP)](https://vldb.gsi.go.jp/sokuchi/surveycalc/surveycalc/bl2xyf.html)
23
24
 
25
+ X座標 -145621.6509
26
+ Y座標 -43980.6301
24
27
 
28
+ となります。
29
+
30
+ (1)
31
+ [Excel VBAで緯度・経度を平面直角座標に変換する](https://neverendworks.com/news/convert-latitude-and-longitude-to-plane-rectangular-coordinates-with-excel-vba/
32
+ )
33
+ の計算式を実行すると
34
+
35
+ X座標 -145621.6508537960
36
+ Y座標 -43980.6300570059
37
+
38
+ 四捨五入で一致となります。
39
+
40
+ …この関数をそのまま使わせてもらえると良い気がするのですが…
41
+
42
+ (2)
43
+ [pyprojで計算]
44
+ ```python
45
+ import pyproj
46
+ transformer = pyproj.Transformer.from_crs("epsg:4326", "epsg:6674", always_xy=True)
47
+ print(transformer.transform(135.52, 34.686388888888885))
48
+ ```
49
+ 結果
50
+ (-43980.63005700818, -145621.65085378708)
51
+
52
+ こちらも四捨五入すると、国土地理院の内容と一致すると考えられるでしょうか…
53
+ なのでこれでも良いと感じています。
54
+
55
+ MITライセンスのようなので、ライセンス表示しておけば配布もできる?
56
+
57
+ これをexe化してExcelから起動して呼び出すので良さそうな気がしているのですが何か問題ないでしょうか?
58
+
59
+ (3)
60
+ [.NetでProj.Netを使う]
61
+ ```VB.Net
62
+ Imports GeoAPI.CoordinateSystems
63
+ Imports GeoAPI.CoordinateSystems.Transformations
64
+ Imports ProjNet.CoordinateSystems
65
+ Imports ProjNet.CoordinateSystems.Transformations
66
+
67
+ Public Class Form1
68
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
69
+ Dim systemfacctory As CoordinateSystemFactory = New CoordinateSystemFactory()
70
+ Dim transformationfactory As CoordinateTransformationFactory = New CoordinateTransformationFactory()
71
+ Dim wgs84geo As ICoordinateSystem = GeographicCoordinateSystem.WGS84
72
+ Dim jgd2000_6 As ICoordinateSystem = systemfacctory.CreateFromWkt("PROJCS[""JGD_2000_Japan_Zone_6"",GEOGCS[""GCS_JGD_2000"",DATUM[""D_JGD_2000"",SPHEROID[""GRS_1980"",6378137.0,298.257222101]],PRIMEM[""Greenwich"",0.0],UNIT[""Degree"",0.0174532925199433]],PROJECTION[""Transverse_Mercator""],PARAMETER[""False_Easting"",0.0],PARAMETER[""False_Northing"",0.0],PARAMETER[""Central_Meridian"",136.0],PARAMETER[""Scale_Factor"",0.9999],PARAMETER[""Latitude_Of_Origin"",36.0],UNIT[""Meter"",1.0]]")
73
+ Dim trans As ICoordinateTransformation = transformationfactory.CreateFromCoordinateSystems(wgs84geo, jgd2000_6)
74
+ Dim point As Double() = {135.52, 34.686388888888885}
75
+ Dim point2 As Double()
76
+ point2 = trans.MathTransform.Transform(point)
77
+ Debug.Print(point2(0) & "," & point2(1))
78
+ End Sub
79
+ End Class
80
+ ```
81
+
82
+ これで取得される結果は
83
+ -43980.6300384157,-145621.646969035
84
+ です。
85
+
86
+ Yの誤差1ミリ弱、Xの誤差30cmと言ったところでしょうか。
87
+
88
+ これは、なぜ誤差が生じるのでしょうか…
89
+
90
+ ### 質問事項まとめ
91
+ とりあえず、現状での疑問点は以下の所です。
92
+ (1)このVBA関数は、使っちゃっても良いのでしょうか。
93
+    やっぱり駄目だと思っているのですが…
94
+ (2)pyprojを使った処理をexe化して呼び出す。
95
+    何か問題あるでしょうか?
96
+ (3).NetでProj.Netを使って計算する内容で誤差が結構あるのは
97
+    どうしてなのでしょうか?
98
+

1

.Netでもいい

2022/03/26 18:32

投稿

xail2222
xail2222

スコア1497

test CHANGED
File without changes
test CHANGED
@@ -14,6 +14,9 @@
14
14
  それを配布するとかいう方法もあるのかなと思ったりもしています。
15
15
  これのライセンスについてもまだ調べきれていませんが…
16
16
 
17
+ .Netでexeを作ってそれを使用するというのでもよいです。
18
+ ただ、.Netにしてもそこで使える関数とかがわかっていません。
19
+
17
20
  ### 補足情報
18
21
 
19
22
  [平面直角座標への換算(国土地理院のHP)](https://vldb.gsi.go.jp/sokuchi/surveycalc/surveycalc/bl2xyf.html)