Code Monkey home page Code Monkey logo

geotab's People

Contributors

tjasz avatar

Watchers

 avatar

geotab's Issues

Symbology: import from and export to other systems

While one of the primary differentiators for geotab is its ability to define the symbology of map features by sets of rules based on multiple feature properties, it is also useful to export the calculated symbology to other systems in a way that they understand. The calculated symbology should be included during export (when exporting to non-geotab formats). The export options need to include the symbology format (or maybe it's part of the file format).

For example, caltopo appears to use SimpleStyle, where a handful of style properties are included in the GeoJSON features' properties. It may be slightly different though, as its not made explicit. Export several examples of points, lines, and polygons with various styles to be sure.

GeoJSON+CSS has a style attribute in the feature objects.

GPX also has extensions for symbology.

KML also defines display properties.

Add user locator control to map

For some data, users want to know where they are relative to it. Add a leaflet map Control that puts a marker on the map to show the user location.

Consider sharing names among more filter parameters

Some of the parameters of filter functions have the same name ("value" occurs a lot). Others have different names ("prefix", "suffix" are two other examples). When a function is changed, the parameter text field in the form either maintains its value (if the parameter names are the same) or resets it (if they are different). This can be good when the parameter is semantically very different. However, when it is semantically similar (such as for prefix and suffix), it might not be. Consider more name sharing among filter function parameters.

Set geotab:selectionStatus on table row actions

Allow table row clicks to set the geotab:SelectionStatus between "active" and "inactive" and table row hovering to toggle the "hover" prefix of the selection status. This is analogous to how map features affect the selection status. This would replace the current behavior of table row clicks of setting an "active" item and zooming to it.

Replace context, listeners with redux store

The large app context and recently added listeners should be replaced with a store using Redux Toolkit for react. This will limit re-renders by only triggering them on appropriate actions instead of any update to any part of the context.

Using standard industry tools is good.

Markers don't refresh on Symbology change

When symbology is updated, the markers don't change until the map view is closed and reopened. GeoCSV accomplished this by saving a reference to the row's marker and changing the SVG in place.

Add option for percentile breaks in symbology sliders

Presently, the slider "breaks" for symbology can only be on a linear scale. There should also be an option to use percentiles. Ex: color the top ten percentile of peaks by prominence red. Or, color the peaks on a gradient from red to blue on a percentile scale rather than linear.

Add a context menu to the User Button

Similar to the File Button, the User Button should have a context menu (Sign In, Sign Out, Info). It should also perform the action when only one option is enabled.

Support enum column type

In addition to string, number, and date: enumerations should be a supported column type. In particular, this would allow the text fields in Filter and Symbology definitions to be replaced with dropdowns.

This is especially useful for geotab:selectionStatus, where the possible values are a limited set, but defined by the system rather than the user.

A slightly less useful alternative is to not have a separate enum type, but support dropdowns with an "other" option for text fields that have few values.

Support multiple file types for export

The export options should support multiple file types, so that exported data can be opened in various systems (caltopo, watches, etc.). Warn users of the various levels of loss involved with each.

  • CSV
  • GPX
  • KML
  • GeoJSON (with caltopo-compatible symbology)
  • GeoJSON (with SimpleStyle, if it turns out to differ from what caltopo uses; investigate)
  • GeoJSON (with CSS)
  • GeoJSON (full geotab backup)

Reset or validate the filter draft on data process

While context.filter is reset when data is imported or a drive file is opened, the draft in the Data tab is not. This can lead to an invalid state where the filter may have different field names (from a previously open file) than the currently open file. Via either resetting or validating, come up with a solution to avoid these issues, which can cause crashes.

Convert all JS to TSX

Convert remaining JavaScript files to TypeScript, resolve errors/suggestions, turn tsconfig.json: noImplicitAny back to True.

Allow click events to apply to multiple map features

When users click on the map, only the top feature under the mouse receives the event (shows the popup, highlights the related table row). It should be possible to show the information for all features under the mouse in the popup, and highlight all related table rows.

Add map key

If the symbology can be summed up in a way that looks good as a Leaflet map Control, add a map key.

Add computed function: shape of a path

It is often useful to know if a path is loop, lollipop, out-and-back or one-way. Add a computed function that describes how much redundancy a path has.

Example idea: arithmetic mean(for all points a, the min(euclidian_dist(a,b)/dist_along_path(a,b) for all other points b))

This should be 0 for out-and-back, 1 for a perfect collinear one-way, and somewhere in the middle for loops with lower values for lollipops.

To give equal weight to all real points on the path, this would have to un-optimize paths. You can't just compute based on the path points that are in the file. Must look at every point along X distance intervals.

Make width of the panes adjustable

The width of the Data, Map, Table, and Symbology panes is currently equal. However, Data and Symbology don't often require as much space as Map and Table. Allowing users to adjust the boundaries between panes by dragging would be helpful.

Add "zoom to fit" buttons

Add "zoom to fit feature" buttons on feature context menus and a "zoom to fit features" button. This would replace the current behavior of automatically zooming to fit features any time the context is updated. This would also replace the current behavior of setting the "active" feature and zooming to it when a table row is clicked.

Remember selected map layer(s) when map tab closed or file saved

Add a variable to the context to remember the selected map layer(s) when the map tab is closed. Right now, it constantly resets to default each time the map tab is reopened.

Add a section to the geotabMetadata GeoJSON extension to describe the selected layer(s).

Replace use of Function string constructor

Use an almost-as-flexible, but more secure method of representing calculated fields that doesn't rely on javascript's Function constructor. This is a security risk, especially if calculated fields are to be stored in files.

Add option to filter table rows by map bounds

To de-clutter the user view, there should be an option to filter the table rows to show only those that are visible in the currently map bounds independently of how the Filter is defined.

GeoCSV had this, for reference.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.