First up I just wanted to reply as it has been a couple of days. We are
very much open to contributions and would far rather you work as part of
the community then maintain your own fork.

On the specifics I do not have much of an opinion as I do not use the point
stacker often :)

--
Jody Garnett


On Mon, 15 Jun 2020 at 03:10, Sabrina Arnold <sarn...@codematix.de> wrote:

> Dear community,
>
> regarding one of our projects we utilized your open-source *PointStacker*
> and adjusted the source code to our needs.
> First of all, thanks a lot for providing this highly helpful code as
> open-source code! If you are interested, we would
> like to contribute to the development of the code with our extensions. We
> added input parameters, and
> output attributes that might be requested for other use cases as well. If
> you are interested in these code extensions, I
> would be happy to create a Merge Request. I am refering to
> /org/geotools/process/vector/PointStackerProcess.java
> <https://github.com/geotools/geotools/blob/master/modules/unsupported/process-feature/src/main/java/org/geotools/process/vector/PointStackerProcess.java>
> .
> Here you can see our customized PointStackerProcess as forked repository
> <https://github.com/SaCodematix/geotools/blob/master/modules/unsupported/process-feature/src/main/java/org/geotools/process/vector/PointStackerProcess.java>
> as well as the additional unit tests
> <https://github.com/SaCodematix/geotools/blob/master/modules/unsupported/process-feature/src/test/java/org/geotools/process/vector/PointStackerProcessTest.java>
> (see "CM_POINSTACKER" comments).
>
> In the following you can find more detailed information about our code
> extensions:
>
>   (Definition: The data set consists of features that are stacked to
> cluster. A cluster point then is representing the assigned features. A
> StackedPoint contains a feature that is stacked to a cluster. Original
> attributes are column names of the data set connected through the GeoServer
> datastore. Single points are features that are not assigned to a cluster
> with other features, thus, count equals 1.)
>
>   In addition to the original source code and the clustering by grid, our
> adjustments allow GeoServer users to cluster by an original attribute,
> such as state or district (depending on the given data set). The already
> existing location options 'nearest' and 'weighted' of how to position the
> cluster point are expanded by 'average' (average of all coordinates of
> the clustered features) and 'extent' (center of the minimum and maximum
> coordinates in x and y direction). For this, an additional input
> parameter *clusterBasis* is added. Depending on the data and use case, these
> locating approaches result in more suitable cluster point locations on the
> final map visualization.
>
>   The output is expanded by additional returning values. The fids (
> *listStackedPointsIDs*) and coordinates (*listStackedPtsCoos*) of the
> features belonging to the cluster are listed, as well as all available
> properties (attributes & values) for single points (
> *singlePointOrigAttributes*) which might be required as FeatureInfo on
> the final map.
>
>   If the user wants to sort  the resulting data collection (*sortedByField
> *by overwriting default values of result.SortBy()) by a specified original
> attribute field, for instance grades from 1 to 6, three additional
> parameters are introduced: *sortField* (e.g. 'grade'),
>   *sortBy* (can be either 'DESCENDING' or 'ASCENDING' (default)), and
> *sortValueStackedPt* to set a representative value for cluster points
> that otherwise would contain a list of grades, instead of a single number that
> can be sorted. We required this sorting method to influence the rendered
> z-order of several PointSymbolizers in the style .sld file, since the
> available VendorOption SortBy
> <https://docs.geoserver.org/latest/en/user/styling/sld/extensions/z-order/syntax.html>
> option had no influence on the z-order of the PointSymbolizers in our
> single FeatureTypeStyle since a transformation (PointStacker) is included.
>
>   With these extensions, the user also has the possibility to add original
> attributes to the output result (*originalAttributes)*. For instance, if
> the following list is given in the style as list of original attributes,
>
>       <ogc:Function name="parameter">
>         <ogc:Literal>originalAttributes</ogc:Literal>
>         <ogc:Literal>*attrA,attrB*,*attrC*</ogc:Literal>
>       </ogc:Function>
>
>   the *extended output* is a FeatureCollection containing the following
> attributes:
>
>    - fid - the fid of the point representing the cluster
>    - count - the total number of points in the cluster
>    - countunique - the number of unique point locations in the cluster
>    - envBBOX - bounding box coordinates
>    - *listStackedPointsIDs* - list of all IDs of the stacked features in
>    the cluster
>    - *listStackedPtsCoos* - list of all coordinates of the stacked
>    features in the cluster
>    - *singlePointOrigAttributes* - only for single points, all of its
>    data properties (attributes & values)
>    - *sortedByField* contains the original attribute values of the
>    sortField, or the representative sortValueStackedPt for cluster points, or
>    nothing, if no sortField is indicated
>    - *attrA* - list of values for the first attribute of the input
>    parameter originalAttributes
>    - *attrB* - list of values for the second attribute of the input
>    parameter originalAttributes
>    - *attrC* - list of values for the third attribute of the input
>    parameter originalAttributes, and so on.
>
>    To approach this output, the following input parameters are added:
>
>    @DescribeParameter(
>           name = "*clusterBasis*",
>           description = "Indicate basis for clustering methods: 'grid'
> (default), or an original " +
>                   "attribute such as state or district (data-dependent).",
>           defaultValue = "grid"
>    )
>    @DescribeParameter(
>           name = "*originalAttributes*",
>           description = "List of original attributes that are requested to
> be returned. If these " +
>                   "indicated attributes are no actual original attributes
> of data, they will be ignored. " +
>                   "Required as comma-separated list of format, e.g: a,b,c.
> All in lower case!",
>           min = 0
>    )
>           String argOrigAttributes,
>    @DescribeParameter(
>           name = "*sortField*",
>           description = "Attribute field by which resulting collection
> (optionally) can be sorted.",
>           min = 0
>    )
>           String argSortField,
>    @DescribeParameter(
>           name = "*sortBy*",
>           description = "If collection is desired to be sorted through a
> specified 'sortField', one can " +
>                   "indicate the method to sort, either 'DESCENDING' or
> 'ASCENDING' (default) .",
>           min = 0
>   )
>           String argSortOrder,
>    @DescribeParameter(
>           name = "*sortValueStackedPt*",
>           description = "If a collection is desired to be sorted vy a
> specified column 'sortField', here" +
>                   "you can indicate the value that will be used for
> clustered points as sort value since only" +
>                   "single points will keep the original value of the
> 'sortField' while clustered points " +
>                   "gather the values of the 'sortField's to an array which
> will be replaced by this value " +
>                   "instead, such as 0 (default).",
>           min = 0
>    )
>           String argSortValueStackedPt
>
>
> Please let me know, if you have any questions or unclarity. I am looking
> forward to any responses, discussions and more information about a possible
> Merge Request.
>
>
> --
>
> All the best
>
> Sabrina Arnold
> [image: logo]
> Felsbachstr. 5/7
> D-07745 Jena
> Tel: +49 (3641) 30 38-12
> Fax:   +49 (3641) 30 38-20
> Internet:   www.codematix.de
> e-mail: sarn...@codematix.de
>
> ------------------------------------------------------------------------------------------------------------
> Handelsregister: Amtsgericht Jena / HRB 10575 / Geschäftsführung: Carsten
> Busch
>
> Diese E-Mail könnte vertrauliche und / oder rechtlich geschützte
> Informationen enthalten.
> Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich
> erhalten haben,
> informieren Sie bitte sofort den Absender und vernichten Sie diese Mail.
> Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail sind
> nicht gestattet.
>
> This e-mail may contain confidential and/or privileged information.
> If you are not the intended recipient (or have received this e-mail in
> error)
> please notify the sender immediately and destroy this e-mail.
> Any unauthorised copying, disclosure or distribution of the material in
> this e-mail is strictly forbidden.
>
> Please consider the environment - only print this e-mail if absolutely
> necessary!
> _______________________________________________
> GeoTools-Devel mailing list
> GeoTools-Devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/geotools-devel
>
_______________________________________________
GeoTools-Devel mailing list
GeoTools-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to