<div dir="ltr"><div style="font-family:arial,sans-serif;font-size:13px">I am running QGIS 1.9 and developing a plugin that uses a spatial index to improve intersection performance.  I am struggling to properly destroy the spatial index and unload it.</div>
<div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">The workflow that I am using is:</div><div style="font-family:arial,sans-serif;font-size:13px"><br>
</div><div style="font-family:arial,sans-serif;font-size:13px">1. Load a point layer.</div><div style="font-family:arial,sans-serif;font-size:13px">2. Create temporary, in-memory polylines and a spatial index on them.</div>
<div style="font-family:arial,sans-serif;font-size:13px">3. Draw a line (rubberband) and split an in memory polyline.</div><div style="font-family:arial,sans-serif;font-size:13px">4. Update the point layer attributes that tag a point to be a member of a temporary line.</div>
<div style="font-family:arial,sans-serif;font-size:13px">5. Remove the in memory layer and recreate it, plus spatial index, using the new membership criteria. </div><div style="font-family:arial,sans-serif;font-size:13px">
<br></div><div style="font-family:arial,sans-serif;font-size:13px">The first time the temporary layer is created the spatial index works as expected.  When I recreate the temporary layer, I create another instance of QgsSpatialIndex.  The old spatial index appears to still be stored.  I say this because the id() of the spatial index are doubled the send time.</div>
<div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">For example, the first time I have ids -1 to -4 in the spatial index.  Then I split and I have ids -1 to -9.  Re-instantiating the class should be resetting the spatial index counter, but it isn't.</div>
<div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Is the ~QgsSpatialIndex method accessible via python?  This appears to be the destructor of choice?  Any other ideas?</div>
<div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px"><pre style="white-space:pre-wrap;margin-top:0px;margin-bottom:10px;padding:5px;border:0px;font-size:12px;vertical-align:baseline;overflow:auto;width:auto;max-height:600px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;background-color:rgb(238,238,238);color:rgb(57,51,24);line-height:18px">
<code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;color:rgb(34,34,34)"><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(138,74,11)">class</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> slicer</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">:</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">

    </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(138,74,11)">def</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> init</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">(</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">):</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:maroon">'''standard stuff here'''</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
    </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(138,74,11)">def</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> activated</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">(</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">):</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:maroon">'''standard stuff here'''</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        create_temp_polylines</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">()</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">

    </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(138,74,11)">def</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> create_temp_polylines</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">(</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">):</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">line_layer </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">=</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(43,145,175)">QgsVectorLayer</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">(</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:maroon">'Make the layer'</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">)</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">spat_index </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">=</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(43,145,175)">QgsSpatialIndex</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">()</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">point_layer </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">=</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> point_layer </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(134,134,134)">#Grabbed by iterating over layer list</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        pt_prov </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">=</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">point_layer</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">dataProvider</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">()</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        polylines </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">=</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">{}</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(138,74,11)">for</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> feat </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(138,74,11)">in</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">point_layer</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">dataProvider</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">():</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
            </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:maroon">'''build the line geometries based on a membership attribute'''</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(138,74,11)">for</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> key</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">,</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> value </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(138,74,11)">in</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> polyline</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">iteritems</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">():</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
            temp_polyline </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">=</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(43,145,175)">QgsFeature</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">()</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
            temp_polyline</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">setGeometry</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">(</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">value</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">)</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
            temp_polyline</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">setAttributes</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">([</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">attr1</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">,</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> attr2</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">,</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">...])</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
            line_layer</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">startEditing</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">()</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
            line_layer</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">addFeature</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">(</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">temp_polyline</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">,</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(138,74,11)">True</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">)</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
            self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">spat_index</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">insertFeature</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">(</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">temp_polyline</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">)</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        line_layer</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">commitChanges</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">()</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">

    </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(138,74,11)">def</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> split_line</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">(</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">,</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black"> cut_line</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">):</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:maroon">'''logic to split a polyline'''</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:maroon">'''logic to update the attribute table'''</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:maroon">'''commit the changes to the DB'''</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(43,145,175)">QgsMapLayerRegistry</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">instance</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">().</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">removeMapLayer</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">(</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">line_layer</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">id</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">())</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">
        self</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">.</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:black">create_temp_polylines</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(20,86,128)">()</span></code></pre>
</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><span style="font-family:arial,sans-serif;font-size:13px">Originally posted here: </span><a href="http://gis.stackexchange.com/questions/70869/is-it-possible-to-destroy-a-spatial-index" target="_blank" style="font-family:arial,sans-serif;font-size:13px">http://gis.stackexchange.com/questions/70869/is-it-possible-to-destroy-a-spatial-index</a><div style="font-family:arial,sans-serif;font-size:13px">
<br></div><div style="font-family:arial,sans-serif;font-size:13px">Thanks Nathan W. for the initial info.</div></div>