This is the validator I use for my geometry fields

import re
from pydal.validators import Validator, ValidationError

class IS_GEOLOCATION(Validator):
    """ 
    Validate that the input is a location within latitude and longitude
    constraints.
    """
    regex_geopoint = re.compile(r"""POINT *\((?P<lat>-?[\d\.]+) 
(?P<lng>-?[\d\.]+)\)""")

    def __init__(self, minlat=-90, maxlat=90, 
                       minlng=-180, maxlng=180,
                error_message='Invalid coordinates'):
        self.minlat = minlat
        self.maxlat = maxlat
        self.minlng = minlng
        self.maxlng = maxlng
        self.error_message = error_message

    @staticmethod
    def parse_geopoint(value):
        """ Returns a tuple (lat, lng) from a POINT (lat lng) """
        match = IS_GEOLOCATION.regex_geopoint.search(value)
        return float(match.group('lat')), float(match.group('lng'))

    def __call__(self, value):
        try:
            lat, lng = self.parse_geopoint(value)
            if (self.minlat <= lat <= self.maxlat) and (self.minlng <= lng 
<= self.maxlng):
                return (value, None)
            else:
                raise ValidationError(self.translator(self.error_message))
        except:
            raise ValidationError(self.translator(self.error_message))

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to