Я пишу класс C ++, который записывает данные в файл KML на лету.
Проблема в том, что мне нужно написать несколько <Point>
элементов внутри <Folder>
и одновременно <LineString>
элемента создать путь, соединяющий эти точки.
My KML
├── Points
| ├── Point 1
| ├── Point 2
| ├── Point 3
| └── ...
|
└── Path
Поскольку я должен делать это на лету, мне нужно найти способ записи в разных частях файла KML, чтобы не путать структуру документа XML.
Например, скажем, что у нас есть 2 балла:
- Первая запись Точка 1 в файле:
<Placemark>
<name>Point 1</name>
<Point>
<coordinates>11.807993,48.171485,536.15</coordinates>
</Point>
</Placemark>
- Затем добавьте его координаты к пути в конце файла:
<Placemark>
<name>Path</name>
<LineString>
<coordinates>
11.807993,48.171485,536.15
</coordinates>
</LineString>
</Placemark>
- Теперь запишите точку 2:
<Placemark>
<name>Point 2</name>
<Point>
<coordinates>11.807978,48.171473,538.92</coordinates>
</Point>
</Placemark>
- и добавить его координаты к пути в конце:
<Placemark>
<name>Path</name>
<LineString>
<coordinates>
11.807993,48.171485,536.15
11.807978,48.171473,538.92
</coordinates>
</LineString>
</Placemark>
И так далее ...
И вот как будет выглядеть итоговый файл KML:
![KML in Google Earth](https://i.stack.imgur.com/nFoob.png)
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<name>My KML</name>
<Folder>
<name>Points</name>
<Placemark>
<name>Point 1</name>
<Point>
<coordinates>11.807993,48.171485,536.15</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Point 2</name>
<Point>
<coordinates>11.807978,48.171473,538.92</coordinates>
</Point>
</Placemark>
</Folder>
<Placemark>
<name>Path</name>
<LineString>
<coordinates>
11.807993,48.171485,536.15
11.807978,48.171473,538.92
</coordinates>
</LineString>
</Placemark>
</Document>
</kml>
Это просто упрощенный пример. В моем реальном сценарии мне придется делать это с тысячами / миллионами очков. Но концепция та же, что и выше.
Поскольку мой код предназначен для работы на устройствах с очень скудными / ограниченными ресурсами памяти, я не могу позволить себе использовать решения, которые предполагают построение некоторой древовидной структуры в памяти и затем сериализацию ее в XML.
Как мне подойти к этому в C ++?
EDIT:
Отвечая на комментарии о ресурсах, я не могу назвать какие-либо конкретные цифры, но узким местом на целевой машине наверняка станет память, поэтому я не могу позволить себе сохранить все координаты в памяти для последующей печати. Я должен напечатать каждую пару координат одну за другой (в режиме онлайн ), используя то же самое пространство памяти для следующей пары координат, чтобы в любой данный момент в памяти была только одна пара координат.
EDIT:
Полагаю, я могу сделать следующий вывод:
Поскольку запись в разных местах одного и того же файла кажется сложной и подверженной ошибкам [1] , сначала выполняется запись в 2 разных файла, а затем их объединение [2] кажется подходом.