def ModelLayerCoordList(grnd, azimuth, elevation_angle, layer_hgts): layer_num = [0] lat_layer_coord = [grnd.lat] lon_layer_coord = [grnd.lon] for layer in range(layer_hgts.shape[0])[1:]: # Find the height of the model cell then convert to km lat_index = grnd.lat_min_index - GetCoordValue(lat_layer_coord[-1], lat_or_lon='lat') lon_index = grnd.lon_min_index - GetCoordValue(lon_layer_coord[-1], lat_or_lon='lon') cell_height = layer_hgts[layer, lat_index, lon_index] / 1000 horizontal_dist = cell_height / np.tan(np.deg2rad(elevation_angle)) # Set a geographic point for the origin of the layer origin = geopy.Point(lat_layer_coord[-1], lon_layer_coord[-1]) # Use geopy to calculate the destination destination = geodist(kilometers=horizontal_dist).destination( origin, azimuth) layer_num.append(layer) lat_layer_coord.append(destination.latitude) lon_layer_coord.append(destination.longitude) coord_df = pd.DataFrame( { 'LatEntry': lat_layer_coord, 'LonEntry': lon_layer_coord }, index=layer_num) return coord_df
def ringScooter(self, scooter): assert self.authorization is not None birdDistance = geodist((self.latitude,self.longitude), (scooter["location"]["latitude"], scooter["location"]["longitude"])) if self.radius == 0 or self.radius >= birdDistance.m: url = "https://{}/bird/chirp".format(self.domain) headers = { 'location': self.getLocationHeader(), 'authorization': "Bird {}".format(self.authorization), 'content-type': 'application/json; charset=UTF-8' } headers.update(self.deviceHeaders) payload = { 'alarm': False, 'bird_id': scooter['id'] } r = requests.put(url, headers=headers, data=json.dumps(payload)) payload['alarm'] = True r = requests.put(url, headers=headers, data=json.dumps(payload)) return r.status_code, birdDistance else: return 0, birdDistance
def get_speed(row): prev_coords = (row['prev_latitude'], row['prev_longitude']) curr_coords = (row['latitude'], row['longitude']) delta = row['timestamp'] - row['prev_timestamp'] if pd.isnull(delta): return np.nan time = abs(delta.total_seconds()) if np.isnan(prev_coords[0]) or np.isnan(prev_coords[1]) or np.isnan( curr_coords[0]) or np.isnan(curr_coords[1]): return np.nan if time == 0: return np.nan return geodist(curr_coords, prev_coords).meters / time
def _test_get_displacement_vector(): prms, _ = mepo2.smallnetv5_fc5_pose_euler_5dof_crp192_rawImSz256_lossl1() grps = get_groups(prms, '0001') errs = [] gAll, aAll = [], [] for g in grps: N = g.num perm = np.random.permutation(N) if N < 2: continue p1, p2 = perm[0], perm[1] pt1 = g.data[p1].pts.camera[0:3] pt2 = g.data[p2].pts.camera[0:3] gDist = geodist(pt1[0:2], pt2[0:2]).meters x, y, z = get_displacement_vector(pt1, pt2) aDist = np.sqrt(x * x + y * y) errs.append(gDist - aDist) gAll.append(gDist) aAll.append(aDist) errs, gAll, aAll = np.array(errs), np.array(gAll), np.array(aAll) rErr = np.abs(errs) / np.minimum(np.abs(gAll), np.abs(aAll)) print 'Mean relative Error: %f, sd relative error: %f' % (np.mean(rErr), np.std(rErr)) return errs, rErr, gAll, aAll
def get_distance_between_groups(grp1, grp2): lb1, lb2 = grp1.data[0], grp2.data[0] tPt1 = lb1.label.pts.target tPt2 = lb2.label.pts.target tDist = geodist(tPt1, tPt2).meters return tDist