This repository was archived by the owner on Oct 1, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
samwich/polygon_tool
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
=============================================================================
Project: PolygonTool
Copyright: ©2009 Samuel Johnson
=============================================================================
Map polygon creator
Polygon Creator has 3 different modes:
Point creation / editing
Line creation / editing
Polygon creation / editing
UI
large map view area. points, lines, and polygons will be displayed on the map
item list with 3 tabs
points on screen (or maybe points that are members of lines or polygons that are on screen?)
lines on screen
polygons on screen
editing pane - to edit the currently selected element
point editor - drag/drop, save, cancel, delete
line editor - redraw line, save, cancel, assign to block, delete
polygon editor - redraw polygon, save, cancel, assign to block face, delete
data structures
Points - latitude/longitude pairs
Lines - ordered groups of points
Polygons - ordered groups of points where first and last points are connected
Lines can be used for displaying blocks
Polygons can be used for grouping locations
pseudocode / workflow:
Mode selection
the user may switch between point, line, and polygon modes at any time
Points mode:
click on map to add new point
create new Point object
display a placemark on the map with the visual style 'unsaved, selected'
add the Point to the item list
display the Point in the editing pane so that the user can Save it
if the user Saves:
change the placemark visual style to 'saved, selected'
if the user Cancels:
destroy the Point object which will remove it from the map, list, and editor
if the user Deletes:
refuse to delete the Point if it is a member of any line or polygon
provide feedback showing which lines and polygons that the Point is a member of
remove the placemark from the map
provide undo?
click and drag a point to move it
move the placemark on the map
change the placemark's visual style to 'unsaved, selected'
put a line segment on the map that goes from the original location to the new location
change the visual style of every line segment that is attached to the point (parts of Lines and Polygons)
if the user Saves:
change the placemark's visual style to 'saved, selected'
update the polygons and lines that have the Point as a member
if the user Cancels:
move the placemark to the its original location
change it's visual style to 'saved, selected'
mouse-over an item in the list to highlight the Point on the map
Lines mode:
click on several Points on the map in-order to create a line
add a new Line to the item list
draw a line segment with the visual style 'unsaved, selected' to connect each point to the previous one as it's clicked
draw a line segment from the last Point to the current mouse location?
add each Point to the editing pane as it is clicked
warn the user if any Point is added to the line twice - should it just refuse?
change the visual style of the Point as it's added?
disable the Save feature until at least 2 Points have been added
if the user Saves:
change the Line's visual style to 'saved, selected'
if the user Cancels:
destroy the Line object which will remove it from the map, list, and editor
if the user chooses to redraw the Line:
change the visual style of the line to something more subdued
allow the user to draw a new line
if the user Saves:
remove the old line from the map
change the visual style of the new line
if the user Cancels:
remove the new line from the map
change the visual style of the old line back to 'saved, selected'
if the user deletes the line:
destroy the line object, removing the line from the map
assign to block:
somehow select a block by name in the editing pane
allow user to save or cancel
mouse-over an item in the list to highlight the Line on the map
Polygons mode
exactly line Lines mode except:
disable the Save feature until at least 3 Points have been added and the first Point is also the last point
possibly have an auto-close feature that draws a broken line from the last point to the first point and make the line solid once the Polygon has been saved
PolygonTool.Point
PolygonTool.Line
PolygonTool.Polygon
UI:
pane at top contains
mode selection buttons, settings
pane at left contains
top: item list, bottom: editing area
pane at right contains
map
visiblePoints collection
visibleLines collection
visiblePolygons collection
Points storage
Lines storage
Polygons storage
mapView
creates and updates placemarks, polylines, polygons for things in the visibleXxx collections (bound to those collections through controllers)
passes clicks back to the Point, Line, or Polygon that is clicked
mapView might have numerous child pointViews, lineViews, polygonViews
listView
multiple itemViews beneath
editorView
modeSelectorView
mapController
a xListController for each collection of objects (probably an ArrayController)
editorController
MapModel
data structures to store GMap* objects that are on the map
methods to add and remove items to/from the data structures
Helpful advice from B.S.Navin, on the SproutCore mailing list:
Hi Sam,
I too am exploring something similar & ran into the same problem. The
concept of a non-Dom view does not exist in sproutcore. And if you create
your own custom view object that does not include SC.View, it will not be
able to take part in the view hierarchy, as CollectionView expects an
SC.View object as its exampleView.
I explored 2 options:
1. Use SC.CollectionView with SC.View as an exampleView & set the width &
height of both to 0. That way, they will be part of the view hierarchy, but
be invisible.
2. Make gmapsController responsible for managing the actual google maps api
(including creation of the map & adding/removing markers). So
gmapsController becomes the interface to google maps. Then, use
pointsController as the marker manager. pointsController listens for changes
to the array of points & also observes for changes to the latitude &
longitude property of each point & sets the changed values to the GMarker
object.
The first approach looks simpler, but whether the additional load on the
view hierarchy is desirable or not is something you need to decide.
- NavinAbout
Create Points and Polygons on a Google Map with SproutCore
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published