Thanks so much! Comments below.
-------- Original Message --------
Subject: Re: [Mapnik-users] Misplaced polygon labels
From: Dane Springmeyer <[email protected]>
To: Ellis Miller <[email protected]>
CC: [email protected]
Date: 11/22/2011 12:55 PM
On Nov 21, 2011, at 10:28 PM, Ellis Miller wrote:
Hi Ellis,
We are using Mapnik for
data mapping of demographic data
cool :)
It's been fun working with maps. When I showed the feature to my
9-year-old son, he started playing with the various demographic maps
for a while and ended up with a comment "I'd enjoy programming
something like this!" The next day he wanted to run the maps again.
:-)
and are having a bit of
a problem with the placement of Alaska's label for our State
shapefile (it's showing up in California!).
Sorry about that. MultiPolygons are bit tricky and we've only
recently started to work on getting placement more robust for
them: https://github.com/mapnik/mapnik/issues/812
I think it may be a
problem in the shapefile, but I don't know how to fix it.
Unlikely a problem in the shapefile, but nevertheless it needs
to be fixed in the shapefile.
I've been a developer
for quite some time, but I'm new to the GIS world.
- When displaying the shapefile in Quantum GIS, it is
displayed correctly: Quantum
GIS.png
- When displaying the shapefile using Mapnik, the label
is in CA: Mapnik.png
- I could provide the shapefiles we are using -- these
are based on public shapefiles, but were edited by a GIS
guy (primarily moving AK, HI, PR and merging polygons so
that we get a single label per state).
- We are using mapnik in a C++ dll (see code snippet
below).
The label was positioned correctly in Mapnik before the
GIS guy merged polygons.
Right, it is the merging that throws off the default centroid
algorithm in mapnik.
So, your options are either:
1) break back out the polygons, or at least one. You could
potentially leave all of the sub parts of alaska merged except
break out just the large main landmass. Add a column to the
attributes that indicate you want it labeled and then filter on
that attribute, using a mapnik Filter in your rule to catch only
that row (representing the big polygon you want labeled)
2) Tweak include/mapnik/geometry.hpp to use a different
centroid algorithm that supports multi-geometries better.
Depending on your mapnik version there may be a few already
available in the code you could use (the change would need to be
made in src/agg/process_text_symbolizer.cpp to reroute to use
them).
Since you mention you are on windows I presume that tweaking
and recompiling mapnik may not be in your cards, so let me know
if I can help you with option #1 a bit more.
I'd be interested in pursuing #2. We are compiling in C++, though it
wasn't easy at first! When were the new algorithms introduced? I
think we're using 0.7.1, but hopefully it won't be too bad to
upgrade to 2.0.0.
That was only added in the Mapnik 2.0.0 release. Anyway, it also
suffers from not being robust in the face of multigeometries.
Any suggestions what I should change on my side or how to
track down the problem in the shapefiles?
Thanks,
Ellis Miller
Code snippet for setting labels:
rule_type
vTextRule;
text_symbolizer
vTextSymbolizer((LPCTSTR)sColumnInDBFForShowLabel,
(LPCTSTR)sFontName_c, iFontSize, color(0, 0, 0));
vTextSymbolizer.set_avoid_edges(true);
vTextSymbolizer.set_label_placement(POINT_PLACEMENT);
vTextRule.append(vTextSymbolizer);
_______________________________________________
Mapnik-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/mapnik-users
|