def test_point_distance(self): from geojson_utils import point_distance fairyland_str = '{"type": "Point", "coordinates": [-122.260000705719, 37.80919060818706]}' navalbase_str = '{"type": "Point", "coordinates": [-122.32083320617676, 37.78774223089045]}' fairyland = json.loads(fairyland_str) navalbase = json.loads(navalbase_str) self.assertEqual(math.floor( point_distance(fairyland, navalbase)), 5852)
def Workplace_Dist(FB, BS, BC): FormalB = FB Industry = BS row = [] dist = [] listt = [] for y1 in range(0, len(FormalB)): for y2 in range(0, len(Industry)): dist.append( math.floor( point_distance(FormalB[y1]['geometry'], Industry[y2]['geometry']))) FormalB[y1]['properties']['distance'] = sorted(dist)[0] FormalB[y1]['properties']['workplace'] = np.argsort(dist)[0] listt.append(np.argsort(dist)[0]) if listt.count(np.argsort(dist)[0]) >= BC: Industry[np.argsort(dist)[0]]['geometry']['coordinates'][0] = 0 Industry[np.argsort(dist)[0]]['geometry']['coordinates'][1] = 0 dist = [] # Normalize the distance values for k in range(0, len(listt)): if listt[k] <= 0: FormalB[k]['properties']['distance'] = 0 else: row.append(FormalB[k]['properties']['distance']) maxx = max(row) for k in range(0, len(listt)): if listt[k] <= 0: FormalB[k]['properties']['distance'] = 0 else: FormalB[k]['properties']['distance'] = ( FormalB[k]['properties']['distance'] / maxx) return FormalB
def compute_work_zone_distances(self): for zone in self.buildings['features']: zone_bid = str(zone['properties']['OBJECTID']) if zone_bid not in self.home_building_ids: continue self.work_zone_distances[zone_bid] = { 'work_zone_bid': [], 'distance': [] } for work_zone in self.buildings['features']: work_zone_bid = str(work_zone['properties']['OBJECTID']) if work_zone_bid not in self.work_building_ids: continue distance = point_distance(self.zone_centroid[work_zone_bid], self.zone_centroid[zone_bid]) self.work_zone_distances[zone_bid]['work_zone_bid'].append( work_zone_bid) self.work_zone_distances[zone_bid]['distance'].append(distance) self.work_zone_roulette[zone_bid] = build_roulette( self.work_zone_distances[zone_bid]['distance'], sigma=self.sigma, kappa=self.kappa, reverse=True)
def compute_school_distances(self): for zone in self.buildings['features']: zone_bid = str(zone['properties']['OBJECTID']) if zone_bid not in self.home_building_ids: continue self.school_distances[zone_bid] = { 'school_bid': [], 'distance': [] } for school in self.schools['features']: school_centroid = school['geometry'] school_bid = str(school['properties']['OBJECTID']) distance = point_distance(school_centroid, self.zone_centroid[zone_bid]) self.school_distances[zone_bid]['school_bid'].append( school_bid) self.school_distances[zone_bid]['distance'].append(distance) self.school_roulette[zone_bid] = build_roulette( self.school_distances[zone_bid]['distance'], sigma=self.sigma, kappa=self.kappa, reverse=True)
def compute_restaurant_distances(self): for zone in self.buildings['features']: zone_bid = str(zone['properties']['OBJECTID']) if zone_bid not in self.work_building_ids: continue self.restaurant_distances[zone_bid] = { 'restaurant_bid': [], 'distance': [] } for restaurant in self.restaurants['features']: restaurant_centroid = restaurant['geometry'] restaurant_bid = str(restaurant['properties']['OBJECTID']) distance = point_distance(restaurant_centroid, self.zone_centroid[zone_bid]) self.restaurant_distances[zone_bid]['restaurant_bid'].append( restaurant_bid) self.restaurant_distances[zone_bid]['distance'].append( distance) self.restaurant_roulette[zone_bid] = build_roulette( self.restaurant_distances[zone_bid]['distance'], sigma=self.sigma, kappa=self.kappa, reverse=True)
def simplify_other(major, minor, dist): """ Simplify the point featurecollection of poi with another point features accoording by distance. Attention: point featurecollection only Keyword arguments: major -- major geojson minor -- minor geojson dist -- distance return a geojson featurecollection with two parts of featurecollection """ result = deepcopy(major) if major['type'] == 'FeatureCollection' and minor[ 'type'] == 'FeatureCollection': arc = dist / 6371000 * 180 / math.pi * 2 for minorfeature in minor['features']: minorgeom = minorfeature['geometry'] minorlng = minorgeom['coordinates'][0] minorlat = minorgeom['coordinates'][1] is_accept = True for mainfeature in major['features']: maingeom = mainfeature['geometry'] mainlng = maingeom['coordinates'][0] mainlat = maingeom['coordinates'][1] if abs(minorlat - mainlat) <= arc and abs(minorlng - mainlng) <= arc: distance = point_distance(maingeom, minorgeom) if distance < dist: is_accept = False break if is_accept: result["features"].append(minorfeature) return result