teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

見直しキャンペーン中

2023/07/27 13:40

投稿

TN8001
TN8001

スコア10108

answer CHANGED
@@ -1,129 +1,129 @@
1
- > 複数のPlacemarkのラグを保持したKMLファイルを作りたいです。
2
-
3
- タグですかね?
4
- KMLについてまったくわかっていませんが、こうなればいいんでしょうか?(固定値で関係ない部分は省略)
5
- ```xml
6
- <?xml version="1.0" encoding="utf-8"?>
7
- <kml xmlns="http://www.opengis.net/kml/2.2">
8
- <Document>
9
- <Folder>
10
- <Placemark>
11
- <LookAt>
12
- <longitude>135</longitude>
13
- <latitude>35</latitude>
14
- <altitude>17</altitude>
15
- </LookAt>
16
- <Point>
17
- <coordinates>135,35,17</coordinates>
18
- </Point>
19
- </Placemark>
20
- <Placemark>
21
- <LookAt>
22
- <longitude>132</longitude>
23
- <latitude>35</latitude>
24
- <altitude>17</altitude>
25
- </LookAt>
26
- <Point>
27
- <coordinates>132,35,17</coordinates>
28
- </Point>
29
- </Placemark>
30
- <Placemark>
31
- <LookAt>
32
- <longitude>131</longitude>
33
- <latitude>35</latitude>
34
- <altitude>17</altitude>
35
- </LookAt>
36
- <Point>
37
- <coordinates>131,35,17</coordinates>
38
- </Point>
39
- </Placemark>
40
- </Folder>
41
- </Document>
42
- </kml>
43
- ```
44
-
45
- だとして、
46
- 方針としては`Placemark`以外の部分をまず作ってしまいます。
47
- その後`Folder`を取得し、必要分`Placemark`を追加します。
48
-
49
- ```C#
50
- using System.Linq;
51
- using System.Xml.Linq;
52
-
53
- namespace Questions337759
54
- {
55
- class Place
56
- {
57
- public string Lon;
58
- public string Lat;
59
- public string Alt;
60
-
61
- public Place(string lon, string lat, string alt)
62
- => (Lon, Lat, Alt) = (lon, lat, alt);
63
-
64
- public override string ToString() => $"{Lon},{Lat},{Alt}";
65
- }
66
-
67
- class Program
68
- {
69
- static void Main()
70
- {
71
- var placelist = new Place[] {
72
- new Place("135", "35", "17"),
73
- new Place("132", "35", "17"),
74
- new Place("131", "35", "17")
75
- };
76
-
77
- var xml = CreateKml(placelist);
78
- xml.Save(@"KMLSample01.kml");
79
- }
80
-
81
- private static XDocument CreateKml(Place[] placelist)
82
- {
83
- XNamespace ns = "http://www.opengis.net/kml/2.2";
84
-
85
- var xml = new XDocument(
86
- new XDeclaration("1.0", "utf-8", "true"),
87
- new XElement(ns + "kml",
88
- new XAttribute("xmlns", ns),
89
- new XElement(ns + "Document",
90
- new XElement(ns + "name", "KMLSample.kml"),
91
- new XElement(ns + "open", "1"),
92
- new XElement(ns + "Style",
93
- new XElement(ns + "IconStyle",
94
- new XElement(ns + "scale", "3")),
95
- new XElement(ns + "LabelStyle",
96
- new XElement(ns + "scale", "5"))),
97
- new XElement(ns + "Folder",
98
- new XElement(ns + "name", "Kyoto sample"),
99
- new XElement(ns + "open", "1")))));
100
-
101
- var folder = xml.Descendants(ns + "Folder").First();
102
-
103
- foreach (var place in placelist)
104
- {
105
- var placemark = new XElement(ns + "Placemark",
106
- new XElement(ns + "name", "Somewhere of Kyoto"),
107
- new XElement(ns + "description", "Here is Kyoto"),
108
- new XElement(ns + "LookAt",
109
- new XElement(ns + "longitude", place.Lon),
110
- new XElement(ns + "latitude", place.Lat),
111
- new XElement(ns + "altitude", place.Alt),
112
- new XElement(ns + "heading", "0"),
113
- new XElement(ns + "tilt", "0"),
114
- new XElement(ns + "range", "1304.699887442112"),
115
- new XElement(ns + "altitudeMode", "absolute")),
116
- new XElement(ns + "Point",
117
- new XElement(ns + "coordinates", place)));
118
-
119
- folder.Add(placemark);
120
- }
121
-
122
- return xml;
123
- }
124
- }
125
- }
126
- ```
127
-
128
- 説明が足りないとは思うのですが、hangil700さんがどこまでわかっているかがわからないので不明点があればコメントしてください。
1
+ > 複数のPlacemarkのラグを保持したKMLファイルを作りたいです。
2
+
3
+ タグですかね?
4
+ KMLについてまったくわかっていませんが、こうなればいいんでしょうか?(固定値で関係ない部分は省略)
5
+ ```xml
6
+ <?xml version="1.0" encoding="utf-8"?>
7
+ <kml xmlns="http://www.opengis.net/kml/2.2">
8
+ <Document>
9
+ <Folder>
10
+ <Placemark>
11
+ <LookAt>
12
+ <longitude>135</longitude>
13
+ <latitude>35</latitude>
14
+ <altitude>17</altitude>
15
+ </LookAt>
16
+ <Point>
17
+ <coordinates>135,35,17</coordinates>
18
+ </Point>
19
+ </Placemark>
20
+ <Placemark>
21
+ <LookAt>
22
+ <longitude>132</longitude>
23
+ <latitude>35</latitude>
24
+ <altitude>17</altitude>
25
+ </LookAt>
26
+ <Point>
27
+ <coordinates>132,35,17</coordinates>
28
+ </Point>
29
+ </Placemark>
30
+ <Placemark>
31
+ <LookAt>
32
+ <longitude>131</longitude>
33
+ <latitude>35</latitude>
34
+ <altitude>17</altitude>
35
+ </LookAt>
36
+ <Point>
37
+ <coordinates>131,35,17</coordinates>
38
+ </Point>
39
+ </Placemark>
40
+ </Folder>
41
+ </Document>
42
+ </kml>
43
+ ```
44
+
45
+ だとして、
46
+ 方針としては`Placemark`以外の部分をまず作ってしまいます。
47
+ その後`Folder`を取得し、必要分`Placemark`を追加します。
48
+
49
+ ```cs
50
+ using System.Linq;
51
+ using System.Xml.Linq;
52
+
53
+ namespace Questions337759
54
+ {
55
+ class Place
56
+ {
57
+ public string Lon;
58
+ public string Lat;
59
+ public string Alt;
60
+
61
+ public Place(string lon, string lat, string alt)
62
+ => (Lon, Lat, Alt) = (lon, lat, alt);
63
+
64
+ public override string ToString() => $"{Lon},{Lat},{Alt}";
65
+ }
66
+
67
+ class Program
68
+ {
69
+ static void Main()
70
+ {
71
+ var placelist = new Place[] {
72
+ new Place("135", "35", "17"),
73
+ new Place("132", "35", "17"),
74
+ new Place("131", "35", "17")
75
+ };
76
+
77
+ var xml = CreateKml(placelist);
78
+ xml.Save(@"KMLSample01.kml");
79
+ }
80
+
81
+ private static XDocument CreateKml(Place[] placelist)
82
+ {
83
+ XNamespace ns = "http://www.opengis.net/kml/2.2";
84
+
85
+ var xml = new XDocument(
86
+ new XDeclaration("1.0", "utf-8", "true"),
87
+ new XElement(ns + "kml",
88
+ new XAttribute("xmlns", ns),
89
+ new XElement(ns + "Document",
90
+ new XElement(ns + "name", "KMLSample.kml"),
91
+ new XElement(ns + "open", "1"),
92
+ new XElement(ns + "Style",
93
+ new XElement(ns + "IconStyle",
94
+ new XElement(ns + "scale", "3")),
95
+ new XElement(ns + "LabelStyle",
96
+ new XElement(ns + "scale", "5"))),
97
+ new XElement(ns + "Folder",
98
+ new XElement(ns + "name", "Kyoto sample"),
99
+ new XElement(ns + "open", "1")))));
100
+
101
+ var folder = xml.Descendants(ns + "Folder").First();
102
+
103
+ foreach (var place in placelist)
104
+ {
105
+ var placemark = new XElement(ns + "Placemark",
106
+ new XElement(ns + "name", "Somewhere of Kyoto"),
107
+ new XElement(ns + "description", "Here is Kyoto"),
108
+ new XElement(ns + "LookAt",
109
+ new XElement(ns + "longitude", place.Lon),
110
+ new XElement(ns + "latitude", place.Lat),
111
+ new XElement(ns + "altitude", place.Alt),
112
+ new XElement(ns + "heading", "0"),
113
+ new XElement(ns + "tilt", "0"),
114
+ new XElement(ns + "range", "1304.699887442112"),
115
+ new XElement(ns + "altitudeMode", "absolute")),
116
+ new XElement(ns + "Point",
117
+ new XElement(ns + "coordinates", place)));
118
+
119
+ folder.Add(placemark);
120
+ }
121
+
122
+ return xml;
123
+ }
124
+ }
125
+ }
126
+ ```
127
+
128
+ 説明が足りないとは思うのですが、hangil700さんがどこまでわかっているかがわからないので不明点があればコメントしてください。
129
129
  説明を追加します。