import os
+from Errors import RecordError
import GPS
import StringUtils
-class RecordError(StandardError):
- pass
-
class GeoRecord:
"""
This class wraps one record in an SF1 geo file.
self.arealand = float(geo_record.arealand)
self.areawatr = float(geo_record.areawatr)
+ # Both latitude and longitude are given to six digits of
+ # precision (i.e. after the decimal point). But, there are no
+ # decimal points in the intptlon/intptlat fields, so we need
+ # to add them.
+ #
+ # By default, the coordinates will be parsed as integers. For
+ # example, +12345678 will be parsed as 12345678.0. So, we need
+ # to "move" that decimal point 6 places to the left. We know
+ # how to do that.
+ #
self.coordinates = GPS.Coordinates()
- self.coordinates.latitude = float(geo_record.intptlat)
- self.coordinates.longitude = float(geo_record.intptlon)
+ self.coordinates.latitude = (float(geo_record.intptlat) / (10**6))
+ self.coordinates.longitude = (float(geo_record.intptlon) / (10**6))
- def tiger_blkidfp00(self):
+ def blkidfp00(self):
# From the Tiger/Line shapefile documentation:
#
# Current block identifier; a concatenation of Census 2000
return record
-
-
-
-def FindClosestBlock(blocks, target_coords):
- """
- Find the closest block (from within blocks) to the GPS
- coordinates given by target_coords.
- """
-
- # Empty by default. Hopefully we're passed some blocks.
- closest_block = None
- min_distance = 999999999.0 # Don't look at me like that.
-
- for block in blocks:
- this_distance = GPS.CalculateDistance(target_coords, block.coordinates)
- if (this_distance < min_distance):
- closest_block = block
- min_distance = this_distance
-
- return closest_block
-
-
-
-def FindAveragePopulationDensity(coords, geo_file_path):
- grp = GeoRecordParser()
- blocks = grp.parse_blocks(geo_file_path)
- closest_block = FindClosestBlock(blocks, coords)
-
- return closest_block.population_density()