4 <meta charset="utf-8" />
5 <title>jQuery Geo</title>
6 <meta name="description" content="jQuery Geo - A spatial mapping plugin for jQuery" />
7 <meta name="author" content="Ryan Westphal" />
8 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9 <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/themes/blitzer/jquery-ui.css" />
10 <style type="text/css">
11 html { font:13px/1.231 sans-serif; }
13 body, h1 { margin: 0; padding: 0; }
15 body, select, input, textarea
22 white-space: pre-wrap;
23 white-space: pre-line;
57 vertical-align: bottom;
62 display: inline-block;
97 box-shadow: 2px 2px #555;
104 list-style-type: none;
109 display: inline-block;
125 <img src="apple-touch-icon.png" alt="" />
126 <h1><span class="framework">jQuery Geo</span><span class="subtitle">write less, map more</span></h1>
129 <div class="container">
130 <div class="main" role="main">
131 <div class="nav project-links">
132 <a href="http://jquerygeo.com/1.0b1/" title="Documentation and demos">Docs & Demos</a>
133 <a href="https://github.com/AppGeo/geo/" title="Source code on GitHub">GitHub</a>
136 <h2>jQuery Geo - an interactive mapping plugin</h2>
138 <p>jQuery Geo, an open-source geospatial mapping project from Applied Geographics, provides a streamlined JavaScript API for a large percentage of your online mapping needs. Whether you just want to display a map on a wep page as quickly as possible or you are a more advanced GIS user, jQuery Geo can help!</p>
140 <p>You can check back here or follow <a href="https://twitter.com/jQueryGeo">@jQueryGeo</a> on Twitter for release announcements. Also, head over to the lead developer's Twitter account, <a href="https://twitter.com/ryanttb">@ryanttb</a>, for development info, links, or to ask questions.</p>
144 <p>Using jQuery Geo requires adding one element, including one script (apart from jQuery itself) and calling one function. The following copy-and-paste snippet will help you get started.</p>
145 <pre><div id="map" style="height: 320px;"></div>
146 <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
147 <script src="http://code.jquerygeo.com/jquery.geo-1.0b1.min.js"></script>
148 <script>$(function() { $( "#map" ).geomap( ); });</script></pre>
150 <p>code.jquerygeo.com is on the CloudFlare Content Delivery Network (CDN) so our minified, gzipped library will get to your client as fast as possible!</p>
152 <h2>Beta 1 released!</h2>
153 <time>2012-07-30</time>
155 <p>Over 120 commits and five months after the release of alpha 4, jQuery Geo is now feature complete with what we planned for version 1.0!</p>
157 <h3>New interaction engine</h3>
159 <p>User interaction is a big part of an interactive map widget, obviously!, and in beta 1 we have optimized panning, zooming, and how they work together. Your maps should feel more responsive overall.</p>
161 <h3>Wicked fast mobile</h3>
163 <p>Using CSS3 features on modern mobile devices brings tremendous speed improvements to iOS and Android.</p>
165 <h3>New default map</h3>
167 <p>Probably the most noticable change, jQuery Geo is still using OpenStreetMap data by default but in the form of tiles rendered by <a href="http://open.mapquest.com/" target="_blank">mapquest open</a>. It's your same open data but the servers are faster and the cartography is nicer.</p>
169 <h3>New build environment</h3>
171 <p>jQuery Geo now builds with <a href="https://github.com/cowboy/grunt" target="_blank">grunt</a> from Ben Alman making it 100% lint free, smaller, and supporting the next generation of the jQuery Plugins website.</p>
175 <p>There is a whole new mode style called drag. Previously, draw modes such as drawPoint and drawPolygon, allow the user to perform individual clicks or taps to create shapes. New modes have been added that trigger shape events on a single motion: dragBox and dragCircle. They disable map panning and allow quick digitization of rectangles and circles, great for spatial queries and selecting! They both send GeoJSON Polygon objects as the geo argument to your shape event handler.</p>
179 <p>Two new events, loadstart and loadend, allow you to display indicators or give feedback to users while map tiles or other images are downloading.</p>
181 <h3>Forcing refresh</h3>
183 <p>Sometimes you have time-dependent, continuously updated data and images coming from a map server. New arguments to refresh allow you to get updated images even if the map's viewport (and thus, image URLs) hasn't changed. You can also refresh only specific services that you know will have changed, leaving other more static images in place.</p>
185 <h3>Zoom level constraints</h3>
187 <p>Whether you have a tiled or non-tiled (all shingled) map, you can now limit how far in and/or out a user can zoom with the new zoomMax and zoomMin options.</p>
191 <p>There is one, small breaking change in how all template strings are processed. This is due to a change (and finalization in the API) to jsRender, which jQuery Geo uses for a service's src template strings and measureLabels template strings. In short, use {{:variable}} where you used to use {{=variable}}. You can read more about this change on Boris Moore's blog post: <a href="http://www.borismoore.com/2012/03/approaching-beta-whats-changing-in_06.html" target="_blank">http://www.borismoore.com/2012/03/approaching-beta-whats-changing-in_06.html</a>.</p>
195 <p>Thanks for checking out jQuery Geo! We hope you find it useful and will keep you updated as we press on to a 1.0 release!</p>
197 <p>Here's the full changelog:</p>
199 <pre>* geographics - use canvas compositing for Polygons with holes
200 * geographics - [bug] on polygons with holes, stroke draws a line from exterior ring to interior one
201 * docs - geomap - trigger a shape event when a user finishes measuring
202 * geomap - trigger a shape event when a user finishes measuring
203 * geomap - [bug] elements inside the map div lose their position setting
204 * geomap - trigger bboxchange when we update the map size after the window resizes
205 * geomap - [bug] multiple map widgets share the same compiled measureLabels template names and overwrite each other
206 * examples - inset map/multiple maps example
207 * geomap - [bug] in zoom mode, dragging from bottom-right to top-left draws box but doesn't zoom
208 * geomap - [bug] any mouse down triggers refresh, even without pan
210 ** Cache-Control header max-age set to 5 years
211 ** remove Expires header
212 * geomap - upgrade to jsrender 1.0pre
213 * deploy - build releases using grunt
214 * deploy - make a package for new jQuery plugin directory
215 ** https://github.com/jquery/plugins.jquery.com/blob/master/docs/package.md
216 * deploy - lint JavaScript files
217 * docs - geomap - dragBbox mode
218 * docs - geo - polygonize function for bbox
219 * geo - polygonize function for bbox
220 * geomap - dragBbox mode
221 * docs - geomap - shift option (default, zoom, dragBbox, off)
222 * geomap - shift option (default, zoom, dragBbox, off)
223 * docs - geomap - loadstart, loadend events
224 * docs - geomap - allow append to take an array of shapes
225 * docs - geomap - allow remove to take an array of shapes
226 * docs - geomap - improve services option documentation
227 * geomap - clamp measure labels to [0, 0]
228 * geo - clamp centroid to bbox
229 * geomap - measure label for polygon should be in centroid
230 * geomap - merge interactive pan and zoom into one, faster system (pan/zoom rewrite)
231 * geomap - [bug] iOS - panning is visually jumpy but settles on the correct bbox in the end
232 * geomap - pinch-zoom doesn't follow user's fingers close enough when scaling
233 * geomap - [bug] pinch zoom on iPad 2 (iOS 5) doesn't refresh tiles when zooming out
234 * geomap - request new image in shingled service during interactive pan
235 * geomap - [bug] zoom in more than once with zoom method moves tiles to the wrong spot
236 * geomap - [bug] only services that have finished refreshing move when the user pans
237 * geomap - [bug] map panning is jumpy, appears to be related to shapes and/or drawing context
238 * geomap - [bug] pan sometimes lags on first drag
239 * geomap - tiled data-scaleOrigin should be stored as an array
240 * geomap - android - [bug] cannot always pan map after appending shapes
241 * geomap - android - browser stops pan/zoom after 7 logos on logo demo
242 * geomap - [bug] mouse wheel on bad or missing tile doesn't zoom out on first rotate
243 * geomap - increase mobile performance by 9000
244 * docs - geomap - add argument to refresh to force reload of images for dynamic data
245 * docs - geomap - allow service-level refresh
246 * docs - geomap - zoomMax option (tiled & shingled)
247 * docs - geo - include method for bbox
248 * geomap - bboxMax should reset center & pixelSize
249 * geomap - [bug] initializing center, zoom, & bbox doesn't set all properties
250 * geo - [bug] polygonize doesn't return valid polygon when using geodetic coordinates
251 * geomap - [bug] dragBbox doesn't include the bbox property in the shape
252 * geomap - dragBbox should send a Point (with bbox) for single clicks
253 * docs - geomap - dragCircle mode
254 * geo - include method for bbox
255 * geomap - dragCircle mode
256 * geomap - [regression] refresh & toggle methods no longer keep original service objects in sync
257 * geomap - [bug] when a singled image hasn't loaded after pan and you double click on empty space, the zoomed bbox seems wrong
258 * geomap - allow service-level refresh
259 * geographics - remove the blit canvas from the DOM, i.e., don't attach
260 * geomap - don't initialze service-level geographics until they're used
261 * geomap - add argument to refresh to force reload of images (in case of dynamic data)
262 * geomap - loadstart, loadend events
263 * geomap - allow append to take an array of shapes
264 * geomap - allow remove to take an array of shapes
265 * geomap - zoomMax option
266 * geomap - [bug] cannot interact with other elements on the page on iOS after panning the map (#71)
267 * geomap - iOS - [bug] after one finger is removed, stop processing as if multitouch is still on
268 * geomap - dumb high-precision mice down on tiled maps
269 ** otherwise, the high precision rounds down to zero change in zoom
270 * geomap - use linear distance for pinch zoom calculation
271 * docs - geomap - zoomMin option
272 * geomap - zoomMin option
273 * docs - geomap - use MapQuest Open by default; can't deny that it looks much nicer
274 * geomap - use MapQuest Open by default; can't deny that it looks much nicer
275 * docs - geomap - rename dragBbox to dragBox
276 * geomap - rename dragBbox to dragBox
277 * geomap - [bug] error using tiled deferred services</pre>
279 <h2>Alpha 4 released!</h2>
280 <time>2012-02-19</time>
282 <p>It's been a long three months but we're very happy to announce the release of jQuery Geo 1.0a4! Here are some highlights and details:</p>
284 <h3>At the service level</h3>
286 <p>In alpha 3, you could append and interact with shapes on the map. In alpha 4, this is extended to services! Service-level shapes have their own shapeStyle apart from the map's and hide when their service is hidden.</p>
290 <p>There are new modes to let you measure distance & area, and a static mode for when you want to display a map but not let users interact with it. Apart from the three new built-in modes, you can also create custom modes to help organize your app.</p>
292 <h3>What's that? CSS labels!</h3>
294 <p>You can now give any shape a label when you append it. You can style the label from your regular style sheet using the .geo-label class which opens labeling up to all the design power of CSS3. There's even more potential if you put a class or id on your map service because you can target labels on different services using CSS rules. Also, labels can be any HTML which opens them up to new features in HTML5!</p>
296 <h3>More service src options</h3>
298 <p>The old getUrl property has been renamed to src (see Breaking below) and you can now set it to a string template. jQuery Geo will stick your tile row, column, zoom, or image bbox in for you. Services defined as a string are a little easier on the eyes than a function and can be stored as JSON data.</p>
300 <p>You can still use a function and the function can now return a <a href="http://api.jquery.com/category/deferred-object/">jQuery Promise</a> to delay loading of the map image or tile. Want to calculate a Mandlebrot image in a JavaScript web worker without blocking user interaction? Return a new jQuery.Deferred() and call resolve when you're done!</p>
304 <p>This version has better mobile support including pinch zoom on iOS and Android 3+ as well as other bug fixes for mobile devices.</p>
306 <h3>Don't worry about $.geo.proj so much</h3>
308 <p>You can now send either geodetic (lon, lat) or projected (x, y) coordinates to any library function and it will return accordingly if you stay on the default web mercator projection. You should still set it to null or implement the (to|from)GeodeticPos functions if you need to change projections.</p>
312 <p>There is one deprecation (a service object property will be renamed in beta) and one minor breaking change.</p>
314 <p>To align this API with HTML itself, the getUrl property on service objects will be renamed to src. Using either src or getUrl will work for this alpha release but getUrl will be removed for beta. Please update any map services to use the new src property when you're defining them.</p>
316 <p>Also on service objects, the initial opacity and visibility are in a property of the service object itself named style. Your old services will still function but ones you may expect to be hidden initially will be visible until you update the service object.</p>
318 <p>To exemplify both of these changes, instead of: <pre><code>{
319 type: "tiled",
320 getUrl: function( view ) { return ""; },
321 visibility: "hidden"
322 }</code></pre> you should write: <pre><code>{
323 type: "tiled",
324 src: function( view ) { return ""; },
325 style: { visibility: "hidden" }
328 <h3>Everything else</h3>
330 <p>With over 60 commits, there are more features and bug fixes to write about. If you dare to click the link below (or read the README file on the project's GitHub page) you can get a better idea of what went into this build. This is the last alpha release (!) and the path to beta will add unit testing, a better build process, and smaller, more refined source code. Thanks for all your support!</p>
332 <pre>* geomap - [bug] changing the tilingScheme doesn't update pixelSize, maxPixelSize, center or centerMax
333 * geomap - [bug] shingled services throw exception during resize
334 * docs - geomap - axisLayout option
335 * geomap - axisLayout option
336 * docs - upgrade to jQuery Mobile rc3
337 * docs - allow page refreshing
338 * docs - geomap - more modes: measureDistance, measureArea, static
339 * docs - geomap - append label argument
340 * docs - geomap - toPixel/toMap should take all coordinate dimensions like the proj functions
341 * geomap - toPixel/toMap should take all coordinate dimensions like the proj functions
342 * geomap - move the drawing container instead of individual points during pan
343 * geomap - [bug] drawStyle resets after window resize
344 * geomap - append label argument
345 * docs - geomap - measureLabels option
346 * geomap - measureLabels option
347 * geomap - measureDistance mode
348 * geomap - measureArea mode
349 * docs - geomap - service-level shapeStyle
350 * docs - geomap - getUrl string option
351 * geomap - [bug] create doesn't clear drawing shapes
352 * docs - geomap - service-level shapes
353 * docs - geo - detect geodetic coordinates and call $.geo.proj automatically, don't require devs to set $.geo.proj to null
354 * docs - geomap - add projection section explaining how bbox & center affect map unit type
355 * docs - geomap - rename getUrl to src
356 * docs - geomap - scroll option
357 * docs - geomap - pannable option
358 * geomap - src string option
359 * examples - string service src
360 * geomap - [bug] map tracks mouse when not panning if click on other elements
361 * geomap - pannable option
362 * geomap - scroll option
363 * geomap - [bug] shapesContainer is being cleared twice during mouse wheel zoom
364 * geomap - support pinch zoom on iOS
365 * docs - geo - add recenter function for bbox
366 * geomap - static mode
367 * docs - geomap - allow Deferred or Promise as return value from src function
368 * geomap - [bug] widget factory merges first service with default sometimes causing exceptions with shingled services
369 * geomap - allow Deferred or Promise as return value from src function
370 * geomap - [bug] resize event triggered too many times during resize
371 * geomap - service-level shapes
372 * geomap - service-level find
373 * geographics - add a resize method, call from geomap.resize
374 * geo - add recenter function for bbox
375 * geomap - [bug] errors creating second un-tiled map after destroying a first on same element
376 * geomap - refresh shouldn't request new images if the map element is hidden
377 * geomap - [bug] delayed multitouch isn't nearly as smooth as true multitouch
378 * geomap - [bug] tiled pinch zoom isn't smooth
379 * geo - detect geodetic coordinates and call $.geo.proj automatically, don't require devs to set $.geo.proj to null
380 * geomap - [bug] mouse wheel doesn't work with jQuery 1.7
381 ** upgrade to latest jquery.mousewheel plugin
382 * geomap - service object visibility and opacity options should be moved to a style property
383 * geomap - use _currentServices in all functions unless we actually need to update the public options services object
384 * geomap - don't change user's service objects in opacity/toggle
385 * geomap - show attr text
386 * docs - geomap - selector argument to find method
387 * geomap - selector argument to find method
388 * geomap - pan mode should use a hand cursor by default
389 * geomap - [bug] only services that have finished refreshing move when the user pans
390 ** for a4: hide unfinished services
391 * geomap - [bug] a user can mess with the center option, e.g., convert numbers to strings, and it can wreck havoc with map state
392 * geomap - [bug] zoom option doesn't return proper values for shingled services
393 * geomap - [bug] non-tiled maps can zoom out past zoom 0
394 * geomap - don't request tiles that are -y index
395 * geomap - [bug] initializing tiled map by non-geodetic bbox always causes zoom level 0
396 * docs - geomap - empty string needed for label element
397 * geomap - [bug] double tap to end shapes adds two points before ending the shape, in different places
398 * geomap - [bug] lifting fingers after pinch zoom in drawLineString or drawPolygon modes sometimes adds fake visual coordinate on touch point last lifted
399 * docs - upgrade to jQuery 1.7.2
400 * geomap - [bug] scroll=off doesn't zoom map but also doesn't allow document scroll
401 * geomap - [bug] changing mode does not reset measure drawing
402 * geomap - [bug] jQuery UI Widget Factory no longer passes pageX & pageY event properties during _trigger when using jQuery 1.7
403 ** upgrade to Widget Factory 1.8.17
404 * examples - all demo (shingled)
405 * docs - geomap - custom modes
406 * examples - all demo (tiled)</pre>
408 <h2>Alpha 3 released!</h2>
409 <time>2011-11-01</time>
411 <h3>jQuery Geo 1.0 Alpha 3 is mostly about sketching!</h3>
413 <li>new modes: drawPoint, drawLineString, and drawPolygon allow users to draw on your map</li>
414 <li>new event: shape triggers anytime a user draws a feature</li>
415 <li>new style option: drawStyle lets you change how the shapes look while being drawn</li>
417 <h3>It's also about geometry functions!</h3>
419 <li>$.geo's center, height/width, expandBy, scaleBy & reaspect functions operate on bounding boxes</li>
420 <li>$.geo's bbox, distance, contains & centroid functions operate on geometries</li>
422 <p>Many examples have more class and now link to jsFiddles to further explain what's going on!</p>
423 <h3>And a tiny bit about size</h3>
424 <p>jQuery Geo is now hosted on a CDN with gzip enabled bringing the entire library to your neighborhood at under 18k.</p>
426 <p>There are some minor breaking changes to make the API more consistent.</p>
428 <li>The getPixelSize function is now a read-only option named pixelSize: <pre><code>$( "#map" ).geomap( "option", "pixelSize" );</code></pre></li>
429 <li>The shapeStyle function is also now an option, e.g.: <pre><code>$( "#map" ).geomap( "option", "shapeStyle", { color: "red" } );</code></pre></li>
431 The boolean visible property on service objects is now the visibility property found in CSS and geomap styles and can be "visible" or "hidden":
432 <pre><code>$( "#map" ).geomap( { services: [ { id: "roads", visibility: "hidden", ... } ] } );</code></pre>
437 <p>The links above will always point to the latest stable release. However, you can test the most recently committed docs, code & demos by heading over to the test release.</p>
438 <a data-role="button" href="http://jquerygeo.com/test/" title="jQuery Geo test build">Test docs & demos</a>
445 <a href="http://www.appgeo.com"><img width="180" height="48" title="Applied Geographics" alt="" src="data:image/png;base64,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" /></a>
450 <a href="http://jquery.com"><img id="jQueryLogo" title="jQuery" alt="" src="http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif" /></a>
455 <img title="HTML5" alt="" src="http://www.w3.org/html/logo/downloads/HTML5_Badge_64.png" />
460 <a href="http://mediatemple.net"><img title="Media Temple" alt="" src="http://mediatemple.net/_images/partnerlogos/mt-120x60-dk.png" /></a>
465 <a href="http://www.cloudflare.com"><img title="CloudFlare" alt="" src="https://www.cloudflare.com/media/images/web-badges/cf-web-badges-a-gray-on.png" /></a>
472 <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
473 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/jquery-ui.min.js"></script>
474 <script type="text/javascript" src="http://code.jquerygeo.com/jquery.geo-1.0b1.min.js"></script>
475 <script type="text/javascript">
479 $(".nav").buttonset();
480 $("a").filter("[data-role='button']").button();
482 if (navigator.geolocation) {
483 navigator.geolocation.getCurrentPosition(function (p) {
484 initMap([p.coords.longitude, p.coords.latitude]);
485 }, function (error) {
492 function initMap(center) {
493 map = $(".geomap").geomap({
494 center: center || [-71.0597732, 42.3584308],
498 $( ".osm" ).geomap("opacity", .5);
502 <script type="text/javascript">
503 var _gaq = [['_setAccount', 'UA-26084853-1'], ['_trackPageview']];
505 var g = d.createElement(t), s = d.getElementsByTagName(t)[0]; g.async = 1;
506 g.src = ('https:' == location.protocol ? '//ssl' : '//www') + '.google-analytics.com/ga.js';
507 s.parentNode.insertBefore(g, s);
508 } (document, 'script'));