質問編集履歴
2
検証した内容を記載
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でもいい
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)
|