Build a ``GeoPoint`` instance from the specified JSON object.

        @param payload: JSON representation of a geographic location::

                {
                  "accuracy": decimal,
                  "altitude": decimal,
                  "bearing": decimal,
                  "longitude": decimal,
                  "latitude": decimal,
                  "provider": string,
                  "speed": decimal
                }

            where:

            * ``accuracy``: accuracy of the position in meters.

            * ``altitude``: altitude in meters of the location.

            * ``bearing``: bearing in degrees.  Bearing is the horizontal
              direction of travel of the device, and is not related to the
              device orientation.  It is guaranteed to be in the range
              ``[0.0, 360.0]``, or ``null`` if this device does not have a
              bearing.

            * ``latitude``: latitude-angular distance, expressed in decimal
              degrees (WGS84 datum), measured from the center of the Earth,
              of a point north or south of the Equator.

            * ``longitude``: longitude-angular distance, expressed in
              decimal degrees (WGS84 datum), measured from the center of the
              Earth, of a point east or west of the Prime Meridian.

            * ``provider``: code name of the location provider that reported
              the geographical location:

              * ``gps``: indicate that the location has been provided by a
                Global Positioning System (GPS).

              * ``network``: indicate that the location has been provided by
                an hybrid positioning system, which uses different
                positioning technologies, such as Global Positioning System
                (GPS), Wi-Fi hotspots, cell tower signals.

            * ``speed``: speed in meters/second over the ground, or ``null``
              if this location does not have a speed.

        @return: a ``GeoPoint`` instance or ``None`` if the JSON payload is
            nil.

def from_json(payload):
        """
        Build a ``GeoPoint`` instance from the specified JSON object.

        @param payload: JSON representation of a geographic location::

                {
                  "accuracy": decimal,
                  "altitude": decimal,
                  "bearing": decimal,
                  "longitude": decimal,
                  "latitude": decimal,
                  "provider": string,
                  "speed": decimal
                }

            where:

            * ``accuracy``: accuracy of the position in meters.

            * ``altitude``: altitude in meters of the location.

            * ``bearing``: bearing in degrees.  Bearing is the horizontal
              direction of travel of the device, and is not related to the
              device orientation.  It is guaranteed to be in the range
              ``[0.0, 360.0]``, or ``null`` if this device does not have a
              bearing.

            * ``latitude``: latitude-angular distance, expressed in decimal
              degrees (WGS84 datum), measured from the center of the Earth,
              of a point north or south of the Equator.

            * ``longitude``: longitude-angular distance, expressed in
              decimal degrees (WGS84 datum), measured from the center of the
              Earth, of a point east or west of the Prime Meridian.

            * ``provider``: code name of the location provider that reported
              the geographical location:

              * ``gps``: indicate that the location has been provided by a
                Global Positioning System (GPS).

              * ``network``: indicate that the location has been provided by
                an hybrid positioning system, which uses different
                positioning technologies, such as Global Positioning System
                (GPS), Wi-Fi hotspots, cell tower signals.

            * ``speed``: speed in meters/second over the ground, or ``null``
              if this location does not have a speed.

        @return: a ``GeoPoint`` instance or ``None`` if the JSON payload is
            nil.
        """
        return payload and \
            GeoPoint(payload['longitude'],
                     payload['latitude'],
                     accuracy=payload.get('accuracy'),
                     altitude=payload.get('altitude'),
                     bearing=payload.get('bearing'),
                     fix_time=payload.get('fix_time'),
                     provider=payload.get('provider'),
                     speed=payload.get('speed'))