Blog

Updates, examples and tips from the inside.

Case Study: Polaris Mobile Apps and Aeris

by nshipes on Mar 10, 2014

Over the past few months, we’ve been working closely with Polaris Industries to integrate our Aeris platform into their new iOS and Android applications, such as Snow Trails and ORV Trails. Polaris not only wanted to provide basic weather information like current conditions and forecasts, but also how the weather will affect outdoor activities and trail conditions for their users. Snow Trails was also featured in the AppStore’s Navigation category last week.

AppStore Navigation Feature

All weather data within the Polaris applications is supplied by our Aeris API, while all map overlays are built on top of our mobile SDKs. We also worked with Polaris to provide their apps with custom map overlays for trails and routes specific to the activity, which includes processing, generating and hosting of trail data and tile overlays.

Polaris Trail Overlays

Additionally, we worked with Polaris to create a custom API to use exclusively in their own applications that can take advantage of the many features of our mobile SDKs. One of the more interesting components was the custom activities endpoint we developed that can rank how good or bad conditions are for a specific outdoor activity based on certain weather criteria, such as snowmobiling or motorcycle riding. We also developed an endpoint to provide dealer information utilizing our standard API architecture and actions, allowing for quick integration and ease of use within the apps using our common set of request actions.

Polaris Endpoints

In addition to our Aeris weather data integration, Polaris took advantage of our custom development services to assist with the design and development of several other components of their iOS and Android apps. One of the more exciting features was the development of the digital gauges that interface with their upcoming Polaris Link bluetooth module. We designed and built the digital gauges to give the user real-time engine and vehicle data in a easy to read and highly animated interface, especially when transitioning between changes in what items are to be displayed.

As with Polaris, we can work directly with you to provide a wide range of custom development solutions for your applications. If you have any questions regarding our custom development process, feel free to contact us.

posted in Case Study, General, News

Aeris iOS Weather Framework 1.1.8 Released

by nshipes on Jun 26, 2013

Version 1.1.8 of our Aeris iOS Weather framework is now available which fixes several bugs and includes many minor improvements. The biggest new feature is it now supports accessing and controlling individual frames within an image animation on the interactive map.

Refer to the complete 1.1.8 change log for more details about the fixes and changes included in this release.

Accessing Animation Frames
With this 1.1.8 release, you can now access and control individual frames within a currently animating overlay on your interactive map. With this, we have also introduced a new AFAnimationControlView that displays a UIPageControl and next/previous buttons for advancing the animation frames. This view is now automatically added to your map view if you have the default controls enabled in your AerisMapConfig.plist WeatherMap.Controls.ShowControls setting. You can also show and hide this animation view by accessing the animControlView property on your AFWeatherMap instance.

If you wish to use your own custom control view for the animation, just update and control it using the following new methods now available in AFWeatherMap instances:


/**
 Steps the current animation forward one frame.
 */
- (void)stepAnimationForward;

/**
 Steps the current animation back one frame.
 */
- (void)stepAnimationBack;

/**
 Advances to a specific frame within the current overlay animation. Note that the animation must have been loaded already by calling `startAnimating` and the 
 loading process completes.
 
 @param frame The index of the frame in the animation to advance to.
 @param stop Whether or not to stop the animation. If NO, animating will continue normally from the specified frame.
 */
- (void)goToAnimationFrame:(NSUInteger)frame stop:(BOOL)stop;

And make sure to implement the following AFWeatherMapDelegate method so your custom animation control view can be updated as the internal animation updates, such as the total number of frames currently loaded and which frame the animation is displaying:


/**
 Tells the delegate when the animation frame changed.
 
 @param weatherMap The `AFWeatherMap` instance that triggered the event.
 @param frame The frame number the animation is currently displaying.
 @param date The `NSDate` representing the valid date and time for the current frame.
 @param totalIntervals The total number of frames in the animation.
 */
- (void)weatherMap:(AFWeatherMap *)weatherMap didUpdateAnimationToFrame:(NSUInteger)frame withDate:(NSDate *)date totalIntervals:(NSUInteger)totalIntervals;

Make sure to review the complete map properties and methods available by reviewing the full API documentation.

posted in Aeris Mobile, General, News, Product, What's New

Aeris Weather API 1.2.17 Released

by lhuffman on Jun 12, 2013

We released version 1.2.17 of our Aeris Weather API to production yesterday. This minor update provides several bug fixes and other minor improvements. For a full list of changes refer to the API version history.

This update also included a couple new features:

Searching by 3 Character Airport Codes
We have had several users request the ability to query the API with 3 letter airport codes, such as MSP for the Minneaspolis - St Paul Airport. Therefore, we've added this feature into this version and is supported as one of ourt Supported Places.

For example, you can retrieve the latest observation for MSP using:  /observations/MSP

New places/airports Endpoint
While adding support for aiport codes, we also added a new endpoint to allow obtaining standard place information for airports, heliports etc. This data will be updated quarterly with the latest available information.  

Refer to the places/airports endpoint documentation for the complete feature set.

An example of the endpoint output based on the call:
/places/airports/closest?p=minneapolis,mn

{
   "success":true,
   "error":null,
   "response":[
      {
         "id":"kmsp",
         "loc":{
            "lat":44.8819999695,
            "long":-93.2218017578
         },
         "place":{
            "name":"Minneapolis-St Paul International\/Wold-Chamberlain Airport",
            "city":"Minneapolis",
            "state":"MN",
            "stateFull":"Minnesota",
            "country":"US",
            "countryFull":"United States",
            "region":"usnc",
            "regionFull":"North Central",
            "continent":"nam",
            "continentFull":"North America"
         },
         "profile":{
            "id":"kmsp",
            "iata":"msp",
            "local":"msp",
            "type":"la",
            "typeENG":"large airport",
            "elevFT":841,
            "elevM":256.34,
            "tz":"America\/Chicago",
            "tzname":"CDT",
            "tzoffset":-18000,
            "isDST":true
         },
         "relativeTo":{
            "lat":44.97997,
            "long":-93.26384,
            "bearing":163,
            "bearingENG":"SSE",
            "distanceKM":11.385,
            "distanceMI":7.074
         }
      }
   ]
}

Upcoming Tropical Endpoints
Some of the most common requests have been for various tropical endpoints, especially now that tropical season has started. 

The great news is that we have been working on several new tropical endpoints, which we will be making available for beta testing over the next couple weeks! Follow us via Twitter ( @hwaeris )  or keep an eye on our blog for updates on the new endpoints as we make them available.

As always, if you would like to see certain features in a future update to our Weather API, feel free to let us know via Twitter ( @hwaeris ) or our support area.

 

posted in Aeris API, General, News, Product, What's New

Aeris iOS Weather Framework 1.1.7 Released

by nshipes on Jun 07, 2013

We released version 1.1.7 of our Aeris iOS Weather framework today that fixes several bugs and includes many minor improvements. Some of the major changes include improvements to the interactive map and overlays, adding support for custom map callout views, support for re-adding layers after animating stops and more customization options for interactive map overlays.

Refer to the complete 1.1.7 change log for more details about the fixes and changes included in this release.

Creating Custom Map Annotation Callout Views
With this 1.1.7 release, it's not considerably easier to provide your own custom view to use for the callout that is displayed for a tap-and-hold gesture on the interactive map, giving the latest weather observations for that point. Just implement the following new delegate methods on your AFWeatherMapDelegate class and provide the required content:

- (void)weatherMap:(AFWeatherMap *)weatherMap contentViewForCallout:(AFCalloutView *)calloutView;

- (void)weatherMap:(AFWeatherMap *)weatherMap didLoadObjects:(NSArray *)objects forCallout:(AFCalloutView *)calloutView;

Here's a simple example that provides the custom UIView to the AFWeatherMap instance when requested, and sets the proper content on that view once the data for the callout has been loaded by the AFWeatherMap instance:


- (UIView *)weatherMap:(AFWeatherMap *)weatherMap contentViewForCallout:(AFCalloutView *)calloutView {
	// CustomCalloutView is a UIView subclass that we want to use for displaying the obs data
	WeatherCalloutView *contentView = [[CustomCalloutView alloc] initWithFrame:CGRectMake(0, 0, 90, 25)];
	contentView.clipsToBounds = NO;
	
	return contentView;
}

- (void)weatherMap:(AFWeatherMap *)weatherMap didLoadObjects:(NSArray *)objects forCallout:(AFCalloutView *)calloutView {
	// our custom CustomCalloutView instance can be accessed by the `contentView` property on AFCalloutView
	CustomCalloutView *view = (CustomCalloutView *)calloutView.contentView;
	
	// the tap-and-hold gesture on an AFWeatherMap uses an AFObservationsLoader for requesting data at the location
	// so ensure the returned object is an AFObservation instance
	if ([objects count] > 0 && [[objects objectAtIndex:0] isKindOfClass:[AFObservation class]]) {
		AFObservation *obs = (AFObservation *)[objects objectAtIndex:0];
		
		// set our the properties/values on our CustomCalloutView instance based on the data returned to us
		view.temp = [NSString stringWithFormat:@"%.0f%@", (_isMetric) ? [obs.tempC floatValue] : [obs.tempF floatValue], kAFDegree];
		view.icon = WXICON(obs.icon);
	}
}

We will be expanding upon this in an upcoming version of the framework to allow you to create your own custom callouts for all other content, such as point data and polygon layers. 

Re-Adding Point Data and Polygon Layers
We've had numerous users wanting the ability to re-add the existing point data and polygon layers back onto the map after an animation has stopped. There were several different work-arounds, but most were too complex and caused more problems for those users since only a certain amount of functionality is made public within the framework. Therefore, we decided to support this natively within the framework in order to offer a more efficient and cleaner solution.

This feature is enabled by default, so once an animation stops running, all point data and polygon layers that were visible before animation started will be re-added to the map. You can control this feature within your own app by setting the value for the WeatherMap.Animation.SaveOverlays configuration value in your AerisMapConfig.plist file. Note that you will need to update your custom AerisMapConfig.plist file with the latest provided in the 1.1.7 release as it includes several other additions not available with previous versions.

posted in General

Aeris Interactive 1.5 Released with Google Maps API V3 Support

by lhuffman on May 13, 2013

We have upgraded Aeris Interactive to version 1.5. This upgrade adds support for Google Maps API V3, as Google will be shutting down their gmaps API V2 later this month.

Enabling Google Maps V3 and Obtaining an API Key
To ensure your maps will continue to work, you will need to enable your websites & hosted sites to use Google Maps API v3. Since you are currently using the maps with API v2, enabling Google maps API v3 (if not already enabled) is fairly simple, per the following steps (your IT group may need make the change).

  1. Browse to https://code.google.com/apis/console/ and enter information to login.
  2. Once logged in, click "Services" on the left side.
  3. Scroll down to "Google Maps API v3" and click the toggle to "ON".
  4. Verify that you have a Google Maps API key. If you do not yet have a key, you will need to follow Google's instructions on registering for a key.

Update your Google Maps Script Tag:
The final element of your upgrade will be too switch out your google maps <script> tag with the following:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=geometry&key=APIKEY"></script>

Replace APIKEY with your API key obtained in step 4 above.

 

Additional Support
If you have trouble with your interactive maps after perfoming the steps above, please submit a support ticket and team can assist further.

posted in General

Aeris iOS Weather Framework 1.1.6 Released

by nshipes on Dec 10, 2012

We pushed out a minor update to our Aeris iOS Weather framework today that fixes a few bugs with the interactive map and auto-rotation as well as improving the way the core account initialization is performed when launching your custom app. Refer to the complete 1.1.6 change log for more details as to the fixes and changes included in this release.

Better Initialization at App Launch
With this 1.1.6 update, we've improved the way in which the SDK is initialized at app launch, allowing your app to respond when the SDK has properly initialized with your account settings. This is especially critical if you are using our interactive weather map as the root view that appears once the app has launched and using the built-in AFWeatherMapOptionsViewController to display the map overlay options. This options view only displays map overlays that your active account has access to, so you would want to wait until the SDK had finished loading your account information before trying to display this options view or adding weather-specific overlays to the map. For this, we utilize NSNotificationCenter to broadcast to all observers when the SDK is fully ready with the key kAFEngineReady.

For example, your custom app displays the interactive map with the radar overlay at app launch. But the SDK verifies that your account has access to this overlay before displaying it. So your app would want to wait to display the overlay until the SDK receives your account information and settings by listening for the proper event from NSNotificationCenter:


// CustomViewController.m (subclass of AFWeatherMapViewController)

- (void)viewDidAppear:(BOOL)animated {
	[super viewDidAppear:animated];
	
	if (![[AerisEngine currentEngine] isEngineReady]) {
		[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(initializeMap) name:kAFEngineReady object:nil];
	}
	else {
		[self initializeMap];
	}
}

- (void)initializeMap {
	[self.weatherMap showOverlayForType:AFOverlayTypeRadar];
}

The SDK will cache your account information for an extended amount of time, so they will not need to be loaded every time your app is launched.

posted in Aeris Mobile, General, News, Product

Aeris API + HW3 = Better Weather for Your Site

by nshipes on Dec 03, 2012

The following article was contributed by Joe Torsitano from WeatherForYou.com

Anyone who has used the HAMweather scripts on their website for more than a few months knows much of its power lies in its flexibility. The introduction of the Aeris Weather API means almost any existing HW3 installation can display the data which has always been included with higher speed and availability. It also allows other weather related information to be added. And it can be done with some easy changes to the templates provided with HW3 or that have already been customized.

HW2 and HW3 have been key components in WeatherForYou.com (WFY) since 1999. While Aeris could have been a replacement for our HW system, I found it was very simple to modify existing templates so the API could provide all the improved benefits of Aeris while significantly reducing development time.

There are many benefits to Aeris data compared to other sources which have been traditionally used by HW3. Aeris utilizes the latest cloud-based services and content delivery networks which is very fast and reliable. It's able to quickly respond to rapidly changing demands and loads when you really need weather data such as during significant weather events. The API enables the retrieval of a wide range of weather data and related information using JavaScript Object Notation, or JSON. If you're interested in knowing more about JSON visit http://www.json.org/ For t.his tutorial it'll suffice to say it makes it really easy to read and write data.

In order to access the API an account is needed. Account types are based on how many times and what data is going to be retrieved. A free Developer account allows up to 750 requests per day to the types of information a standard HW3 installation uses plus more. You can sign up for a Developer account and transition can occur without the worry of charges piling up during the development time and a small non-commercial HW3 site can have the Aeris advantage at no cost. All that is necessary is giving credit to HAMweather on any page that uses the Aeris data in accordance with the credit policy at http://www.hamweather.com/support/documentation/aeris/credit-policy/

Once you have your account, login at http://www.hamweather.com/account/member after which you'll need to register your website at the Aeris API - Application/Website Registration link from your account. This will issue you a unique identifier for your account and key for each application, which is used to access the API.

Now that you have a login, ID and secret you can begin having your HW3 installation make Aeris requests. The key here is HW3's ability to include regular php code. To include something like:


<?php echo ("HW3 and Aeris is a great combination"); ?>

you would put this into an HW3 template:


%%CODE echo ("HW3 and Aeris is a great combination"); CODE%%

If you need multiple lines to insert your php code you use double underlines after each line, like:


%%CODE __
	echo ("HW3 and Aeris is a great combination"); __
CODE%%

There must not be any blank lines otherwise the inserted code will not work.

So are you ready for Aeris API to appear in your HW3 installation? I'm going to start with a simple replacement for the current conditions. Now I'm sure most have customized their installations to better match their site's look and feel (and their own personal preferences) so the examples given are based on the templates that come with HW3. But it should give you a good starting place.
First step backup your templates! This is especially important if you're using a live site. But even if you have the bonus of developing on an internal, non-public system it's always good to have where you started from to come back to. So if you haven't backed up your templates, do it now! You will be glad you did.

Sets of data from the API are called endpoints. In this case we'll be using the observations endpoint. Within the endpoints are the individual pieces of data like temperature, humidity, etc., which are called query elements.
To start with we need to show when the observations were made. This is in the templates/zandh.html template. In the template find the item:


Updated: %%hforecastdate%%

Replace it with this, filling in your CLIENT_ID and CLIENT_SECRET where indicated:


%%CODE __
	$response = file_get_contents("http://api.aerisapi.com/observations/closest?p=%%zipcode%%&client_id=CLIENT_ID&client_secret=CLIENT_SECRET"); __
	$json = json_decode($response); __
	if ($json->success == true) { __
		$cond = $json->response[0]->ob; __
		echo ("Updated: " . gmdate('g:i A D M j Y', strtotime($cond->dateTimeISO) + '%%tzdif%%' * 3600)); __
	} __
CODE%%

Now upload the modified zandh.html to your server. Next you'll be modifying the templates/include/current.html file. You'll be replacing a lot more code here. In the default templates you'll be replacing lines 14 through 53 (starting right under the first <table border="0"> statement and going until the line right above the next to the last </table> statement). Replace all that with the following, filling in your CLIENT_ID and CLIENT_SECRET where indicated:

Once you upload the modified current.html to your server, give it a test. Get a forecast for your town. The current conditions you see will be coming from the Aeris API!

In this example we just dropped Aeris API replacements into the default templates. This created two requests to the API, one for the time and one for the actual conditions. Since access to the API is metered you will probably want to modify your templates to gather all the information from one request to maximize the number of reports you can get.

In my next installment I'll give you the sun and the moon, Aeris API style.

posted in General

We Have New Flexible Aeris Pricing, Thanks to Your Feedback!

by callar on Nov 05, 2012

We recently sent out a newsletter to existing Aeris API Developer subscribers about our new pricing options for our API, along with some other information on finding help on getting started with your API account. We are also providing current users signed up for the free Developer plan 25% off of their first month when they subscribe to a paid plan for providing their feedback on using our Aeris API so far. 

Be sure to check out our latest newsletter for more information.

posted in General

Aeris iOS Weather Framework 1.1.5 Released

by nshipes on Oct 26, 2012

An update to our iOS weather framework is now available that includes several bug fixes and a few new features. As always, review the 1.1.5 complete release notes for more detailed information on the latest changes and fixes.

Dynamic Opacity and Speed
The biggest addition to the framework comes in the interactive map feature. We’ve had several requests to add support for dynamically adjusting an image overlay’s opacity and animation speed at runtime. Well, we listened to your feedback, and it’s finally here! 

Overlay Options

To take advantage of this new feature immediately, we have already added default controls for map overlay opacity and animation speed under the map options (as pictured above). This is built into AFWeatherMapOptionsViewController, so you don’t have to do anything if your applications are already using this class to display the map’s overlay options.

If you aren’t using our included AFWeatherMapOptionsViewController in your own custom applications, but want to use this new feature, adding support for it is simple. In the case above, we are using two instances of UIKit’s UISlider component and hooking them up to action handlers to adjust the opacity/speed when the slider values change:


// hook up the action handlers to the UIControlEventValueChanged event
...
[alphaSlider addTarget:self action:@selector(alphaSliderAction:) forControlEvents:UIControlEventValueChanged];
[animationSlider addTarget:self action:@selector(animationSliderAction:) forControlEvents:UIControlEventValueChanged];
...

// adjust opacity and speed on AFWeatherMap when UISlider values change
- (void)alphaSliderAction:(UIControl *)control {
	CGFloat val = ((UISlider *)control).value;
	val = roundf(val * 10) / 10;
	self.weatherMap.overlayAlpha = val;
}

- (void)animationSliderAction:(UIControl *)control {
	CGFloat val = ((UISlider *)control).value;
	val = roundf(val * 10) / 10;
	// need to reverse value back since a lower number is faster
	self.weatherMap.animationSpeed = 1.1 - val;
}

Another thing to take note of with this addition is that we have removed the opacity setting for each individual image overlay in favor of a single global default opacity value. This value is used as the initial opacity for all image overlays displayed on the map before any adjustments are made using the new opacity and animation speed settings above. You can find these settings in your AerisMapConfig.plist file within the AerisMap.embeddedframework/Resources directory. Refer to the complete description of each map setting for more information.

Customizing Point and Polygon Overlays
You now have more control over what type of data is displayed for all point and polygon data overlays. We have added an additional property, OptionsString, for each of these overlays in your AerisMapConfig.plist file that allows you to provide your own Aeris API options to use for each of the data requests for that overlay. The value for this setting is just a normal API query string you would use when making the API calls from the browser or another script.

We are building our iOS roadmap in more detail for our upcoming bigger 1.2 release which we will provide details on in an upcoming blog entry and are definitely excited about. If you would like to see certain features in a future update to our iOS framework, feel free to let us know via Twitter (@hwaeris or our contact form.

posted in General

Aeris Users Speak Up - Crushed Box Software Weather Apps Impress with Aeris API

by callar on Oct 09, 2012

We spoke with Christopher Coudriet from CrushedBoxSoftware.com about how he is using the Aeris weather API. He loves it! Thanks Chris, we can't wait to see what you come up with next!

Why did you decide to add weather into your offerings?

We’ve been developing weather related apps for the last couple of years. And during this time we were searching for the game changing weather data provider to implement into our future weather apps.

Why did you choose HAMweather's Aeris API?
 

We actually stumbled upon HAMweather’s Aeris products while doing some internet searches. Then we fell in love at first sight with all of the super awesome products HAMweather was offering. We actually went ahead and bought the SDK license immediately followed by getting setup with our Aeris API enterprise account. We knew we could do some great things with this powerful platform and turn the iOS weather app market upside down.

Have you seen any positive advancements with your products due to using Aeris?

We have seen our growth catapult to thousands of new users daily that crave our highly polished weather apps powered by the Aeris API. We feel that HAMweather is THE game changing weather data provider.

As a developer, why do you feel HAMweather, and Aeris was the best fit for your product?

Once we got our hands on the SDK and starting building our future apps, we knew we had something great here. The Aeris API fit in perfectly and offers more data than anything we've ever seen or used. Also, as a developer, we had a lot of questions along the way and HAMweather’s support system is a fined tuned machine that responds instantly and courteously. We had well over 50 inquires during development and even got responses after hours and on weekends. We love HAMweather from the inside and out!

Christopher Coudriet
President / CEO
http://www.crushedboxsoftware.com/

 

posted in Aeris API, General, News, Product

Archive