El 06/03/11 19:40, WanMil escribió:
I implemented Minkos idea using the style file to set the city, region, zip and country names.

How does it work?
The new AddressHook adds special tags to each element that is inside a known boundary:
mkgmap:admin_level2
mkgmap:admin_level3
mkgmap:admin_level4
..
mkgmap:admin_level11

If an admin_level is not known the relevant tag is not set. The same for the zip tag mkgmap:postalcode.

The style file contains a new rule block (in each file):
mkgmap:country!=* & addr:country=*
   { set mkgmap:country='${addr:country}' }
mkgmap:country!=* & is_in:country=*
   { set mkgmap:country='${is_in:country}' }
mkgmap:country!=* & mkgmap:admin_level2=*
   { set mkgmap:country='${mkgmap:admin_level2}' }

mkgmap:region!=* & is_in:county=*
   { set mkgmap:region='${is_in:county}' }
mkgmap:region!=* & mkgmap:admin_level6=*
   { set mkgmap:region='${mkgmap:admin_level6}' }
...

mkgmap:city!=* & openGeoDB:name=*
   { set mkgmap:city='${openGeoDB:name}' }
mkgmap:city!=* & mkgmap:admin_level8=*
   { set mkgmap:city='${mkgmap:admin_level8}' }
...

mkgmap:postal_code!=* & addr:postcode=*
   { set mkgmap:postal_code='${addr:postcode}' }
mkgmap:postal_code!=* & mkgmap:postcode=*
   { set mkgmap:postal_code='${mkgmap:postalcode}' }

These rules set the mkgmap tags:
mkgmap:country
mkgmap:region
mkgmap:city
mkgmap:postal_code

Only these tags are used to set the country, the region, the city and the zip code. No more rules are applied automatically (there are still some in the Locator class but they will be removed).

This enables you to configure which admin_level information you want to use for the city name, the region names etc. Also country specific rules are possible (e.g. add a mkgmap:country=NLD rule).

Todo: The country normalization must be performed by the AddressHook so that one can be sure that the Netherlands are always tagged with mkgmap:country=NLD (or mkgmap:country=Nederland?)

The rules are not perfect up to now but please feel free to post some good rules for your country.
I have changed my styles as follows,

mkgmap:region!=* & is_in:region=* { set mkgmap:region='${is_in:region}' }
mkgmap:region!=* & mkgmap:admin_level4=* { set mkgmap:region='${mkgmap:admin_level4}' }
mkgmap:region!=* & mkgmap:admin_level6=* { set mkgmap:region='${mkgmap:admin_level6}' }
mkgmap:region!=* & mkgmap:admin_level5=* { set mkgmap:region='${mkgmap:admin_level5}' }
mkgmap:region!=* & mkgmap:admin_level3=* { set mkgmap:region='${mkgmap:admin_level3}' }

to adapt them to what I think is best for Spain, but, if I understood well, something is not working as expected: places tagged as villages that have no is_in:region information and are within admin_level=4 and admin_level=6 polygons take the region from the a_l=6 polygon, instead of a_l=4 as it should be from the style above.

WanMil


Attached is the next step for the automatic location completion:
* Some speed improvements (it's still slow but not as slow as before ;-)
* boundary=postal_code is now supported.
* The Locator does no longer overwrite already set attributes. This
seems to be a better solution. I think the Locator must be rewritten
completely. Up to now I have commented some lines only without deep
understanding what it is really doing.

Some things that don't work:
* Lot's of POIs are assigned with the default country although the
MapElements are assigned with the correct country. Example:
- Spain splitted with --overlap=3000 (more overlap is better for my patch)
- Cafe Antxi (http://www.openstreetmap.org/browse/node/629554219) is
correctly assigned with country=ESP but in the POI search it is
displayed with the default country.
I have no idea why.

* Zips are only applied to POIs. Streets seems to be not yet supported
by the MDR creation. (=> Steve?)

Things to do:
* Speed improvement (At the moment the location search takes as much
time as the rest of the map creation)
* A better mapping of city, region to the admin-levels
* Make use more OSM information (like residential areas, place=city POIs
in residential areas etc.)
* Clean up of the Locator class

WanMil


I have improved calculation of the country information. In case no
country information is available the most used country in a tile is used
for all elements without country tag.

The patch now patches the trunk and no longer the index branch.

I have observed that lots of POIs are assigned the default country
although I they are assigned a different country. I have no clue where
this happens.
Maybe an index related problem? I was hoping that Steves commit today
would fix that problem but it didn't.

WanMil

I have done some development and want you to share my current findings.

1. The MapElement copy constructor seems to have a bug. The attributes
map which contains the city, region and country information is not
copied. From my point of view this is an important thing that should be
fixed in the trunk also.

2. In the patch the Locator is disabled as much as it was possible for
me up to now.

3. I am using now separate tags (mkgmap:city, mkgmap:region etc.).

I recommend to run this patch with location-autofill=-1 or 0 to see how
the patch works and not how the old Locator works.

WanMil


After the index branch has been developed so far that we can use the
results in MapSource (thanks to Steve!!) there is a big need for a
mechanism to fill missing location information.

There has been a lot of discussion about that. It stopped because it
was
quite theoretical (from my point of view). Therefore I have started to
implement a prototype osm hook that tries to complete the missing
location information. I think the is_in tag is quite problematic
therefore I decided to use the addr tags.

Attached is a *very* early implementation that makes use of the
boundary
polygons. It checks all nodes and ways/polygons within all boundary
polygons and fills the missing addr tags.

I think this is a better foundation for the discussion how we want to
fill the missing location information.

Before flaming me about terrible code please be aware that:
* the patch is not optimized
* it's version 1, so far away from handling all situations / countries
* it's a very early prototype

I would be happy if you try it and make some proposals how it could be
improved.

Some improvements I already know and thinking about:
* The new hook should run after the multipolygon finishing and not
before
* The is_in tag should be handled
* boundary information propagation => First go through all boundaries
and add the information from higher levels to lower ones, i.e. add
addr:district to all city boundaries within that district
* Use landuse=residential information in combination with the place
nodes
* In case a boundary level is missing (which mostly will be the case
for
countries admin_level=2), select the addr information from all nodes
and
ways within a boundary by using the most used addr-tag value. (in
germany the addr:country=DE should be the most used)


Have fun!
WanMil


_______________________________________________ mkgmap-dev mailing list mkgmap-dev@lists.mkgmap.org.uk http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev


-- 
Por favor, no me envíe documentos con extensiones .doc, .docx, .xls, .xlsx, .ppt, .pptx, .mdb, mdbx
Instale OpenOffice desde http://es.openoffice.org/programa/index.html
OpenOffice es libre: se puede copiar, modificar y redistribuir libremente. Gratis y totalmente legal.
OpenOffice está en continuo desarrollo y no tendrá que pagar por las nuevas versiones.