---
# System prepended metadata

title: 解決iD上傳的衝突(已解決)
tags: [Project, hackpad]

---

---
title: "解決iD上傳的衝突(已解決)"
tags: Project,hackpad
---

# 解決iD上傳的衝突(已解決)

> [點此觀看原始內容](https://osmtw.hackpad.tw/pISINgmW01z)

解決iD上傳的衝突(已解決)

[https://www.facebook.com/mcdlee/posts/10204308597859719](https://www.facebook.com/mcdlee/posts/10204308597859719)
@劉婕昕 和 [黃裕翔](https://www.facebook.com/yellowsoarfb) 發現從 iD 的頁面 source 可以呈現正在編輯的 [‪#‎](https://www.facebook.com/hashtag/osm?source=feed_text&story_id=10204308597859719)OSM‬ 圖資，也許可以藉此保留.osm，減輕編輯衝突的損失。

## 以Chrome為例

### 取得iD編輯內容

當iD因衝突而無法上傳編輯內容的時候，可以透過右鍵選單的檢閱元素功能，在Resources分類底下Local Storage中的osm項目中，找到以「id_網址」為名的Key項目之Value內容。

### 格式轉換

將之轉換為符合xml格式之「.osm」檔案(參考:[http://wiki.openstreetmap.org/wiki/JOSM\_file\_format](http://wiki.openstreetmap.org/wiki/JOSM_file_format))，如此便可以透過JOSM解決iD上傳問題。


### Javascript library

iD Editor 有個 API 叫做 connection.osmChangeJXON(changeset_id, changes) 可以生成 [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)  XML 檔案。

原始上傳程式碼，理論上會存成一組 changeset, 如果知道 changeset id，可以直接下載。
> 如果有衝突就不會上傳，不會上傳應該就不會有changset，那應該就抓不到changset id了？＠＠
> [name=yellowsoar]

```
    connection.putChangeset = function(changes, comment, imageryUsed, callback) {
        oauth.xhr({
                method: 'PUT',
                path: '/api/0.6/changeset/create',
                options: { header: { 'Content-Type': 'text/xml' } },
                content: JXON.stringify(connection.changesetJXON(connection.changesetTags(comment, imageryUsed)))
            }, function(err, changeset_id) {
                if (err) return callback(err);
                oauth.xhr({
                    method: 'POST',
                    path: '/api/0.6/changeset/' + changeset_id + '/upload',
                    options: { header: { 'Content-Type': 'text/xml' } },
                    content: JXON.stringify(connection.osmChangeJXON(changeset_id, changes))
                }, function(err) {
                    if (err) return callback(err);
                    oauth.xhr({
                        method: 'PUT',
                        path: '/api/0.6/changeset/' + changeset_id + '/close'
                    }, function(err) {
                        callback(err, changeset_id);
                    });
                });
            });
    };

```
## 結案

iD在某個版本(待查)，加入編輯衝突的處理機制

