Re: [Pymag-devel] IndexError when too many POIs
Status: Alpha
Brought to you by:
lhj
|
From: Henrik J. <hen...@gm...> - 2009-11-04 09:30:38
|
Hi Peter,
Thanks for taking the time to find the bug. I have checked in your fix but
instead of putting it in Map.py I created an optimze method to the POIGroup
and made the first part of the layer optimization code include POI groups in
addition to the normal groups.
Please try it out.
/Henrik
On Monday 02 November 2009 10:29:41 bp wrote:
> Ok, after some day of debugging and trying to figure out how the code
> works, I found that layer.optimize is called
> for optimizing layers before closing them. Here cellelements could be
> moved to new cells.
> This method returns a dictionary with changes, however this result was
> not used after optimizing POI layer.
> Than when closing POI layer, POI features were referenced to the old
> cell numbers, causing index error.
>
> To update POI features, here are the differencies in Map.py.
> Henrik could you revise it?
>
> @@ -359,7 +359,7 @@
>
> ## Optimize layers in groups
> logging.info('Optimizing cell structure of normal layers')
> - remaininglayers = list(self.layers + self._poiconfig.layers)
> + remaininglayers = list(self.layers)
> if self.groups != None:
> for group in self.groups:
> group.optimizeLayers()
> @@ -380,8 +380,16 @@
>
>
> ## Optimize remaining layers
> +
> + for layer in self._poiconfig.layers:
> + remapdict = layer.optimize()
> + for feature in self._poigroup._features:
> + if len(remapdict) > 0:
> + feature.cellelementrefs = tuple([remapdict[ceref]
> for ceref in feature.cellelementrefs])
> +
> if self.maptype == MapTypeStreetRoute:
> logging.info('Optimizing cell structure of routing layers')
> +
> for layer in remaininglayers:
> layer.optimize()
>
>
> Regards
> Peter
>
> > Hi,
> >
> > I have a datasource with a huge number of POIs
> > When I compile the map I get the following error:
> > IndexError: num_in_cell (1136) is outside the # of cellelements (0) in
> > cell 1, layer poi
> > If I limit the number of POIs by filtering out some types in rule file,
> > than map is compiled ok.
> >
> > Is this a limitation in the map format or a bug?
> >
> > ...
> > DEBUG Optimizing layer poi
> > DEBUG Max cell elements exceeded for layer poi. cellnum=1, # of cell
> > elements=18994
> > DEBUG Max cell elements exceeded for layer poi. cellnum=1, # of cell
> > elements=18994
> > DEBUG nlevels=2 for layer poi
> > INFO Closing map
> > Traceback (most recent call last):
> > File "pymagellan\osmmagellan\osmmag.py", line 260, in <module>
> > main()
> > File "pymagellan\osmmagellan\osmmag.py", line 256, in main
> > db=options.db
> > File "pymagellan\osmmagellan\osmmag.py", line 97, in osmmag
> > m.close()
> > File "d:\Python26\lib\site-packages\magellan\Map.py", line 413, in
> > close self._poigroup.close()
> > File "d:\Python26\lib\site-packages\magellan\POI.py", line 201, in
> > close for ref, e in zip(f.cellelementrefs, f.getCellElements(self.map)):
> > File "d:\Python26\lib\site-packages\magellan\POI.py", line 518, in
> > getCellElements
> > return [layer.getCellElement(ceref) for ceref in
> > self.cellelementrefs] File
> > "d:\Python26\lib\site-packages\magellan\Layer.py", line 712, in
> > getCellElement
> > raise IndexError,"num_in_cell (%d) is outside the # of cellelements
> > (%d) in cell %d, layer %s"%(num_in_cell,len(cell),cellnum, self.name)
> > IndexError: num_in_cell (1136) is outside the # of cellelements (0) in
> > cell 1, layer poi
>
|