Here's the patch (attached as mem_featureset.patch) -- this makes
memory_featureset::features work by patching memory_featureset to iterate
through feature geometries.
Also, here's the sample code which contains the point_datasource class which
seems to work for the simple example provided:
    http://github.com/lwu/cali.cpp-fourteener/tree/master/cali.cpp

In other news, the Mapnik wiki login is back up again, and we started to put
together an ExampleCode node. Check it out and contribute!
    http://trac.mapnik.org/wiki/ExampleCode

~L


On Mon, Aug 18, 2008 at 10:12 PM, Leslie Wu <[EMAIL PROTECTED]> wrote:

> Hey Dane,
> I haven't tried using it in Python, but as I just realized now that it
> doesn't quite matter since, as of svn trunk (r729),
> memory_datasource::features(const query& q) relies on a certain
> memory_featureset(bbox, ...) ctor, but if you take a look at
> memory_featureset.hpp, the next() iterator method is mostly commented out.
>
> In other words, when Mapnik asks the memory_datasource for features, it
> returns an empty feature_ptr.
>
> That said, if this gets fixed (it's been this way for 11 months), the
> following C++ code might work. I adapted Andreas's code, as at least one
> method call changed (to add_geometry), and I instead derived publicly from
> memory_datasource.
>
> Here's the code snippet (yet to be tested properly) on gist.github:
>    http://gist.github.com/6150
>
> Artem, shall I create a ticket? I don't see the issue mentioned on the
> tracker.
>
> ~L
>
>
> On Sun, Aug 17, 2008 at 12:50 PM, Dane Springmeyer <[EMAIL PROTECTED]>wrote:
>
>> Andreas,
>>
>> Thats great. So do you know if the `mapnik::memory_datasource` is
>> exposed in the python bindings?
>>
>> Dane
>>
>>
>> On Aug 17, 2008, at 11:58 AM, Andreas Volz wrote:
>>
>> > Am Thu, 07 Aug 2008 11:15:02 +0200 schrieb Ric S:
>> >
>> >> Hi folks,
>> >>
>> >> I have successfully setup mapnik. Generating a map already works.
>> >> Now I would like to draw gps points into the map, I was searching the
>> >> net for a few hours to get some info, unfortunately
>> >> I still have now clue yet how this can be done with mapnik.
>> >> I assume I have to create a layer and add points to it. I could not
>> >> find an example how to draw points.
>> >>
>> >> I would like to set gps points in my map. Could you please show me
>> >> how to add a single gps point to this map/layer. The code from
>> >> generate_image which I used:
>> >> ...
>> >>    z = 10
>> >>    imgx = 100 * z
>> >>    imgy = 100 * z
>> >>
>> >>    m = Map(imgx,imgy)
>> >>    load_map(m,mapfile)
>> >>    prj = Projection("+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0
>> >> +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m [EMAIL PROTECTED] +no_defs
>> >> +over") c0 = prj.forward(Coord(ll[0],ll[1]))
>> >>    c1 = prj.forward(Coord(ll[2],ll[3]))
>> >>    bbox = Envelope(c0.x,c0.y,c1.x,c1.y)
>> >>    m.zoom_to_box(bbox)
>> >>    im = Image(imgx,imgy)
>> >>    render(m, im)
>> >>    view = im.view(0,0,imgx,imgy) # x,y,width,height
>> >>    view.save(map_uri,'png')
>> >
>> > I've done that some time ago. Worked well. But then I deactivated the
>> > code for some reason. Not sure if it works at the moment:
>> >
>> > void MapnikSource::insertDataPoint (double x, double y, const char
>> > *key, const char *value, const char* layer)
>> > {
>> >  /*Layer lyr (layer);
>> >  datasource_ptr ds (new mapnik::memory_datasource);
>> >  feature_ptr f (feature_factory::create (keyID));
>> >
>> >  geometry_ptr point (new point_impl (-1));
>> >  point->move_to (x, y);
>> >
>> >  f->set_geometry(point);
>> >
>> >  transcoder tr ("utf-8");
>> >  (*f)[key] = tr.transcode (value);
>> >
>> >        if (ds)
>> >        {
>> >                mapnik::memory_datasource *mem = dynamic_cast
>> > <mapnik::memory_datasource*> (ds.get ());
>> >
>> >                if (mem)  // check if cast is ok!
>> >                {
>> >                        // do something with memory_datasource e.g.
>> > push some features
>> >                        mem->push(mapnik::feature_ptr(new
>> > mapnik::Feature(-1)));
>> >                        mem->push (f);
>> >    }
>> >        }
>> >
>> >  lyr.set_srs ("+proj=latlong +datum=WGS84");
>> >  lyr.add_style ("enigator");
>> >  lyr.set_datasource(mapnik::datasource_ptr(ds));
>> >  map->addLayer (lyr);
>> >
>> >  keyID++;*/
>> > }
>> >
>> > This is how I called it:
>> >
>> > m_mapnikSource.insertDataPoint (x, y, "enigator", "wptred",
>> > "enigator");
>> >
>> > This is the reference in the XML file:
>> >
>> >  <Style name="enigator">
>> >    <Rule>
>> >      <MaxScaleDenominator>50000</MaxScaleDenominator>
>> >      <Filter>[enigator]='wptred'</Filter>
>> >      <PointSymbolizer file="/home/andreas/src/svn/enigator/trunk/
>> > data/symbols/wptred.png" type="png" width="32" height="32" />
>> >    </Rule>
>> >  </Style>
>> >
>> > Search the history of this list with my name and around 10-12 month
>> > ago or so.
>> > Maybe this helps you...
>> >
>> > regards
>> > Andreas
>> > _______________________________________________
>> > Mapnik-users mailing list
>> > [email protected]
>> > https://lists.berlios.de/mailman/listinfo/mapnik-users
>>
>> _______________________________________________
>> Mapnik-users mailing list
>> [email protected]
>> https://lists.berlios.de/mailman/listinfo/mapnik-users
>>
>
>

Attachment: mem_featureset.patch
Description: Binary data

_______________________________________________
Mapnik-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/mapnik-users

Reply via email to