Я пытаюсь обновить узел, который я создал ранее, через OSM PHP API. Я разработал некоторые функции, которые выполняют некоторые операции CRUD с использованием открытого API карты улиц.
Моя функция обновления получает узел и идентификатор набора изменений для выполнения этой операции, а затем я делаю запрос пут через этот URL /api/0.6/node/#id
$ls_url_update_node = $this->get_api()->get_base_url() . "/api/0.6/node/".$this->get_id();
$lo_requete = Request::put($ls_url_update_node);
$ls_xml_node = $this->generate_xml($po_changeset);
$lo_requete = Request::put($ls_url_update_node)
->sendsType('text/xml')
->addHeader('Authorization', $this->get_api()->get_authorization_header())
->body($ls_xml_node);
$lo_response = $lo_requete->send();
Функция genarate_xml пытается сгенерировать действительный XML, соответствующий спецификациям OSM.
<osm>
<node id="123" lat="..." lon="..." version="142" changeset="12" user="fred" uid="123" visible="true" timestamp="2005-07-30T14:27:12+01:00">
<tag k="note" v="Just a node"/>
...
</node>
</osm>
OSM Api возвращает это сообщение об ошибке: Не удается проанализировать действительный узел из строки XML. Может, я пропустил некоторые различия между созданием и обновлением узла. Так что любая помощь, пожалуйста.
Вы должны отправить свой запрос /api/0.6/changeset/create
, Также он должен содержать <changeset>
элемент. Пожалуйста, обратитесь к Документация API для создания наборов изменений.
Добавление элементов осуществляется путем отправки /api/0.6/[node|way|relation]/create
см API документация для создания элементов. Там вы должны обратиться к ранее открытой ревизии.
Если вы по-прежнему сталкиваетесь с проблемами, возможно, было бы неплохо использовать один из популярных редакторов OSM и просматривать их запросы / ответы через wireshark или аналогичную программу.
Других решений пока нет …