コード例 #1
0
ファイル: test.py プロジェクト: bnroths/chi-data
 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)
コード例 #2
0
 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
コード例 #4
0
 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)
コード例 #5
0
 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)
コード例 #6
0
 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)
コード例 #7
0
ファイル: merger.py プロジェクト: bnroths/chi-data
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