1

http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QLによると、 クエリは値とキーの両方で正規表現を使用できます。値に正規表現を使用しても問題はありませんが、キーに問題があります。

上記で参照した wiki の例には、(他の例の中でも) 次のように書かれています。

/* finds addr:* tags with value exactly "Foo" */
node[~"^addr:.*$"~"^Foo$"];    

これは、キーと値に正規表現を使用する例です。

私が興味を持っているのはname鍵です。具体的にはname:en鍵。名前で検索するにはいくつかの問題があります。name:enすべての名前が英語であるとは限りません。名前が英語でないノード/ウェイ/リレーションについては、英語バージョンの名前のタグ があるという保証はありません。

一般的に、名前が英語になるか、name:enタグがあるかを事前に知る方法はありません。nameまたはだけname:enを求めると、ヒットしないリスクがあります。(もちろん、両方を検索しても成功する保証はありません。)

name失敗することはわかっているがname:en成功する場合があります。それが私のテストケースです。これを使用して overpass-api.de/api/interpreter にクエリを実行できます。

[out:json][timeout:25][bbox:33.465530,36.156006,33.608615,36.574516];

(
  node[name~"duma",i][place];
  way[name~"duma",i][place];
  >;
  relation[name~"duma",i][place];
  node["name:en"~"duma",i][place];
  way["name:en"~"duma",i][place];
  >;relation["name:en"~"duma",i][place];
);

out center;

高架道路で見る と問題なく動作します (「duma」は では見つかりませんがname、 で見つかりname:enます) が、長くてやや反復的です。

nameとタグを含む正規表現を使用したいのですname:enが、サーバーがクエリを理解していないか、単に間違った正規表現を使用しています。

wikiに示されている例を使用して:node[~"^addr:.*$"~"^Foo$"] 私は試しました:

[~"name|name:en"~"duma",i]  
[~"name.*"~"duma",i]  
[~"^name.*$"~"duma",i]  

および他のいくつか。[~"^name:.*"~"duma",i]何かが返されるかどうかを確認するためだけに、例を模倣しました。

overpass-api.de はキーの正規表現を認識しますか、それとも正規表現が間違っているだけですか? overpass-api.de からエラーは発生しません。bbox の座標と空の結果だけです。通常、不適切な形式のクエリへの対応は非常に厳格です。前もって感謝します。

4

1 に答える 1

0

これは、大文字と小文字を区別しないキーの正規表現マッチングに関する Overpass API 実装のバグです。詳細については、この Github チケットを参照してください。

当面は、開発ボックスでパッチをテストできます。

http://overpass-turbo.eu/s/b1l

ところで:大文字と小文字を区別しない正規表現の一致が必要ない場合、これは現在 overpass-api.de で既に機能しているはずです。

于 2015-08-19T07:55:24.483 に答える