[转]osm基础概念理解
<div id="cnblogs_post_body" class="blogpost-body cnblogs-markdown"><h1 id="一osm是什么">一、OSM是什么</h1>
<pre><code class="hljs groovy"> 开放街道图(OpenStreetMap,简称OSM)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图(wiki:<span class="hljs-string">http:</span><span class="hljs-comment">//wiki.openstreetmap.org/wiki/Main_Page)。尤其值得称道的是,osm数据开源,可以自由下载使用。</span></code></pre>
<h1 id="二osm数据结构">二、OSM数据结构</h1>
<pre><code class="hljs groovy"> OpenStreetMap包括空间数据以及属性数据。其中空间数据主要包括三种:点(Nodes)、路(Ways)和关系(Relations),这三种原始构成了整个地图画面。其中,Nodes定义了空间中点的位置;Ways定义了线或区域;Relations(可选的)定义了元素间的关系。
属性数据Tags用于描述上述矢量数据基元。(<span class="hljs-string">http:</span><span class="hljs-comment">//wiki.openstreetmap.org/wiki/Elements)</span></code></pre>
<h2 id="node">2.1. Node</h2>
<pre><code class="hljs markdown"> node通过经纬度定义了一个地理坐标点。同时,还可以height=<span class="hljs-emphasis">*标示物体所海拔;通过layer=*</span> 和 level=<span class="hljs-emphasis">*,可以标示物体所在的地图层面与所在建筑物内的层数;通过place=*</span> and name=*来表示对象的名称。同时,way也是通过多个点(node)连接成线(面)来构成的。</code></pre>
<h2 id="way">2.2. Way</h2>
<pre><code class="hljs swift"> 通过<span class="hljs-number">2</span>-<span class="hljs-number">2000</span>个点(nodes)构成了way。way可表示如下<span class="hljs-number">3</span>种图形事物(非闭合线(<span class="hljs-type">Open</span> polyline )、闭合线(<span class="hljs-type">Closed</span> polyline)、区域(<span class="hljs-type">Area</span> ))。对于超过<span class="hljs-number">2000</span> nodes的way,可以通过分割来处理。
a)<span class="hljs-type">Open</span> polyline
非闭合线:收尾不闭合的线段。通常可用于表示现实中的道路、河流、铁路等。
b)<span class="hljs-type">Closed</span> polyline
闭合线:收尾相连的线。例如可以表示现实中的环线地铁。
<span class="hljs-built_in">c</span>)<span class="hljs-type">Area</span>
区域:闭合区域。通常使用landuse=* 来标示区域等。 </code></pre>
<h2 id="relation">2.3. Relation</h2>
<pre><code class="hljs swift"> 一个<span class="hljs-type">Relation</span>是用来描述两个或多个基元的相互关系(nodes, ways 或者其他的relations),相互的关系通过role来定义,包括:
a)route :定义公路、自行车道、铁路等
b)多个多边形:定义area例如建筑、河堤等
<span class="hljs-built_in">c</span>)边界:装门用来定义行政边界
d)限制:用于描述限制比如“非左转”</code></pre>
<h2 id="tag">2.4. Tag</h2>
<pre><code class="hljs groovy"> 标签不是地图基本元素,但是各元素都通过tag来记录数据信息。通过<span class="hljs-string">'key'</span> and a <span class="hljs-string">'value'</span>来对数据进行记录(了解xml或者数据库的应该都比较清楚了吧?)。例如,可以通过highway=residential来定义居住区道路;同时,可以使用附加的命名空间来添加附加信息,例如:<span class="hljs-string">maxspeed:</span>winter=*就表示冬天的最高限速。Tag更多内容见:<span class="hljs-string">http:</span><span class="hljs-comment">//wiki.openstreetmap.org/wiki/Map_Features</span></code></pre>
<p>osm2pgsql -d geodb -U geodb ~/Second/osm_data/chind.pbf</p>
<h2 id="注">注:</h2>
<p>osm2pgsql导入数据有两种模式, normal and slim mode。<br>
normal mode会在内存中产生如下三张中间表,并在导入结束后丢弃,因此速度较快。<br>
planet_osm_nodes<br>
planet_osm_ways<br>
planet_osm_rels<br>
而slim mode则将中间结果完全放置到数据库中。slim模式的好处是方便更新。<br>
两者使用的区别在于是否加“-s”,加了表示slimmode,本文使用slim mode。<br>
使用slim mode导入数据后在数据库中会产生如下表。</p>
</div>
作者:墨梅
转自:http://www.cnblogs.com/xiwang/

浙公网安备 33010602011771号