簡體   English   中英

查詢Overpass API,用於跨越橋梁/鐵路的道路

[英]Query Overpass API for roads with crossing bridges/railways

我正在嘗試通過Overpass API查詢OpenStreetMaps。

我想要查詢的是一個邊界框內的道路,這個道路上面有任何類型的橋梁,如鐵路橋梁等。

我找到了這個例子,這正是我需要的: http//maxheight.bplaced.net/overpass/map.html

所以,我得到的查詢看起來像這樣:

鐵路橋梁在立交橋渦輪的看法

<osm-script output="json" timeout="25">

  <!-- Railway bridges -->
  <query type="way">
    <has-kv k="bridge" regv="^(yes|viaduct)$"/>
    <has-kv k="railway" />      
    <bbox-query {{bbox}}/>
  </query>

  <!-- Find roads below the above railway bridges -->
  <query type="way">
    <around radius="0" />
    <has-kv k="highway" regv="^((primary|secondary|tertiary|trunk)(_link)?|service|residential|unclassified)$"/>
    <has-kv k="maxheight" modv="not" regv="." />
    <has-kv k="maxheight:physical" modv="not" regv="." />
    <has-kv k="tunnel" modv="not" regv="." />
  </query>

  <union>
    <item />
    <recurse type="way-node"/>
  </union>

  <!-- print results -->
  <print mode="body"/>
  <recurse type="down"/>
  <print mode="skeleton" order="quadtile"/>
</osm-script>

其他briges 在Overpass Turbo中查看

<osm-script output="json" timeout="25">

  <!-- Bridges -->
  <query type="way">
    <has-kv k="bridge" regv="^(yes|viaduct)$"/>
    <has-kv k="railway" modv="not" regv="." />      
    <bbox-query {{bbox}}/>
  </query>

  <!-- Find roads below the above bridges -->
  <query type="way">
    <around radius="0" />
    <has-kv k="highway" regv="^((primary|secondary|tertiary|trunk)(_link)?|service|residential|unclassified)$"/>
    <has-kv k="maxheight" modv="not" regv="." />
    <has-kv k="maxheight:physical" modv="not" regv="." />
    <has-kv k="tunnel" modv="not" regv="." />
  </query>

  <union>
    <item />
    <recurse type="way-node"/>
  </union>

  <!-- print results -->
  <print mode="body"/>
  <recurse type="down"/>
  <print mode="skeleton" order="quadtile"/>
</osm-script>

問題是第二個查詢。 它應該找到穿過道路的橋梁和下面的伴隨道路。

它現在所做的就是返回所有的橋梁,除了鐵路橋梁 - 這意味着它突出了一條道路,下面有一條自行車道,一條穿越湖泊的道路 - 它不應該。

我今天注意到這一點,當我開車經過一個突出顯示的位置時,發現它只是一條自行車道。

關於上述擬議方法的一些評論:

  • Maxheight Map希望幫助找到缺少最大高度信息的街道,這對卡車路線非常重要。 如果我正確使用您的用例,您想了解橋梁交叉的所有道路。 目前,您的查詢不會顯示任何道路,其中已經保留了最大高度信息。 如果在查詢中刪除對“maxheight”和“maxheight:physical”標記的限制,這很容易解決。

  • 如前所述,Maxheight Map將多個圖層合並為一個Query。 但它也會將一個大的邊界框(bbox)打成小塊。 上面發布的XML查詢在UNION操作中有4個相同的部分,這使得事情看起來過於復雜。 事實上,就您的用例而言,您可以采用更簡單的方法(見下文)。

  • 您不必將查詢轉換為XML格式。 Overpass QL(查詢語言)非常適用於Overpass API,當然還有Overpass Turbo。

  • 根據過去Maxheight Map的經驗,Overpass API不會為您提供您要求的解決方案,而無需對結果進行后處理。 如果您熟悉OpenLayers,您可能需要查看我使用的邏輯 基本上你只需要在內點找到交點,類似於想要PostGIS函數st_crosses。 此外,您還必須考慮每種方式的“圖層”信息。

一個非常簡化的版本(Overpass Turbo)可能看起來像這樣。 但是,您需要確保實際的高速公路/橋梁類型符合您的要求,當然不要忘記對結果進行后處理。 沒有它,您的查詢結果將包含大量誤報。

((way({{bbox}})[bridge~"^(yes|viaduct)$"];way(around:0)[highway~"^((primary|secondary|tertiary|trunk)(_link)?|service|residential|unclassified)$"][tunnel!~"."]);>;);out;

正確的查詢是這樣的。 它不僅適用於跨越道路的橋梁,它還將兩者結合為一個查詢。

我在OSM Truck QA Map上監控網絡,抓取了Overpass API請求的POST數據。

我使用Overpass QL轉換器將其轉換為XML。

在Overpass Turbo中查看查詢

<osm-script output="json" timeout="20">
  <union into="_">
    <union into="_">
      <union into="_">
        <query into="_" type="way">
          <bbox-query {{bbox}}/>
          <has-kv k="bridge" modv="" regv="^(yes|viaduct)$"/>
          <has-kv k="railway" modv="" v=""/>
        </query>
        <query into="_" type="way">
          <around from="_" into="_" lat="" lon="" radius="0"/>
          <has-kv k="highway" modv="" regv="^((primary|secondary|tertiary|trunk)(_link)?|service|residential|unclassified)$"/>
          <has-kv k="maxheight" modv="not" regv="."/>
          <has-kv k="maxheight:physical" modv="not" regv="."/>
          <has-kv k="tunnel" modv="not" regv="."/>
        </query>
      </union>
      <recurse from="_" into="_" type="down"/>
    </union>
    <union into="_">
      <union into="_">
        <query into="_" type="way">
          <bbox-query {{bbox}}/>
          <has-kv k="bridge" modv="" regv="^(yes|viaduct)$"/>
          <has-kv k="railway" modv="" v=""/>
        </query>
        <query into="_" type="way">
          <around from="_" into="_" lat="" lon="" radius="0"/>
          <has-kv k="highway" modv="" regv="^((primary|secondary|tertiary|trunk)(_link)?|service|residential|unclassified)$"/>
          <has-kv k="maxheight" modv="not" regv="."/>
          <has-kv k="maxheight:physical" modv="not" regv="."/>
          <has-kv k="tunnel" modv="not" regv="."/>
        </query>
      </union>
      <recurse from="_" into="_" type="down"/>
    </union>
    <union into="_">
      <union into="_">
        <query into="_" type="way">
          <bbox-query {{bbox}}/>
          <has-kv k="bridge" modv="" regv="^(yes|viaduct)$"/>
          <has-kv k="railway" modv="" v=""/>
        </query>
        <query into="_" type="way">
          <around from="_" into="_" lat="" lon="" radius="0"/>
          <has-kv k="highway" modv="" regv="^((primary|secondary|tertiary|trunk)(_link)?|service|residential|unclassified)$"/>
          <has-kv k="maxheight" modv="not" regv="."/>
          <has-kv k="maxheight:physical" modv="not" regv="."/>
          <has-kv k="tunnel" modv="not" regv="."/>
        </query>
      </union>
      <recurse from="_" into="_" type="down"/>
    </union>
    <union into="_">
      <union into="_">
        <query into="_" type="way">
          <bbox-query {{bbox}}/>
          <has-kv k="bridge" modv="" regv="^(yes|viaduct)$"/>
          <has-kv k="railway" modv="" v=""/>
        </query>
        <query into="_" type="way">
          <around from="_" into="_" lat="" lon="" radius="0"/>
          <has-kv k="highway" modv="" regv="^((primary|secondary|tertiary|trunk)(_link)?|service|residential|unclassified)$"/>
          <has-kv k="maxheight" modv="not" regv="."/>
          <has-kv k="maxheight:physical" modv="not" regv="."/>
          <has-kv k="tunnel" modv="not" regv="."/>
        </query>
      </union>
      <recurse from="_" into="_" type="down"/>
    </union>
  </union>
  <print from="_" limit="" mode="body" order="id"/>
</osm-script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM