> Something that would also be very cool would be if the script told you
> all polygons or multipolygons you're in regardless of whether they are
> a relation or normal polygon, and you could filter the result for
> country boundaries or other type of areas.  It could for example tell
> you you're in a building in a school area in a residential area in a
> county in a province in a country on an island.

It's a question of a proper specification. Then you can add the rules by 
yourself. Please have a look at
http://78.46.81.38/#section.rule_example

Currently, the areas are created based on the two rules

<osm-script name="Area::Create_from_admin_level">
<query type="relation">
  <has-kv k="admin_level"/>
  <has-kv k="name"/>
</query>
<foreach into="rel">
  <union>
    <recurse type="relation-way" from="rel"/>
    <recurse type="way-node"/>
  </union>
  <make-area pivot="rel" into="odd"/>
  <detect-odd-nodes into="odd"/>
  <foreach from="odd" into="i">
    <union><item set="i"/><item set="rel"/></union>
    <conflict>In <item set="rel"/>, the <item set="i"/> is contained in an odd 
number of segments.</conflict>
  </foreach>
</foreach>
</osm-script>

and

<osm-script name="Area::Create_from_multipolygon">
<query type="relation">
  <has-kv k="type" v="multipolygon"/>
  <has-kv k="name"/>
</query>
<foreach into="rel">
  <union>
    <recurse type="relation-way" from="rel"/>
    <recurse type="way-node"/>
  </union>
  <make-area pivot="rel" into="odd"/>
  <detect-odd-nodes into="odd"/>
  <foreach from="odd" into="i">
    <union><item set="i"/><item set="rel"/></union>
    <conflict>In <item set="rel"/>, the <item set="i"/> is contained in an odd 
number of segments.</conflict>
  </foreach>
</foreach>
</osm-script>

These rules translate as follows:

  Consider every relation that has a tag with key "admin_level" and a tag with
  key "name". Create a polygon from all the member ways. If this fails, attach
  a message "In relation $Rel, the node $Node is contained in an odd number of
  segments" to this relation.

and

  Consider every relation that has a tag with key "type" value "multipolygon"
  and a tag with key "name". Create a polygon from all the member ways. If
  this fails ...

Thus, if you think of a rule like

  Consider every way that has a tag with key "type" and value "multipolygon"
  and a tag with key "name". Create a polygon from this way. If this fails ...

this translates to

<osm-script name="Area::Create_from_multipolygon">
<query type="way">
  <has-kv k="type" v="multipolygon"/>
  <has-kv k="name"/>
</query>
<foreach into="way">
  <union>
    <item set="way"/>
    <recurse type="way-node" from="way"/>
  </union>
  <make-area pivot="way" into="odd"/>
  <detect-odd-nodes into="odd"/>
  <foreach from="odd" into="i">
    <union><item set="i"/><item set="way"/></union>
    <conflict>In <item set="rel"/>, the <item set="i"/> is contained in an odd 
number of segments.</conflict>
  </foreach>
</foreach>
</osm-script>

You just can submit the rule (or any other rule) as described on
http://78.46.81.38/#section.rule_example
and some hours later it should be processed. Feel free to ask if you have any 
questions.

Cheers,
Roland

_______________________________________________
talk mailing list
talk@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk

Reply via email to