日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OSM数据分析及图形化显示以及各组员之间的关系Relation的存储

發(fā)布時(shí)間:2024/1/8 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OSM数据分析及图形化显示以及各组员之间的关系Relation的存储 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

OpenStreetMap(OSM)

?

?

?

https://wiki.openstreetmap.org/wiki/Elements

?

?

?

OSM雖然是簡(jiǎn)稱,但如果賦予數(shù)據(jù)的話,它就是一種格式,格式以.osm結(jié)尾,其元素有

?

?

三大元素:

1. Node --- ? 二維幾何形態(tài)的最最基本的組成元素,點(diǎn)Point,橫坐標(biāo):維度(lat) 縱坐標(biāo):經(jīng)度(lon)

2. Way ?--- ? ?由N個(gè)Node組成,可以是閉合的多邊形(Polygon)、非閉合的LineString,或者其他

3. Relation -- 關(guān)系,引用的成員包含Node、Way、甚至是一個(gè)Relation

4. Tag ? ? --- ?Element的屬性標(biāo)簽,單純的Node、Way或者Relation沒有任何意義,只存在幾何形態(tài)geometry,只有通過tag標(biāo)簽的k-v鍵值對(duì)的值,我們才知道Node代表什么,Way表示的是一個(gè)體育場(chǎng)還是一個(gè)耕地,或者Relation是一個(gè)地鐵站還是一個(gè)片區(qū)

?

?

我們針對(duì)官網(wǎng),導(dǎo)出一個(gè)簡(jiǎn)單的片區(qū),具體操作如下

?

?

1.注冊(cè)一個(gè)用戶,在官網(wǎng)上搜索"北京市",定位到故宮這塊

?

?

2.手動(dòng)選擇要導(dǎo)出的區(qū)域

?

?

?

3.導(dǎo)出

?

?

?

4.文本編輯工具打開 "gugong.osm",大致瀏覽下其xml構(gòu)造

?

A.node

?

B.way

?

?

C.Relation

?

?

我們發(fā)現(xiàn),這種結(jié)構(gòu)其實(shí)很簡(jiǎn)單,最開始document元素是node,上面說過了node是最基礎(chǔ)的幾何形態(tài)點(diǎn)的表示,因此,先有node,緊接著就是way,高級(jí)一點(diǎn)的就是relation。

如果用Java面向?qū)ο蟮乃枷攵x上述三個(gè)element的話,就是,OsmNode、OsmWay、OsmRelation

但是僅此是無法描述OsmNode和OsmWay之間的關(guān)系,比如Way里面引用了N個(gè)Node,同理,也無法描述OsmRelation與OsmNode以及OsmWay甚至是和自己(當(dāng)然對(duì)象不是一個(gè)對(duì)象)之間的關(guān)系

為此,我們還需定義兩個(gè)對(duì)象,一個(gè)是OsmWayNodes,描述Way和Node之間的關(guān)系,一個(gè)就是OsmRelationMembers,描述OsmRelation各成員之間的關(guān)系,當(dāng)然members成員又指向 OsmNode、OsmWay或者OsmRelation

?

當(dāng)我們有了XXX.osm數(shù)據(jù)文件后,我們就可以解析其中的XML,當(dāng)然XML的解析數(shù)據(jù)需要映射到Osm對(duì)象上,也就是映射到內(nèi)存中

注意,Osm格式的數(shù)據(jù)是具有拓?fù)潢P(guān)系的,不同于傳統(tǒng)的幾何對(duì)象,它包含了各個(gè)成員之間的引用,而共點(diǎn)是最能闡述這一特性的

?

利用OSM編輯工具,我們可以打開一個(gè)XXX.osm數(shù)據(jù)源進(jìn)行查看和編輯,比如打開剛才的故宮的Osm數(shù)據(jù)

?

?

?

?

我們看到的花花綠綠的顏色,是渲染過的Osm,其真實(shí)數(shù)據(jù)就是一堆XML

?

我們查找并定位到關(guān)系“紫禁城城垣”,看看這個(gè)是個(gè)什么鬼

?

?

?

我們發(fā)現(xiàn),其有兩個(gè)成員,對(duì)比xml里面的members,沒毛病,數(shù)據(jù)對(duì)著的,而且渲染的數(shù)據(jù),屬于這兩個(gè)成員的部分高亮顯示

?

點(diǎn)進(jìn)關(guān)系,進(jìn)一步查看,我們發(fā)現(xiàn)成員是由兩個(gè)內(nèi)城墻和外城墻組成的,因?yàn)楦吡?#xff0c;我們很容易讀懂Relation是什么

?

?

這是渲染過的數(shù)據(jù),沒渲染的數(shù)據(jù)長(zhǎng)什么樣了?

?

我們使用GeoTools工具包里面的JMapFrame,來加載我們的本地osm數(shù)據(jù)如下

?

?

?

?

?

當(dāng)然,通過解析XML數(shù)據(jù),我們可以很容易的構(gòu)造Osm對(duì)象,有了對(duì)象就可以讀取Relation為”紫禁城城垣“的數(shù)據(jù),并打印其幾何對(duì)象的WKT描述

?

?

具體這個(gè)Relation表示的常規(guī)幾何形態(tài)是什么,我們也可以通過其成員的組成,來構(gòu)建geometry,比如

?

?

?

?

?最后我們看一下,紫禁城城垣“這個(gè)關(guān)系的自定義幾何形態(tài)的WKT文本描述是什么

?

?

RELATION(ID(231743),WAY(ID(42501669),NODE(ID(273144491),POINT(116.390556 39.912297 0.000000)),NODE(ID(273144490),POINT(116.390590 39.911573 0.000000)),NODE(ID(755823888),POINT(116.390390 39.911569 0.000000)),NODE(ID(273144489),POINT(116.390299 39.911570 0.000000)),NODE(ID(486763021),POINT(116.390273 39.912318 0.000000)),NODE(ID(273355452),POINT(116.386601 39.912182 0.000000)),NODE(ID(487060019),POINT(116.386555 39.913202 0.000000)),NODE(ID(487060020),POINT(116.386532 39.913648 0.000000)),NODE(ID(1684331502),POINT(116.386212 39.920595 0.000000)),NODE(ID(273355449),POINT(116.386196 39.920862 0.000000)),NODE(ID(734740359),POINT(116.390258 39.921014 0.000000)),NODE(ID(530743284),POINT(116.390570 39.921022 0.000000)),NODE(ID(734740355),POINT(116.390882 39.921035 0.000000)),NODE(ID(273355450),POINT(116.394968 39.921180 0.000000)),NODE(ID(487060017),POINT(116.395350 39.913911 0.000000)),NODE(ID(487060018),POINT(116.395374 39.913464 0.000000)),NODE(ID(1684381349),POINT(116.395412 39.912781 0.000000)),NODE(ID(273355451),POINT(116.395424 39.912508 0.000000)),NODE(ID(486763020),POINT(116.391750 39.912378 0.000000)),NODE(ID(273144495),POINT(116.391795 39.911595 0.000000)),NODE(ID(273357846),POINT(116.391636 39.911593 0.000000)),NODE(ID(273144494),POINT(116.391479 39.911588 0.000000)),NODE(ID(273144493),POINT(116.391433 39.912318 0.000000)),NODE(ID(273144491),POINT(116.390556 39.912297 0.000000)),ROLE(outer)),WAY(ID(40332723),NODE(ID(486763012),POINT(116.386940 39.912262 0.000000)),NODE(ID(531826618),POINT(116.389438 39.912357 0.000000)),NODE(ID(506819997),POINT(116.389761 39.912369 0.000000)),NODE(ID(486763018),POINT(116.390241 39.912388 0.000000)),NODE(ID(273144497),POINT(116.390228 39.912612 0.000000)),NODE(ID(506827426),POINT(116.391003 39.912636 0.000000)),NODE(ID(273144496),POINT(116.391737 39.912658 0.000000)),NODE(ID(486763016),POINT(116.391755 39.912436 0.000000)),NODE(ID(506819980),POINT(116.392204 39.912452 0.000000)),NODE(ID(533736276),POINT(116.392445 39.912461 0.000000)),NODE(ID(486762974),POINT(116.395072 39.912563 0.000000)),NODE(ID(486762975),POINT(116.395065 39.912756 0.000000)),NODE(ID(486762977),POINT(116.395314 39.912765 0.000000)),NODE(ID(486762978),POINT(116.395278 39.913459 0.000000)),NODE(ID(486762987),POINT(116.395090 39.913456 0.000000)),NODE(ID(511195501),POINT(116.395077 39.913682 0.000000)),NODE(ID(486762988),POINT(116.395065 39.913905 0.000000)),NODE(ID(486762989),POINT(116.395261 39.913910 0.000000)),NODE(ID(511995035),POINT(116.395221 39.914684 0.000000)),NODE(ID(533736392),POINT(116.395198 39.915125 0.000000)),NODE(ID(486762991),POINT(116.394894 39.920913 0.000000)),NODE(ID(486762993),POINT(116.394633 39.920904 0.000000)),NODE(ID(486762995),POINT(116.394626 39.921099 0.000000)),NODE(ID(486762997),POINT(116.390886 39.920969 0.000000)),NODE(ID(512073939),POINT(116.390891 39.920883 0.000000)),NODE(ID(273357088),POINT(116.390896 39.920784 0.000000)),NODE(ID(549604689),POINT(116.390582 39.920776 0.000000)),NODE(ID(273357087),POINT(116.390273 39.920763 0.000000)),NODE(ID(512073940),POINT(116.390267 39.920866 0.000000)),NODE(ID(486762998),POINT(116.390262 39.920945 0.000000)),NODE(ID(486762999),POINT(116.386538 39.920801 0.000000)),NODE(ID(486763000),POINT(116.386543 39.920604 0.000000)),NODE(ID(486763002),POINT(116.386291 39.920598 0.000000)),NODE(ID(528004823),POINT(116.386320 39.919976 0.000000)),NODE(ID(486763004),POINT(116.386612 39.913651 0.000000)),NODE(ID(486763005),POINT(116.386866 39.913658 0.000000)),NODE(ID(511195475),POINT(116.386870 39.913579 0.000000)),NODE(ID(549604474),POINT(116.386875 39.913425 0.000000)),NODE(ID(511195474),POINT(116.386885 39.913283 0.000000)),NODE(ID(486763007),POINT(116.386889 39.913212 0.000000)),NODE(ID(486763009),POINT(116.386641 39.913204 0.000000)),NODE(ID(486763010),POINT(116.386669 39.912444 0.000000)),NODE(ID(486763011),POINT(116.386936 39.912450 0.000000)),NODE(ID(486763012),POINT(116.386940 39.912262 0.000000)),ROLE(inner)))

?

?

?

?

?

最復(fù)雜的Relation解決了后,Osm數(shù)據(jù)就沒有什么值得人害怕的地方了,有了Osm對(duì)象后,下一步就是對(duì)象的存儲(chǔ),以及對(duì)象的查詢渲染,渲染的時(shí)候需要Tag標(biāo)簽元素,由于Tag標(biāo)簽元素過多,不是一兩個(gè)就能說明的,放在以后,慢慢吸收!

?

?

?

Well-known text

?

?

?

總結(jié)

以上是生活随笔為你收集整理的OSM数据分析及图形化显示以及各组员之间的关系Relation的存储的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。