Image Navigator API - Change Log Version: 10 (RC2) Build: 1.0.3.9 Date: 2010-06-02 ------------------------------------------------- * Added contour access control. SetAccessControl() can now take indices for libraries with restricted contour data. * Added a Print() method to print the portion of the image that is visible in the viewport. There are options to print overlays and to add a North Pointer and date. * Re-worked the Text() object to support multiple lines. The text should also render better in IE. * The Feature object can now take an external WFS link. * Added auto label capability for Feature object. You can specify a WFS field to be used as the label. * Re-worked the algorithm for Street labeling. This should produce better results. The labels should be more uniformly spaced and scale to the image. This should also eliminate any upside-down labels. The rendering results should look better in IE. * Added enhanced KML/KMZ export capability. Export a link to the current image and any overlays. Currently supports Point, Polyline, Polygon, Circle, Marker, Text and Feature. * Added two new events: ondragstart - Fired when user starts dragging the image with the mouse. ondragend - Fired when user stops dragging the image and releases the mouse. * Added a Fade Effect when transitioning to new images or zoom levels. * Added GetGSD() method. Returns the Ground Sample Distance (GSD) for the current image. * Added option when exporting KML that uses a element instead of a to define the bounding box for the image. * Added a Center Marker option. It places a fixed marker at the center of the viewport. * Added a Hide-On-Drag option. Hides overlays when dragging an image. This can improve performance with dense or multiple layers. * Added SetConfig()/GetConfig() methods for configuring basic API operations. * Added an array of profile objects to the Elevation tool results. This array contains the x and y coordinates for each posting and the elevation at that posting. * Added vertical area measurement for Height tool. * Augmented the Auto Navigate functionality to make the transition from image to image smoother and less disorienting. Instead of centering the image before navigation, the API attempts to keep the landmarks in the new image in the same place as the old. * Augmented the GetMeasurementPoints() method to return the image and screen coordinates for the last measurement. * Converted all HTTP GET requests to POST requests. * Changed the default transaction timeout from 10 seconds to 15 seconds. * Fixed problems in Marker object. Marker shifted its position after being dragged. In some cases, the Marker would return to its original position after a scale change. * Fixed problem when Setting Image Tool. De-coupled the setting of the unit from the tool. * (Experimental) Added SetText()/ClearText() methods to Polygon object. This can be used to label the segments of a polygon. * (Experimental) Added a new tool option called 'annotation'. Annotates the measurement results. Only works with Distance and Height. Version: 10 (RC1) Build: 1.0.3.9 Date: 2010-03-08 ------------------------------------------------- * Fixed problem with pan tool and onclick event. The onclick event is suppressed when the user is panning using the mouse. The flag indicating panning was not being cleared properly and in some cases would suppress onclick events on other object (Markers, Shapes, ..., etc) * Fixed problem in GetMeasurementPoints() not returning the correct points when "Walk The Earth" and/or "Plumb Line" options were set. * Fixed problem in IE browsers that caused the viewer window to be selected and highlighted. IE has a 'selectstart' event that is fired in response to Control-Click. If this event is allowed to bubble up to the main window it will cause whatever object is in focus to be selected and highlighted. This event is now captured and suppressed for any event in the viewer window. * Fixed problem exporting polygons within a Layer object. Due to some missing fields, any polygons defined within a Layer object would fail to be drawn on the image during an export. * Fixed cursor problem in Chrome and Safari. Theses browsers to not honor the hotspot values in the cursor files. CSS 3 now provides a way to specify the hotspot as part of the cursor style. * Fixed problem in Pitch Tool. The calculation for roof pitch should use tan() instead of atan(). Thanks to Debbie Reid for finding this. * Fixed problem where the API would auto navigate to a new image when the user attempted to pan to a measurement point. The API now disables auto-navigator during a measurement. * The API now has support for time-based billing. Activity is defined to be: Search/Navigate/View/Measure/Overlay/Render. The default time block is 10 minutes. * Shapes now perform a test to determine if they are within the current image before they are drawn. * Added GetStatistics() method. This method returns the number of activity blocks, searches, views and exports. The request can be for cumulative statistics or for statistics of the current instantiation of the Navigator object. * Added GetBookmark()/GotoBookmark() methods. Users can now capture a bookmark for an image that can be used in the future to return to the exact image and location. The bookmark is only valid for the image that is currently in the viewport. * The API now attempts to keep the user in the same year when switching orientation or level. The API also attempts to maintain the same year when navigating from image to image. There are some caveats. It's possible that when switching from Neighborhood to Community, there may not be an image for that year. A good example is Monroe County 2006. There are Neighborhoods, but no Communities. In this case, switching from a 2006 Neighborhood to Community would put you back in the 2009 library. Then if you switched back to Neighborhood you'd be placed back in 2009. There isn't a good solution for this now, but it may be something we can improve in a future release. * Markers and Text now scale like the other shape objects. * The API has a new Feature object that allows WFS layers to be overlayed onto Pictometry images. There is a new Streets object derived from Feature that overlays street segments and labels. * Integrated Debbie Reid's 3D point calculation code into the API and Server. There are two new methods: GetXYZ() and GetImageInfo() The GetImageInfo() is used to retrieve the necessary table and index information for each image. This data, along with the image points is passed to GetXYZ() along with a callback function. The callback returns an object containing the calculated latitiude, longitude and elevation. * Created a Magnifier Loupe tool. This tool allows the user to look a zoomed portion of the image without changing the scale of the entire image. This can be useful in measurement or point collection where it is often necessary, for accuracy, to zoom in the image to get the right pixel(s). * Added a "No Wildcard" option for Restricted libraries. Normally a Restricted library can be access via a "*" wildcard in the access control list. The new flag requires the library in question to be explicitly called out in the access control list. The "No Wildcard" bit needs to be set in the Path Prefix table at bit postion 1 (0x2). The normal Restricted bit, postion 0 (0x1), also needs to be set. Version: 9 Build: 1.0.3.8 Date: 2009-08-10 ------------------------------------------ * The Pictometry copyright field can now be augmented with a franchise copyright. The copyright string is specified on a per library basis in the path prefix table. * The Export() method now supports options to include the date and/or a north pointer on an exported image. * The API is now capable of using images in PAR format based on settings in the image metadata table. * The API will now abort Search()/Navigate()/GetCenterLatLng() requests if a new request is made before the current one completes. This should prevent calls from being "stacked up" on slow links and should increase responsiveness for users on wireless networks. * A modification has been made to improve Search/Navigate performance. The API now uses an on-demand strategy for point translation. An image will not have image coordinates translated until the image is activated by a call to SetView(). This prevents the server from performing dozens of translations for images that may never be viewed. * Added SetGroundPlane()/GetGroundPlane() methods in the Tools Module. Users can measure out an offset ground plane. The new offset is passed along when doing Distance, Area or Height measurements. * Added new event 'ongroundplanechange' that is fired whenever a ground plane is defined or disabled. * Re-worked the VML module to make it compatible with Internet Explorer 8. * Fixed an intermittent problem that caused tiles to not be displayed in IE6. * Fixed problem when using a Flash component and the API. Flash can steal the keyboard events and never relinquish them. This causes the keyboard modifiers for the Tools module to stop working. The fix brings focus back to the API when the tool canvas is selected. * Polygons can now be created with points that define an Outer Boundary and one or more Inner Boundaries. This allows the creation of "cut-outs" or "donut holes". * Fixed problem with panning. Image point translation is now done on-demand and asynchronously. This created a race condition between when the view became valid and pan operations were allowed. * Fixed race condition between SetView() and RenderOverlay(). Version: 8 Build: 1.0.3.7 Date: 2009-02-23 ------------------------------------------ * Fixed problem in GetMeasurementPoints() that returned the wrong number of points for a Pitch-Area measurement. * Fixed problem with text alignment in the VML renderer. Text can now be anchored using 'start', 'middle' and 'end'. * Fixed problem with Height tool. Elevation changes were not properly taken into account when projecting the endpoint of the measure. * Fixed problem with 'onviewchange' event. It was erroneously firing for scale and resize events. * Fixed problem with tile loading that in certain cases would cause IE6 to display only gray tiles. * Added ShowContourLines()/HideContourLines() methods. For authorized users, contour lines can be overlayed on an image displaying its topography. * Added elevation annotation to contour lines. * Added export to image for contour lines. * Added Pictometry logo and copyright to the view portal. * Added a configuration parameter to allow the API to use SSL. * Added an algorithm to remove redundant points from a free form measurement. This should reduce the amount of data sent to the server and reduce the number of point translations. * Added new 'thumb' field to the object returned from GetViewInfo(). Contains the link to the thumbnail image. * Added support for multi-image distance measurements. * Added support for "Walk The Earth" distance measurements. * Added support for Height Tool plumb line. * Added support for top-down height measurements. * Added new event 'onresize' that is fired whenever the view port is resized. * Updated "Getting Started" page with instructions on using the measurement tools. Version: 7 Build: 1.0.3.6 Date: 2009-01-09 ------------------------------------------ * Fixed problem in server that returned the incorrect heading for canted images. * Fixed Distance Tool when calculating perimeter of a box region. * Fixed Web Handler proxy server that was sometimes corrupting images return from an ExportImage() call. * Fixed problem with intermediate measurements using key. * Added new method SetAccessControl() to manage access to image libraries. * Added new method AddGeoFence() to limit image access to those within a bounded geographical region. * Elevation tool now returns distance. Can be used to compute slope. * Made text rendering better in exported images. Version: 6 Build: 1.0.3.5 Date: 2008-09-24 ------------------------------------------ * Fixed cursor problems. There were a number of bugs that broke cursors in newer browsers like FireFox 3 and Chrome. * Fixed problem in Select Tool that caused incorrect image coordinates to be selected when the user tried to pan outside of the current view port. This problem also caused the select rectangle to be drawn incorrectly. * Made some security changes to the server. * Added statistics collection to the server. * Server can now differentiate between non-restricted and restricted libraries. Version: 5 Build: 1.0.3.4 Date: 2008-09-09 ------------------------------------------ * Fixed problem with generateId() method in YUI that caused some problems in FireFox 3. * Fixed some positioning problems when was set in the webpage. Some older sections of code had not been updated to specify positioning units. * Fixed problem that broke overlay rendering when an empty Layer was added. * Fixed problem with ExportImage() with PNG markers in IE. Due to the hack needed in IE6 to get around the PNG transparency problem, the wrong image URL was being sent to the server. * There is a race condition that exists between calls to RenderOverlay() and AddOverlay()/RemoveOverlay(). If AddOverlay()/RemoveOverlay() is called after RenderOverlay(), but before the 'onoverlayrendered' event is fired, there is a potential mismatch between the server response and the internal shape data structure. The API now ignores any mismatched response. * Added new methods, GetArea() and GetDistance(), to the Circle, Polyline, Polygon and Layer objects that allow the automatic computation of Area and Distance. NOTE: GetArea() is not defined for the Polyline object or Polylines within a layer. Version: 4 Build: 1.0.3.3 Date: 2008-07-16 ------------------------------------------ * Added drag/drop functionality to the Marker object. Markers are, by default, created as non-draggable. This can be overridden by setting the draggable field in the options to true or by calling the Marker method SetDraggable(); Example using options --------------------- var moptions = {draggable : true}; var marker = new Pol.VI.Marker( new Pol.VI.LatLng(43.003537, -77.615908), moptions ); -- OR -- marker.SetDraggable(true); When draggable, the Marker displays the 'move' cursor. When the mouse is released after a drag event, the Marker automatically updates its location based on its new image coordinates. * Added new event 'onlocationchange' that is fired by the Marker object anytime it is dragged/dropped. The event indicates that the marker's new location has been updated. * Added experimental Layer object. Layer is a container class that enables the efficient aggregation of certain shape objects. The supported shapes are: 1. Points 2. Polylines 3. Polygons See the "Getting Started" documentation for how to use this object and its limitations. Version: 3 Build: 1.0.3.2 Date: 2008-07-03 ------------------------------------------ * Fixed problem that caused the status object to be corrupted. JSON parse errors caused a "Bad Response" to be set that overwrote the internal status object. * Fixed problem that allowed a measurement request to be generated when no active tool was set. * Fixed problem that allowed a export image request to be made when only one point was selected. * Fixed problem that allowed a export world file request to be made when only one point was selected. Version: 2 Build: 1.0.3.1 Date: 2008-06-06 ------------------------------------------ * Added new event called onnavigatefail. Fired when a navigation operation initiated by the Navigate() method fails. A failure may occur when the user navigates across a boundary between neighborhoods and communities or vice-versa. Another failure case is when the user navigates to an area that doesn't have the required orientation. A third failure case is when the user navigates outside of a coverage area. This event allows the developer to take action to query the API for what images are available or to give a visual indication to the user in the case where no images are available. * Added new methods SetMouseWheelIncr()/GetMouseWheelIncr(). Allows the mouse wheel scale increment to be changed from the default of 25%. * Added new experimental methods SetExportOverlay()/GetExportOverlay(). Allows authorized users to include overlay shape data on an exported image. * Added new method GotoImage() that takes a position value as returned from GetViewInfo() and goes directly to that image. This is similar in nature to GetNextImage() and GetPrevImage(), but instead of cycling through the image list, GotoImage() goes there directly. * Augmented the GetViewInfo() method to return a new field that contains the position, name, year, month, and day for each image in the selected view. The position field can be used in conjunction with the GotoImage() method (see above) to directly select an image. * Added new method FindFirstOblique() to return the first valid oblique image in a view. * Added new method ExportWorldFile() for Orthogonal images. * Fixed problem in RenderOverlay() that issued a call to the server when the overlay was empty. * Fixed problem with ExportImage() when passed image coordinates that were outside of the width and/or height of the source image. * Fixed problem with "overlay drift" at certain scales. * Fixed problem in IsAvailable() that was returning true for orthogonal request with orientations other than North. * Fixed problem in SetView() that displayed an incorrect view for an orthogonal request with an orientation other than North. * Added new methods SetCursors() and ResetCursors() to override/reset standard navigator cursors. * The 'onclick' event is no longer fired after a 'click and drag' on the viewer. Version: 1 Build: 1.0.3.0 Date: 2008-04-15 ------------------------------------------ * This release marks the beginning of production service. * The Image Navigator CSS and API are now accessed by calling the Pictometry API Loader web service. See the GettingStarted.html file for details. * Fix to problem with repeated calls to RenderOverlay(). * API automatically clears the old view if a search fails. * Navigator-On-Select works even when cursor is not on the image. * Events can now be registered on all supported overlay objects. These objects support the following events: onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmouseout, and oncontextmenu. * The event registration model for overlay objects has changed. The old model had each object type have its own registration code and event listeners. For applications that have lots of overlay objects, this could consume a lot of resources and add a great deal of overhead in the browser managing all of the listeners. The API now uses an event delegation model that reduces the number of resources and listeners needed to provide event callbacks. In the new model, an overlay shape registers for an event using the API AttachEvent() method. This method now takes an optional 3 parameter that is the overlay object reference. For example, in the old model, registration was as follows: // Create a marker object. var marker = new Pol.VI.Marker( new Pol.VI.LatLng(43.003537, -77.615908) ); // Attach an onclick event. marker.AttachEvent( 'onclick', OnMarkerClick ); Assuming your Image Navigator reference is ImgNav, the new model registration is: // Create a marker object. var marker = new Pol.VI.Marker( new Pol.VI.LatLng(43.003537, -77.615908) ); // Attach an onclick event. ImgNav.AttachEvent( 'onclick', OnMarkerClick, marker ); * The ImageEvent callback object now returns two new fields in addition to the mouse and image coordinates. These fields are: type - A string specifying the event type. target - A reference to the object that took the event. * The Search() method now takes an optional 4 parameter. This parameter is an object reference that is provided in the search callback object as the 'data' field. Version: Beta Build: 1.1.1.10 ----------------------------- * Fix for the 'toggle problem' when setting a new image level and changing scale. * Changes to the ExportImage() method. The formerly optional 'region' parameter is now required. Typically the region object can be obtained by calling one of these methods: * GetViewPort() - Get the image coordinates visible in the viewport. * GetSelectedArea() - Get the image coordinates from the Select tool. ExportImage() now takes an optional second argument that specifies the format of the exported image. The API supports: JPEG (default), GIF and PNG. There are enumerations for these values: * Pol.VI.ImageFormats.JPEG * Pol.VI.ImageFormats.GIF * Pol.VI.ImageFormats.PNG Exported images now contain a copyright at the bottom-right area of the image. Version: Beta Build: 1.1.1.9 ---------------------------- * Augmented Circle object to accept a radius as a distance instead of another coordinate. The radius can have an optional unit field for the distance. The default is: meters. Example ------- var circle = new Pol.VI.Circle( {center : new Pol.VI.LatLng(43.0032,-77.6158), radius : {distance : 20, unit : Pol.VI.DistanceUnits.Feet}}, 'blue', '2px', '1.0', 'red', '0.35' ); The radius object has a required distance field and optional unit field. * Fixed a problem with 'Search' after a pan operation in Auto Navigator mode. The search response would fail to load the new image. Version: Beta Build: 1.1.1.8 ---------------------------- * All measurement callback objects have a 'tool' field that indicates which tool caused the callback. You can now have a single measurement callback function that switches off the tool field to determine what fields to process. * This release contains an upgraded Tools module with the Pitched Area Tool. - This tool computes the area and pitch angle for a roof. The measurement callback for the Pitched Area tool contains the following fields: area - This object contains the fields: 'value' and 'unit'; angle - This object contains the fields: 'value' and 'unit'; eave - This object contains the fields: 'value' and 'unit'; peak - This object contains the fields: 'value' and 'unit'; pitch - This object contains the fields: 'value'; Example Measurement Callback ---------------------------- function MeasurementCallback( resp ) { var mesg; if( resp.tool == Pol.VI.ImageTools.Pitch ) { mesg = "Roof Area: " + resp.area.value + " " + resp.area.unit; mesg += "\nEave Height: " + resp.eave.value + " " + resp.eave.unit; mesg += "\nPeak Height: " + resp.peak.value + " " + resp.peak.unit; mesg += "\nRoof Angle: " + resp.angle.value + " " + resp.angle.unit; mesg += "\nRoof Pitch: " + resp.pitch.value; alert(mesg); } } * Contains a fix to the Renderer class that caused the Circle object to be incorrectly positioned in IE. Version: Beta Build: 1.1.1.7 ---------------------------- * This release represents a substantial reworking of the Image Navigator API and server components. This was necessary to augment the implementation to include new features and capabilities not envisioned in the original design. In most cases these changes are transparent. The changes that affect API users are outlined in the following items. * Methods GetNextImage(), GetPrevImage() and GetViewInfo() have been added. - GetNextImage() displays the next image for the selected view. - GetPrevImage() displays the previous image for the selected view. - GetViewInfo() returns an object that contains the selected image index and total image count. * The ExportImage() method saves a selected portion of an image to the user's desktop. * The Pol.VI.Annotation class has been renamed Pol.VI.Text. Annotation has a broader meaning than Text in other Pictometry products and it has created a bit of confusion. This name change was made to better represent what the object actually does. * There are is a new tool called Select. - The Select Tool enables the user to select an area of interest on an image. The new method GetSelectedArea() returns the upper left/lower right image coordinates bounded by the selection rectangle. * There are two new events: onstartselect and onendselect. These events are generated from the Select Tool. * The Pol.VI.Marker class now supports various mouse events: * onclick * ondblclick * onmousedown * onmouseup * onmouseover * onmouseout Callbacks are registered by calling the marker's AttachEvent() method. Callbacks can be unregistered by calling the marker's DetachEvent() method. Example ------- var marker = new Pol.VI.Marker( new Pol.VI.LatLng(43.003537, -77.615908) ); // Attach an onclick event handler. marker.AttachEvent('onclick', OnMarkerClick); // Add marker to the overlay. ImgNav.AddOverlay(marker); Callback -------- The callback is passed an object that contains the following fields: target - A reference to the marker that took the event. mouse - An object containing the mouse coordinates. mouse.x, mouse.y image - An object containing the image coordinates. image.x, image.y function OnMarkerClick( evt ) { alert( "Marker: " + evt.target.GetId() + " Mouse: " + evt.mouse.x + ',' + evt.mouse.y + " Image: " + evt.image.x + ',' + evt.image.y ); } * The events returned from the Image Navigator have been restructured to better reflect the types of events available. Instead of the catch-all ImageEvent, there are now 3 event types which are listed below: * ImageEvent - is returned on events that a triggered by user action with the mouse. The object contains the mouse and image x/y coordinates. * ViewEvent - is returned on events that affect the current view like a view change or scale change. The object contains the current view and scale factor. * InfoEvent - is returned on events that are informational. The object contains a status and reason text. The full descriptions can be found in the API documentation. * Two events have been renamed: onchangeview is now onviewchange and onchangescale is now onscalechange. * The AddElement() method has been deprecated and the functionality moved to the Overlay manager. This was necessary to put the management of all image overlay functionality under a single component. Example ------- Old AddElement() method: ImgNav.AddElement('crosshair', Latitude, Longitude, 30, 30, "pin", "", 0); New overlay class Pol.VI.Element: // Set-up element options. var eoptions = { id : 'crosshair', size : new Pol.VI.Size(30, 30), anchor : new Pol.VI.Pixel(15, 15), className : 'pin' }; // Create new element object. var crosshair = new Pol.VI.Element( new Pol.VI.LatLng(Latitude, Longitude), eoptions ); // Add the element to the overlay. ImgNav.AddOverlay(crosshair); // Render it. ImgNav.RenderOverlay(); The full desciption can be found in the API documentation. * The complete YAHOO User Interface (YUI) library is now available under the support folder.