示例#1
0
def prepare_endpoint(point):
    """Return `point` as a dictionary ready to be passed on to the router."""
    if isinstance(point, (list, tuple)):
        return dict(lat=point[1], lon=point[0])
    geocoder = poor.Geocoder("default")
    results = geocoder.geocode(point, dict(limit=1))
    return prepare_endpoint((results[0]["x"], results[0]["y"]))
示例#2
0
def prepare_point(point):
    """Return geocoded coordinates for `point`."""
    if isinstance(point, (list, tuple)):
        return point[0], point[1]
    geocoder = poor.Geocoder("default")
    results = geocoder.geocode(point, dict(limit=1))
    return results[0]["x"], results[0]["y"]
示例#3
0
def prepare_endpoint(point):
    """Return `point` as a string ready to be passed on to the router."""
    if isinstance(point, (list, tuple)):
        return "{:.5f},{:.5f}".format(point[0], point[1])
    geocoder = poor.Geocoder("default")
    results = geocoder.geocode(point, dict(limit=1))
    return prepare_endpoint((results[0]["x"], results[0]["y"]))
示例#4
0
def prepare_point(point):
    """Return geocoded coordinates for `point`."""
    # Foursquare does geocoding too, but not that well.
    if isinstance(point, (list, tuple)):
        return point[0], point[1]
    geocoder = poor.Geocoder("default")
    results = geocoder.geocode(point, params=dict(limit=1))
    return results[0]["x"], results[0]["y"]
示例#5
0
def prepare_endpoint(point):
    """Return `point` as a string ready to be passed on to the router."""
    if isinstance(point, (list, tuple)):
        return "{{lat: {:.6f}, lon: {:.6f}}}".format(point[1], point[0])
    geocoder = poor.Geocoder("digitransit")
    # XXX: limit=1 sometimes returns no results!?
    results = geocoder.geocode(point, dict(limit=3))
    return prepare_endpoint((results[0]["x"], results[0]["y"]))
示例#6
0
def geocode(query, params):
    """Return a list of dictionaries of places matching `query`."""
    for i, provider in enumerate(providers):
        geocoder = poor.Geocoder(provider)
        # 'geocode' returns an empty list or a dict(error=True)
        # in case of no results or an error.
        results = geocoder.geocode(query, params)
        if results and isinstance(results, list):
            if i > 0: providers.insert(0, providers.pop(i))
            return results
    return []
示例#7
0
 def __init__(self, id):
     """Initialize a :class:`Guide` instance."""
     # Initialize properties only once.
     if hasattr(self, "id"): return
     path, values = self._load_attributes(id)
     self._attribution = values.get("attribution", {})
     self.geocoder = poor.Geocoder(values.get("geocoder", "default"))
     self.id = id
     self.name = values["name"]
     self._path = path
     self._provider = None
     self._init_provider(id, re.sub(r"\.json$", ".py", path))
示例#8
0
 def set_geocoder(self, geocoder):
     """Set geocoding provider from string `geocoder`."""
     try:
         self.geocoder = poor.Geocoder(geocoder)
         poor.conf.set_geocoder(geocoder)
     except Exception as error:
         print("Failed to load geocoder '{}': {}".format(
             geocoder, str(error)),
               file=sys.stderr)
         if self.geocoder is None:
             default = poor.conf.get_default("geocoder")
             if default != geocoder:
                 self.set_geocoder(default)
示例#9
0
def prepare_endpoint(point):
    """Return `point` as a dictionary ready to be passed on to the router."""
    if isinstance(point, (list, tuple)):
        return dict(lat=point[1], lon=point[0])
    if isinstance(point, dict):
        d = dict(lat=point["y"], lon=point["x"])
        if "text" in point: d["name"] = point["text"]
        if "destination" in point and not point["destination"]:
            d["type"] = "break_through"
        else:
            d["type"] = "break"
        return d
    geocoder = poor.Geocoder("default")
    results = geocoder.geocode(point, params=dict(limit=1))
    return prepare_endpoint((results[0]["x"], results[0]["y"]))
示例#10
0
 def __init__(self, id):
     """Initialize a :class:`Router` instance."""
     # Initialize properties only once.
     if hasattr(self, "id"): return
     path, values = self._load_attributes(id)
     self._attribution = values.get("attribution", {})
     self.geocoder = poor.Geocoder(values.get("geocoder", "default"))
     self.id = id
     self.name = values["name"]
     self._path = path
     self._can_reroute = values.get("can_reroute", True)
     self.offline = values.get("offline", False)
     self._from_needed = values.get("from_needed", True)
     self._to_needed = values.get("to_needed", True)
     self._provider = None
     self._init_provider(id, re.sub(r"\.json$", ".py", path))