Esempio n. 1
0
def get_json(points):
    """

    :param points: (long,lat)
    :return: a count of species and their scientific names
    """
    try:
        # parse input coordinates
        longa, lat = float(points.split(",")[0]), float(points.split(",")[1])
        i, j = table.grid_cell.array_index(longa, lat, (1, 1))
        point = r.points(longa, lat)
        cell = grid_cells[i][j]
        result = []
        for species in cell.species:
            par = k.parser(species)
            if par.inside(point):
                # check cached results to see if each specie's range map contains this point
                now = datetime.datetime.now()
                result.append({
                    "class": par.class_name,
                    "order": par.order,
                    "family": par.family,
                    "scientific_name": species,
                    "url": par.url,
                    "index_date": str(now)
                })
        result.sort(key=lambda x: x["scientific_name"])
        return jsonify(count=len(result), species=result), 200
    except:
        message = """unknown error, try specieslookup.berkeley.edu/about/ for instructions on query formatting"""
        return message, 400
Esempio n. 2
0
def create_table(long_interval=1, lat_interval=1):
    """

    :param long_interval:
    :param lat_interval:
    :return: a matrix table of grid cells, each containing species' scientific name
    """
    # what we are going to return
    long_range = (-180, 180)
    lat_range = (-90, 90)

    if 360 % long_interval or 180 % lat_interval:
        raise ValueError("inappropriate interval values!")
        # feel free to change it but make sure long and lat interval can divide
        # 360 and 180

    interval = (long_interval, lat_interval)

    cells, cells_in_grid = grid_cell.chop(long_range, lat_range, interval)

    # grid cells are divided into
    all_species = [
        name.split('.')[0] for name in list(os.walk('range_shapefiles'))[0][2]
        if name
    ]

    parsers = []
    # insert specie into the parsers
    for specie in all_species:
        try:
            p = k.parser(specie)
            parsers.append(p)
        except KeyError:
            print(specie, " has bad kmz files")

    for cell in cells:
        for parser in parsers:
            if parser.min_x > cell.right_bottom_long or parser.max_x < cell.left_top_long or parser.min_y > cell.left_top_lat or parser.max_y < cell.right_bottom_lat:
                pass
            else:
                cell.add_species(parser.scientific_name)
        # print("cell coordinates are (", cell.left_top_long, " ,", cell.left_top_lat,
        # "), (", cell.right_bottom_long, " ,", cell.right_bottom_lat, ")")
        ###print("Species occurring in this regions are :", cell.species)
    return cells_in_grid
Esempio n. 3
0
def get(points):
    """

    :param points: (long,lat)
    :return: a count of species and their scientific names
    """
    try:
        # parse input coordinates
        longa, lat = float(points.split(",")[0]), float(points.split(",")[1])
        i, j = table.grid_cell.array_index(longa, lat, (1, 1))
        point = r.points(longa, lat)
        cell = grid_cells[i][j]
        result = []
        for species in cell.species:
            par = k.parser(species)
            if par.inside(point):
                # check cached results to see if each specie's range map contains this point
                result.append(species)
        result.append("count: " + str(len(result)))
        return str(result), 200
    except:
        message = """unknown error, try specieslookup.berkeley.edu/about/ for instructions on query formatting"""
        return message, 400
Esempio n. 4
0
# This tests the ray_casting module
import os
import time
import kmlparserclass as k
import ray_casting as r
point = r.points(-7.2, 6)
all_species = [name.split('.')[0] for name in next(os.walk('kml'))[1] if name]

accoutants = [k.parser(specie) for specie in all_species]

start = time.clock()
result = [
    account.scientific_name for account in accoutants if account.inside(point)
]
stop = time.clock()
print(stop - start)
print(result)
Esempio n. 5
0
# this is debugging for lookup_table
# need to create the class that filters request 
import kmlparserclass as k 
from ray_casting import points
aspecie = k.parser("Adenomera_ajurauna")
point=points(-46.5,-23.825)
aspecie.visualize(point)

print(aspecie.inside(point))
Esempio n. 6
0
all_species = [
    name.split('.')[0] for name in list(os.walk('range_shapefiles'))[0][2]
    if name
]
start = time.clock()
grid_cells = table.create_table()
end = time.clock()
print(end - start, " seconds for updating grid")
# print(grid_cells)
points = "-63.043301,-2.217128"

count = [[len(cell.species) for cell in row] for row in grid_cells]
print(sum([sum(row) for row in count]))

start = time.clock()
print(points)
longa, lat = float(points.split(",")[0]), float(points.split(",")[1])
i, j = table.grid_cell.array_index(longa, lat, (1, 1))
print(i, j)
point = r.points(longa, lat)
cell = grid_cells[i][j]
result = []
for species in cell.species:
    par = k.parser(species)
    if par.inside(point):
        result.append(species)

stop = time.clock()
print(str(stop - start))
print(result)