mirror of
https://github.com/FoggedLens/iD.git
synced 2026-03-05 19:01:30 +00:00
70 lines
2.9 KiB
Markdown
70 lines
2.9 KiB
Markdown
iD - friendly JavaScript editor for OpenStreetMap
|
|
=================================================
|
|
|
|
Basics
|
|
------
|
|
* iD is a JavaScript-based [OpenStreetMap](http://www.openstreetmap.us/) editor.
|
|
* It's intentionally simple. This is not a 90% editor -
|
|
not even a 70% editor. It should let you do the most basic tasks while
|
|
not breaking other people's data. Nothing more. (Same goes for the code,
|
|
so go easy on the abstraction. :) )
|
|
* Speaking of percentages, it's about 1% complete.
|
|
* The licence of iD is [WTFPL](http://sam.zoy.org/wtfpl/), though obviously, if you want to dual-license
|
|
any contributions that's cool.
|
|
|
|
Architecture
|
|
------------
|
|
|
|
* iD uses [d3js](http://d3js.org/) for graphics & managing databindings to the
|
|
map. There's a tiny tiled-map core, but the majority of the action is in
|
|
dynamic rendering of the editable map data.
|
|
* This project aims to create a usable object model of [OpenStreetMap data](http://wiki.openstreetmap.org/wiki/Tags)
|
|
in Javascript that can be transformed by actions and serialized back into
|
|
[changesets](http://wiki.openstreetmap.org/wiki/Changeset)
|
|
|
|
Getting started
|
|
---------------
|
|
* Fork it and start playing!
|
|
* Read the [live docs](http://www.geowiki.com/docs/), generated from source every hour.
|
|
* All the code is in js/iD.
|
|
|
|
|
|
How it works
|
|
------------
|
|
The code works similarly to [Potlatch 2](http://wiki.openstreetmap.org/wiki/Potlatch_2),
|
|
but with a bit less abstraction. So, we have:
|
|
|
|
* Connection: stores, fetches and saves data. (iD/Connection.js)
|
|
* Entity (Node, Way, Relation): the data objects. (iD/Entity.js)
|
|
* EntityUI (NodeUI, WayUI): the rendered graphic elements. (iD/renderer/...)
|
|
* Map: the displayed map on which EntityUIs are rendered. (iD/renderer/Map.js)
|
|
* Controller: the heart of the app, which does its work via...
|
|
* ControllerState: the current UI mode. ControllerStates decide what to do in
|
|
response to mouse/keyboard events. (iD/controller/...)
|
|
* UndoableAction: the code to actually change the data, as fired by
|
|
ControllerStates. (iD/actions/...)
|
|
|
|
The UI is much more modal than Potlatch 2. In particular there's a "draw shape"
|
|
mode (the "Add road or shape" button) and an "edit object" mode. The directory
|
|
structure of iD/controller reflects this.
|
|
|
|
As well as the [live docs](http://www.geowiki.com/docs/), you'll find
|
|
various notes and comments in the docs/ folder. Feel free to add to these.
|
|
|
|
|
|
Getting started
|
|
---------------
|
|
Most of the interesting code is in the ControllerStates, which live in
|
|
iD/controller/. Each one corresponds to a UI mode (e.g. "drawing a way").
|
|
Its EntityMouseEvent method takes the user's mouse event (e.g. "clicked on
|
|
a node"), carries out any actions, and returns the new ControllerState
|
|
(which might just be 'this', i.e. carry on with the current state).
|
|
|
|
|
|
Coding tips
|
|
-----------
|
|
|
|
Come on in, the water's lovely. More help? Ping RichardF on IRC
|
|
(irc.oftc.net, in #osm-dev or #osm), on the OSM mailing lists or at
|
|
richard@systemeD.net.
|