GraphGists

徒步与登山路线规划

领域

珠穆朗玛峰和乔戈里峰可能是喜马拉雅山脉中最广为人知的探险目的地,但喜马拉雅山脉较低的山脉为硬核徒步者、骑行者甚至一些山地自行车爱好者(比如我)提供了更广泛的徒步目的地。徒步路线通常没有文档记录,你需要依赖当地向导或确保有人以前走过这条路线。这些徒步路线会经过一些偏远的小村庄,这些村庄既是补给点,也是路线的标记。同一个目的地有时可以通过不同的路线到达,这取决于能力(攀岩)、交通方式(步行、自行车、SUV)以及季节。

图是表示这些数据并根据你的偏好查找各种目的地路线的理想方式。

sandakphu map

附注:存储 GPS 坐标并将这些信息叠加到地图上也会是一个很好的补充。

设置

示例数据是上述图片的一个子集(我修改了很多数据以演示各种查询)

CREATE (Rimbik:town{name:'Rimbik'})
CREATE (Darjeeling:town{name:'Darjeeling'})
CREATE Darjeeling-[:PublicTransport{distance:15,name:'Darjeeling-Rimbik',summer:'true',winter:'true'}]->Rimbik
CREATE Darjeeling-[:road{distance:15,name:'Darjeeling-Rimbik',summer:'true',winter:'true'}]->Rimbik
CREATE Darjeeling-[:trek{distance:15,name:'Darjeeling-Rimbik',summer:'true',winter:'true'}]->Rimbik
CREATE (BhikeBhanja:village{name:'BhikeBhanja'})
CREATE Rimbik-[:trek{distance:18,name:'Rimbik-BhikeBhanja',summer:'true',winter:'true'}]->BhikeBhanja
CREATE (Sandakphu:peak{name:'Sandakphu',altitude:'12400 ft'})
CREATE BhikeBhanja-[:trek{distance:4,name:'BhikeBhanja-Sandakphu',summer:'true',winter:'true'}]->Sandakphu
CREATE (Sirikhola:village{name:'Sirikhola'})
CREATE Rimbik-[:trek{distance:4,name:'Rimbik-Sirikhola',summer:'true',winter:'true'}]->Sirikhola
CREATE Rimbik-[:twowheeler{distance:4,name:'Rimbik-Sirikhola',summer:'true',winter:'true'}]->Sirikhola
CREATE (Gurdum:village{name:'Gurdum'})
CREATE Sirikhola-[:trek{distance:6,name:'Sirikhola-Gurdum',summer:'true',winter:'true'}]->Gurdum
CREATE Sirikhola-[:twowheeler{distance:6,name:'Sirikhola-Gurdum',summer:'true',winter:'true'}]->Gurdum
CREATE Gurdum-[:trek{distance:12,name:'Gurdum-Sandakphu',summer:'true',winter:'true'}]->Sandakphu
CREATE Gurdum-[:twowheeler{distance:12,name:'Gurdum-Sandakphu',summer:'true',winter:'true'}]->Sandakphu
CREATE (Tumbling:village{name:'Tumbling'})
CREATE Darjeeling-[:trek{distance:10,name:'Darjeeling-Tumbling',summer:'false',winter:'true'}]->Tumbling
CREATE Darjeeling-[:road{distance:10,name:'Darjeeling-Tumbling',summer:'false',winter:'true'}]->Tumbling
CREATE (Gairibus:village{name:'Gairibus'})
CREATE Tumbling-[:trek{distance:8,name:'Tumbling-Gairibus',summer:'true',winter:'true'}]->Gairibus
CREATE Tumbling-[:road{distance:8,name:'Tumbling-Gairibus',summer:'true',winter:'true'}]->Gairibus
CREATE Tumbling-[:twowheeler{distance:8,name:'Tumbling-Gairibus',summer:'true',winter:'true'}]->Gairibus
CREATE Rimbik-[:trek{distance:7,name:'Rimbik-Tumbling',summer:'false',winter:'true'}]->Tumbling
CREATE Gairibus-[:trek{distance:10,name:'Gairibus-BhikeBhanja',summer:'true',winter:'true'}]->BhikeBhanja
CREATE Gairibus-[:road{distance:10,name:'Gairibus-BhikeBhanja',summer:'true',winter:'true'}]->BhikeBhanja
CREATE Gairibus-[:twowheeler{distance:10,name:'Gairibus-BhikeBhanja',summer:'true',winter:'true'}]->BhikeBhanja
CREATE (Rammam:village{name:'Rammam'})
CREATE Sirikhola-[:trek{distance:7,name:'Sirikhola-Rammam',summer:'true',winter:'true'}]->Rammam
CREATE Sirikhola-[:twowheeler{distance:7,name:'Sirikhola-Rammam',summer:'true',winter:'true'}]->Rammam
CREATE Rammam-[:trek{distance:10,name:'Rammam-Gurdum',summer:'false',winter:'true'}]->Gurdum
CREATE Rammam-[:road{distance:10,name:'Rammam-Gurdum',summer:'false',winter:'true'}]->Gurdum
CREATE Rammam-[:twowheeler{distance:10,name:'Rammam-Gurdum',summer:'false',winter:'true'}]->Gurdum
CREATE (Sabargram:peak{name:'Sabargram',altitude:'10000 ft'})
CREATE Rammam-[:trek{distance:14,name:'Rammam-Sabargram',summer:'true',winter:'true'}]->Sabargram
CREATE Sabargram-[:trek{distance:15,name:'Rammam-Sabargram',summer:'true',winter:'true'}]->Sandakphu

图解释

城镇是可以乘坐公共交通工具到达的地方,探险从城镇开始,在山顶结束。村庄是中间点。

节点之间不同类型的路线由关系表示。共有 4 种类型的关系(徒步、两轮车、公路、公共交通)。请参见此 gist 中的第一张图片以了解概念。

节点之间关系的示例。

MATCH (a:village { name: 'Sirikhola' }),(b:village{ name: 'Gurdum' }) MATCH (a)-[r]->(b) RETURN r

用例

列出所有山峰

MATCH (p:peak) return p.name,p.altitude

找到我可以骑行探险到达的所有山峰

MATCH (p:peak)-[:twowheeler*]-(t:town)
return DISTINCT(p.name)

列出所有通往 Sandakphu 自行车路线的起始城镇

MATCH (p:peak{name:'Sandakphu'})-[:twowheeler*]-(t:town) return DISTINCT(t.name)

给我从 Rimbik 出发的所有完整路线

MATCH (p:peak{name:'Sandakphu'})-[r:twowheeler*]-(t:town{name:'Rimbik'}) return distinct(r)

但是这些路线在夏季开放吗?

MATCH (p:peak{name:'Sandakphu'})-[r:twowheeler*{summer:'true'}]-(t:town{name:'Rimbik'}) return distinct(r)

太棒了,我现在就出发!!

为我找到冬季通往 Sandakphu 的汽车路线

MATCH (p:peak{name:'Sandakphu'})-[r:road*{winter:'true'}]-(t:town) return distinct(t.name)

没有?好吧,我不介意停车后徒步最后一段到达山顶。

MATCH (p:peak{name:'Sandakphu'})-[r:trek*{winter:'true'}]-(v:village)-[r2:road*]-(t:town) return distinct(t.name)

给我从 Darjeeling 到 Sandakphu 的上述路线

MATCH (p:peak{name:'Sandakphu'})<-[r:trek*{winter:'true'}]-(v:village)<-[r2:road*]-(t:town{name:'Darjeeling'})
return r,r2

我有 3 个选项,所以我选择徒步最少的那条(结果中 r 是徒步路段,r2 是公路路段)我将乘坐汽车从 Darjeeling-Tumbling-Gairibus-BhikeBhanja,最后从 BhikeBhanja-Sandakphu 步行!!

==