Hi all

There are now 2 vectorize algs in SEXTANTE. The first one is the one
that was giving you problems (which I haven't been able to fix,
although in most cases it runs ok). The second one has a different
approach, doesn't have those problems  and is faster...but doesn't
support polygons with holes. This can be improved, however, by using
at along with the "resolve polygon holes" tools, also in SEXTANTE

hope that helps

Regards


2011/9/30 Fernando Barbat <fbar...@gmail.com>:
> Hi, I read this just by chance.
>
> I had no answer from Sextante community then. I had to implement my own
> version of the algorithm. However, I ended up not using it since it was no
> longer necessary for my project -neither Sextante-.
>
> I sent this implementation to Victor but had no answer. I post it here since
> it may be useful to you. However, keep in mind a few considerations:
> - I didn't implement it having efficiency in mind. It takes twice or more
> than the original implementation to run the algorithm.
> - I didn't test it very well since I didn't have to use it at the end.
>
> Hope it helps.
>
> Fernando
>
> --------------
>
> package com.example;
>
> import java.awt.geom.Point2D;
> import java.util.HashMap;
> import java.util.LinkedList;
> import java.util.List;
> import java.util.Map;
>
> import com.vividsolutions.jts.geom.Coordinate;
> import com.vividsolutions.jts.geom.CoordinateFilter;
> import com.vividsolutions.jts.geom.Envelope;
> import com.vividsolutions.jts.geom.Geometry;
> import com.vividsolutions.jts.geom.GeometryFactory;
> import com.vividsolutions.jts.geom.Polygon;
> import com.vividsolutions.jts.operation.union.CascadedPolygonUnion;
>
> import es.unex.sextante.core.GeoAlgorithm;
> import es.unex.sextante.core.Sextante;
> import es.unex.sextante.dataObjects.IRasterLayer;
> import es.unex.sextante.dataObjects.IVectorLayer;
> import es.unex.sextante.exceptions.GeoAlgorithmExecutionException;
> import es.unex.sextante.exceptions.RepeatedParameterNameException;
> import es.unex.sextante.exceptions.UnsupportedOutputChannelException;
> import es.unex.sextante.outputs.OutputVectorLayer;
> import es.unex.sextante.rasterWrappers.GridExtent;
>
> public class VectorizeAlgorithmReimplementado extends GeoAlgorithm {
>
>     public static final String LAYER = "LAYER";
>     public static final String RESULT = "RESULT";
>
>     private IRasterLayer m_Input;
>     private IVectorLayer m_Polygons;
>
>     public void defineCharacteristics() {
>
>         setName(Sextante.getText("Vectorizar_capa_raster"));
>         setGroup(Sextante.getText("Vectorizacion"));
>         setGeneratesUserDefinedRasterOutput(false);
>
>         try {
>             m_Parameters.addInputRasterLayer(LAYER,
>                     Sextante.getText("Capa_de_entrada"), true);
>             addOutputVectorLayer(RESULT, Sextante.getText("Resultado"),
>                     OutputVectorLayer.SHAPE_TYPE_POLYGON);
>         } catch (RepeatedParameterNameException e) {
>             Sextante.addErrorToLog(e);
>         }
>
>     }
>
>     public boolean processAlgorithm() throws GeoAlgorithmExecutionException
> {
>
>         String sFields[] = new String[2];
>         Class<?> types[] = { Integer.class, Double.class };
>
>         m_Input = m_Parameters.getParameterValueAsRasterLayer(LAYER);
>
>         m_Input.setFullExtent();
>
>         sFields[0] = "ID";
>         sFields[1] = m_Input.getName();
>
>         m_Polygons = getNewVectorLayer(RESULT,
> Sextante.getText("Resultado"),
>                 IVectorLayer.SHAPE_TYPE_POLYGON, types, sFields);
>
>         createPolygons();
>
>         return !m_Task.isCanceled();
>
>     }
>
>     private void createPolygons() throws UnsupportedOutputChannelException {
>
>         double dValue;
>
>         int m_iNX = m_Input.getNX();
>         int m_iNY = m_Input.getNY();
>
>         Map<Double, List<Polygon>> classes = new HashMap<Double,
> List<Polygon>>();
>         Map<Double, Integer> ids = new HashMap<Double, Integer>();
>
>         GeometryFactory gridGeometryFactory = new GeometryFactory();
>
>         int id = 0;
>         for (int y = 0; y < m_iNY && setProgress(y, m_iNY); y++) {
>             for (int x = 0; x < m_iNX; x++) {
>                 dValue = m_Input.getCellValueAsDouble(x, y);
>
>                 Polygon square = (Polygon) gridGeometryFactory
>                         .toGeometry(new Envelope(x, x + 1, y, y + 1));
>
>                 List<Polygon> clazz = classes.get(dValue);
>                 if (clazz == null) {
>                     clazz = new LinkedList<Polygon>();
>                     ids.put(dValue, id);
>                     classes.put(dValue, clazz);
>                     id++;
>                 }
>                 clazz.add(square);
>             }
>         }
>
>         final GridExtent wge = m_Input.getWindowGridExtent();
>         final double halfCellSize = wge.getCellSize() / 2;
>
>         for (Map.Entry<Double, List<Polygon>> entry : classes.entrySet()) {
>             double value = entry.getKey();
>             List<Polygon> clazz = entry.getValue();
>
>             CascadedPolygonUnion cascadedPolygonUnion = new
> CascadedPolygonUnion(
>                     clazz);
>             Geometry classGeometry = cascadedPolygonUnion.union();
>
>             classGeometry.apply(new CoordinateFilter() {
>
>                 @Override
>                 public void filter(Coordinate arg0) {
>                     Point2D translated = wge.getWorldCoordsFromGridCoords(
>                             (int) arg0.x, (int) arg0.y);
>                     arg0.x = translated.getX() - halfCellSize;
>                     arg0.y = translated.getY() + halfCellSize;
>                 }
>             });
>
>             Object values[] = new Object[2];
>             values[0] = ids.get(value);
>             values[1] = value;
>
>             m_Polygons.addFeature(classGeometry, values);
>         }
>
>     }
>
> }
>
>
>> Hi list,
>>
>> Last March a user called Fernando had a problem with vectorize
>> algorithm (see below). I would like to know
>> if there is any solution because I have had the same problem.
>>
>> Thank you,
>>
>> Ibon
>>
>> 2011/3/14 Fernando Barbat <fbar...@gmail.com>:
>> > Hi list,
>> >
>> > I am trying to use VectorizeAlgorithm of Sextante 0.6 to vectorize a
>> > raster
>> > (using plain Java and GeoTools 2.6). However, the resulting shapefile is
>> > not
>> > what one would expect. It has two polygons which are not vectorized
>> > properly.
>> >
>> > I can share both raster and Sextante-vectorized version if someone is
>> > interested.
>> >
>> > Any idea?
>> >
>> > Thanks.
>> >
>> > Fernando
>> -------------- next part --------------
>> An HTML attachment was scrubbed...
>> URL:
>> http://lists.forge.osor.eu/pipermail/sextante-users/attachments/20110930/585870e2/attachment-0001.htm
>>
>> ------------------------------
>>
>> _______________________________________________
>> Sextante-users mailing list
>> Sextante-users@lists.forge.osor.eu
>> https://lists.forge.osor.eu/listinfo/sextante-users
>>
>>
>> End of Sextante-users Digest, Vol 36, Issue 10
>> **********************************************
>
>
> _______________________________________________
> Sextante-users mailing list
> Sextante-users@lists.forge.osor.eu
> https://lists.forge.osor.eu/listinfo/sextante-users
>
>
_______________________________________________
Sextante-users mailing list
Sextante-users@lists.forge.osor.eu
https://lists.forge.osor.eu/listinfo/sextante-users

Responder a