mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
amke Tiger import script work with python3
This commit is contained in:
@@ -3433,7 +3433,7 @@ def fipsstate(fips,countyfp):
|
|||||||
return tags
|
return tags
|
||||||
|
|
||||||
if fips not in fipscodes:
|
if fips not in fipscodes:
|
||||||
raise KeyError, 'missing FIPS code', fips
|
raise KeyError('missing FIPS code', fips)
|
||||||
|
|
||||||
state, statecode, isocode = fipscodes[fips]
|
state, statecode, isocode = fipscodes[fips]
|
||||||
county_fips_code = fips + "" + countyfp
|
county_fips_code = fips + "" + countyfp
|
||||||
@@ -3478,69 +3478,69 @@ def parse_shp_for_osm( filename ):
|
|||||||
# WAY ID
|
# WAY ID
|
||||||
tags[iSource + ":way_id"] = int( poFeature.GetField("TLID") )
|
tags[iSource + ":way_id"] = int( poFeature.GetField("TLID") )
|
||||||
|
|
||||||
# FEATURE IDENTIFICATION
|
# FEATURE IDENTIFICATION
|
||||||
mtfcc = poFeature.GetField("MTFCC");
|
mtfcc = poFeature.GetField("MTFCC");
|
||||||
if mtfcc != None:
|
if mtfcc != None:
|
||||||
|
|
||||||
if mtfcc == "L4010": #Pipeline
|
if mtfcc == "L4010": #Pipeline
|
||||||
tags["man_made"] = "pipeline"
|
tags["man_made"] = "pipeline"
|
||||||
if mtfcc == "L4020": #Powerline
|
if mtfcc == "L4020": #Powerline
|
||||||
tags["power"] = "line"
|
tags["power"] = "line"
|
||||||
if mtfcc == "L4031": #Aerial Tramway/Ski Lift
|
if mtfcc == "L4031": #Aerial Tramway/Ski Lift
|
||||||
tags["aerialway"] = "cable_car"
|
tags["aerialway"] = "cable_car"
|
||||||
if mtfcc == "L4110": #Fence Line
|
if mtfcc == "L4110": #Fence Line
|
||||||
tags["barrier"] = "fence"
|
tags["barrier"] = "fence"
|
||||||
if mtfcc == "L4125": #Cliff/Escarpment
|
if mtfcc == "L4125": #Cliff/Escarpment
|
||||||
tags["natural"] = "cliff"
|
tags["natural"] = "cliff"
|
||||||
if mtfcc == "L4165": #Ferry Crossing
|
if mtfcc == "L4165": #Ferry Crossing
|
||||||
tags["route"] = "ferry"
|
tags["route"] = "ferry"
|
||||||
if mtfcc == "R1011": #Railroad Feature (Main, Spur, or Yard)
|
if mtfcc == "R1011": #Railroad Feature (Main, Spur, or Yard)
|
||||||
tags["railway"] = "rail"
|
tags["railway"] = "rail"
|
||||||
ttyp = poFeature.GetField("TTYP")
|
ttyp = poFeature.GetField("TTYP")
|
||||||
if ttyp != None:
|
if ttyp != None:
|
||||||
if ttyp == "S":
|
if ttyp == "S":
|
||||||
tags["service"] = "spur"
|
tags["service"] = "spur"
|
||||||
if ttyp == "Y":
|
if ttyp == "Y":
|
||||||
tags["service"] = "yard"
|
tags["service"] = "yard"
|
||||||
tags["tiger:ttyp"] = ttyp
|
tags["tiger:ttyp"] = ttyp
|
||||||
if mtfcc == "R1051": #Carline, Streetcar Track, Monorail, Other Mass Transit Rail)
|
if mtfcc == "R1051": #Carline, Streetcar Track, Monorail, Other Mass Transit Rail)
|
||||||
tags["railway"] = "light_rail"
|
tags["railway"] = "light_rail"
|
||||||
if mtfcc == "R1052": #Cog Rail Line, Incline Rail Line, Tram
|
if mtfcc == "R1052": #Cog Rail Line, Incline Rail Line, Tram
|
||||||
tags["railway"] = "incline"
|
tags["railway"] = "incline"
|
||||||
if mtfcc == "S1100":
|
if mtfcc == "S1100":
|
||||||
tags["highway"] = "primary"
|
tags["highway"] = "primary"
|
||||||
if mtfcc == "S1200":
|
if mtfcc == "S1200":
|
||||||
tags["highway"] = "secondary"
|
tags["highway"] = "secondary"
|
||||||
if mtfcc == "S1400":
|
if mtfcc == "S1400":
|
||||||
tags["highway"] = "residential"
|
tags["highway"] = "residential"
|
||||||
if mtfcc == "S1500":
|
if mtfcc == "S1500":
|
||||||
tags["highway"] = "track"
|
tags["highway"] = "track"
|
||||||
if mtfcc == "S1630": #Ramp
|
if mtfcc == "S1630": #Ramp
|
||||||
tags["highway"] = "motorway_link"
|
tags["highway"] = "motorway_link"
|
||||||
if mtfcc == "S1640": #Service Drive usually along a limited access highway
|
if mtfcc == "S1640": #Service Drive usually along a limited access highway
|
||||||
tags["highway"] = "service"
|
tags["highway"] = "service"
|
||||||
if mtfcc == "S1710": #Walkway/Pedestrian Trail
|
if mtfcc == "S1710": #Walkway/Pedestrian Trail
|
||||||
tags["highway"] = "path"
|
tags["highway"] = "path"
|
||||||
if mtfcc == "S1720":
|
if mtfcc == "S1720":
|
||||||
tags["highway"] = "steps"
|
tags["highway"] = "steps"
|
||||||
if mtfcc == "S1730": #Alley
|
if mtfcc == "S1730": #Alley
|
||||||
tags["highway"] = "service"
|
tags["highway"] = "service"
|
||||||
tags["service"] = "alley"
|
tags["service"] = "alley"
|
||||||
if mtfcc == "S1740": #Private Road for service vehicles (logging, oil, fields, ranches, etc.)
|
if mtfcc == "S1740": #Private Road for service vehicles (logging, oil, fields, ranches, etc.)
|
||||||
tags["highway"] = "service"
|
tags["highway"] = "service"
|
||||||
tags["access"] = "private"
|
tags["access"] = "private"
|
||||||
if mtfcc == "S1750": #Private Driveway
|
if mtfcc == "S1750": #Private Driveway
|
||||||
tags["highway"] = "service"
|
tags["highway"] = "service"
|
||||||
tags["access"] = "private"
|
tags["access"] = "private"
|
||||||
tags["service"] = "driveway"
|
tags["service"] = "driveway"
|
||||||
if mtfcc == "S1780": #Parking Lot Road
|
if mtfcc == "S1780": #Parking Lot Road
|
||||||
tags["highway"] = "service"
|
tags["highway"] = "service"
|
||||||
tags["service"] = "parking_aisle"
|
tags["service"] = "parking_aisle"
|
||||||
if mtfcc == "S1820": #Bike Path or Trail
|
if mtfcc == "S1820": #Bike Path or Trail
|
||||||
tags["highway"] = "cycleway"
|
tags["highway"] = "cycleway"
|
||||||
if mtfcc == "S1830": #Bridle Path
|
if mtfcc == "S1830": #Bridle Path
|
||||||
tags["highway"] = "bridleway"
|
tags["highway"] = "bridleway"
|
||||||
tags["tiger:mtfcc"] = mtfcc
|
tags["tiger:mtfcc"] = mtfcc
|
||||||
|
|
||||||
# FEATURE NAME
|
# FEATURE NAME
|
||||||
if poFeature.GetField("FULLNAME"):
|
if poFeature.GetField("FULLNAME"):
|
||||||
@@ -3548,20 +3548,20 @@ def parse_shp_for_osm( filename ):
|
|||||||
name = poFeature.GetField( "FULLNAME" )
|
name = poFeature.GetField( "FULLNAME" )
|
||||||
tags["name"] = name
|
tags["name"] = name
|
||||||
|
|
||||||
#Attempt to guess highway grade
|
#Attempt to guess highway grade
|
||||||
if name[0:2] == "I-":
|
if name[0:2] == "I-":
|
||||||
tags["highway"] = "motorway"
|
tags["highway"] = "motorway"
|
||||||
if name[0:3] == "US ":
|
if name[0:3] == "US ":
|
||||||
tags["highway"] = "primary"
|
tags["highway"] = "primary"
|
||||||
if name[0:3] == "US-":
|
if name[0:3] == "US-":
|
||||||
tags["highway"] = "primary"
|
tags["highway"] = "primary"
|
||||||
if name[0:3] == "Hwy":
|
if name[0:3] == "Hwy":
|
||||||
if tags["highway"] != "primary":
|
if tags["highway"] != "primary":
|
||||||
tags["highway"] = "secondary"
|
tags["highway"] = "secondary"
|
||||||
|
|
||||||
divroad = poFeature.GetField("DIVROAD")
|
divroad = poFeature.GetField("DIVROAD")
|
||||||
if divroad != None:
|
if divroad != None:
|
||||||
if divroad == "Y" and "highway" in tags and tags["highway"] == "residential":
|
if divroad == "Y" and "highway" in tags and tags["highway"] == "residential":
|
||||||
tags["highway"] = "tertiary"
|
tags["highway"] = "tertiary"
|
||||||
tags["tiger:separated"] = divroad
|
tags["tiger:separated"] = divroad
|
||||||
|
|
||||||
@@ -3618,10 +3618,10 @@ def parse_shp_for_osm( filename ):
|
|||||||
# ====================================
|
# ====================================
|
||||||
projcs_wkt = \
|
projcs_wkt = \
|
||||||
"""GEOGCS["GCS_North_American_1983",
|
"""GEOGCS["GCS_North_American_1983",
|
||||||
DATUM["D_North_American_1983",
|
DATUM["D_North_American_1983",
|
||||||
SPHEROID["GRS_1980",6378137,298.257222101]],
|
SPHEROID["GRS_1980",6378137,298.257222101]],
|
||||||
PRIMEM["Greenwich",0],
|
PRIMEM["Greenwich",0],
|
||||||
UNIT["Degree",0.017453292519943295]]"""
|
UNIT["Degree",0.017453292519943295]]"""
|
||||||
|
|
||||||
from_proj = osr.SpatialReference()
|
from_proj = osr.SpatialReference()
|
||||||
from_proj.ImportFromWkt( projcs_wkt )
|
from_proj.ImportFromWkt( projcs_wkt )
|
||||||
@@ -3642,12 +3642,12 @@ def length(segment, nodelist):
|
|||||||
pointid, (lat, lon) = nodelist[ round_point( point ) ]
|
pointid, (lat, lon) = nodelist[ round_point( point ) ]
|
||||||
if first:
|
if first:
|
||||||
first = False
|
first = False
|
||||||
else:
|
else:
|
||||||
#The approximate number of feet in one degree of longitute
|
#The approximate number of feet in one degree of longitute
|
||||||
lrad = math.radians(lat)
|
lrad = math.radians(lat)
|
||||||
lon_feet = 365527.822 * math.cos(lrad) - 306.75853 * math.cos(3 * lrad) + 0.3937 * math.cos(5 * lrad)
|
lon_feet = 365527.822 * math.cos(lrad) - 306.75853 * math.cos(3 * lrad) + 0.3937 * math.cos(5 * lrad)
|
||||||
distance += math.sqrt(((lat - previous[0])*lat_feet)**2 + ((lon - previous[1])*lon_feet)**2)
|
distance += math.sqrt(((lat - previous[0])*lat_feet)**2 + ((lon - previous[1])*lon_feet)**2)
|
||||||
previous = (lat, lon)
|
previous = (lat, lon)
|
||||||
return distance
|
return distance
|
||||||
|
|
||||||
def addressways(waylist, nodelist, first_id):
|
def addressways(waylist, nodelist, first_id):
|
||||||
@@ -3657,7 +3657,7 @@ def addressways(waylist, nodelist, first_id):
|
|||||||
distance = float(address_distance)
|
distance = float(address_distance)
|
||||||
ret = []
|
ret = []
|
||||||
|
|
||||||
for waykey, segments in waylist.iteritems():
|
for waykey, segments in waylist.items():
|
||||||
waykey = dict(waykey)
|
waykey = dict(waykey)
|
||||||
rsegments = []
|
rsegments = []
|
||||||
lsegments = []
|
lsegments = []
|
||||||
@@ -3666,11 +3666,11 @@ def addressways(waylist, nodelist, first_id):
|
|||||||
rsegment = []
|
rsegment = []
|
||||||
lastpoint = None
|
lastpoint = None
|
||||||
|
|
||||||
#Don't pull back the ends of very short ways too much
|
#Don't pull back the ends of very short ways too much
|
||||||
seglength = length(segment, nodelist)
|
seglength = length(segment, nodelist)
|
||||||
if seglength < float(address_pullback) * 3.0:
|
if seglength < float(address_pullback) * 3.0:
|
||||||
pullback = seglength / 3.0
|
pullback = seglength / 3.0
|
||||||
else:
|
else:
|
||||||
pullback = float(address_pullback)
|
pullback = float(address_pullback)
|
||||||
if "tiger:lfromadd" in waykey:
|
if "tiger:lfromadd" in waykey:
|
||||||
lfromadd = waykey["tiger:lfromadd"]
|
lfromadd = waykey["tiger:lfromadd"]
|
||||||
@@ -3687,88 +3687,88 @@ def addressways(waylist, nodelist, first_id):
|
|||||||
if "tiger:rtoadd" in waykey:
|
if "tiger:rtoadd" in waykey:
|
||||||
rtoadd = waykey["tiger:rtoadd"]
|
rtoadd = waykey["tiger:rtoadd"]
|
||||||
else:
|
else:
|
||||||
rtoadd = None
|
rtoadd = None
|
||||||
if rfromadd != None and rtoadd != None:
|
if rfromadd != None and rtoadd != None:
|
||||||
right = True
|
right = True
|
||||||
else:
|
else:
|
||||||
right = False
|
right = False
|
||||||
if lfromadd != None and ltoadd != None:
|
if lfromadd != None and ltoadd != None:
|
||||||
left = True
|
left = True
|
||||||
else:
|
else:
|
||||||
left = False
|
left = False
|
||||||
if left or right:
|
if left or right:
|
||||||
first = True
|
first = True
|
||||||
firstpointid, firstpoint = nodelist[ round_point( segment[0] ) ]
|
firstpointid, firstpoint = nodelist[ round_point( segment[0] ) ]
|
||||||
|
|
||||||
finalpointid, finalpoint = nodelist[ round_point( segment[len(segment) - 1] ) ]
|
finalpointid, finalpoint = nodelist[ round_point( segment[len(segment) - 1] ) ]
|
||||||
for point in segment:
|
for point in segment:
|
||||||
pointid, (lat, lon) = nodelist[ round_point( point ) ]
|
pointid, (lat, lon) = nodelist[ round_point( point ) ]
|
||||||
|
|
||||||
#The approximate number of feet in one degree of longitute
|
#The approximate number of feet in one degree of longitute
|
||||||
lrad = math.radians(lat)
|
lrad = math.radians(lat)
|
||||||
lon_feet = 365527.822 * math.cos(lrad) - 306.75853 * math.cos(3 * lrad) + 0.3937 * math.cos(5 * lrad)
|
lon_feet = 365527.822 * math.cos(lrad) - 306.75853 * math.cos(3 * lrad) + 0.3937 * math.cos(5 * lrad)
|
||||||
|
|
||||||
#Calculate the points of the offset ways
|
#Calculate the points of the offset ways
|
||||||
if lastpoint != None:
|
if lastpoint != None:
|
||||||
#Skip points too close to start
|
#Skip points too close to start
|
||||||
if math.sqrt((lat * lat_feet - firstpoint[0] * lat_feet)**2 + (lon * lon_feet - firstpoint[1] * lon_feet)**2) < pullback:
|
if math.sqrt((lat * lat_feet - firstpoint[0] * lat_feet)**2 + (lon * lon_feet - firstpoint[1] * lon_feet)**2) < pullback:
|
||||||
#Preserve very short ways (but will be rendered backwards)
|
#Preserve very short ways (but will be rendered backwards)
|
||||||
if pointid != finalpointid:
|
if pointid != finalpointid:
|
||||||
continue
|
continue
|
||||||
#Skip points too close to end
|
#Skip points too close to end
|
||||||
if math.sqrt((lat * lat_feet - finalpoint[0] * lat_feet)**2 + (lon * lon_feet - finalpoint[1] * lon_feet)**2) < pullback:
|
if math.sqrt((lat * lat_feet - finalpoint[0] * lat_feet)**2 + (lon * lon_feet - finalpoint[1] * lon_feet)**2) < pullback:
|
||||||
#Preserve very short ways (but will be rendered backwards)
|
#Preserve very short ways (but will be rendered backwards)
|
||||||
if (pointid != firstpointid) and (pointid != finalpointid):
|
if (pointid != firstpointid) and (pointid != finalpointid):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
X = (lon - lastpoint[1]) * lon_feet
|
X = (lon - lastpoint[1]) * lon_feet
|
||||||
Y = (lat - lastpoint[0]) * lat_feet
|
Y = (lat - lastpoint[0]) * lat_feet
|
||||||
if Y != 0:
|
if Y != 0:
|
||||||
theta = math.pi/2 - math.atan( X / Y)
|
theta = math.pi/2 - math.atan( X / Y)
|
||||||
Xp = math.sin(theta) * distance
|
Xp = math.sin(theta) * distance
|
||||||
Yp = math.cos(theta) * distance
|
Yp = math.cos(theta) * distance
|
||||||
else:
|
else:
|
||||||
Xp = 0
|
Xp = 0
|
||||||
if X > 0:
|
if X > 0:
|
||||||
Yp = -distance
|
Yp = -distance
|
||||||
else:
|
else:
|
||||||
Yp = distance
|
Yp = distance
|
||||||
|
|
||||||
if Y > 0:
|
if Y > 0:
|
||||||
Xp = -Xp
|
Xp = -Xp
|
||||||
else:
|
else:
|
||||||
Yp = -Yp
|
Yp = -Yp
|
||||||
|
|
||||||
if first:
|
if first:
|
||||||
first = False
|
first = False
|
||||||
dX = - (Yp * (pullback / distance)) / lon_feet #Pull back the first point
|
dX = - (Yp * (pullback / distance)) / lon_feet #Pull back the first point
|
||||||
dY = (Xp * (pullback / distance)) / lat_feet
|
dY = (Xp * (pullback / distance)) / lat_feet
|
||||||
if left:
|
if left:
|
||||||
lpoint = (lastpoint[0] + (Yp / lat_feet) - dY, lastpoint[1] + (Xp / lon_feet) - dX)
|
lpoint = (lastpoint[0] + (Yp / lat_feet) - dY, lastpoint[1] + (Xp / lon_feet) - dX)
|
||||||
lsegment.append( (id, lpoint) )
|
lsegment.append( (id, lpoint) )
|
||||||
id += 1
|
id += 1
|
||||||
if right:
|
if right:
|
||||||
rpoint = (lastpoint[0] - (Yp / lat_feet) - dY, lastpoint[1] - (Xp / lon_feet) - dX)
|
rpoint = (lastpoint[0] - (Yp / lat_feet) - dY, lastpoint[1] - (Xp / lon_feet) - dX)
|
||||||
rsegment.append( (id, rpoint) )
|
rsegment.append( (id, rpoint) )
|
||||||
id += 1
|
id += 1
|
||||||
|
|
||||||
else:
|
else:
|
||||||
#round the curves
|
#round the curves
|
||||||
if delta[1] != 0:
|
if delta[1] != 0:
|
||||||
theta = abs(math.atan(delta[0] / delta[1]))
|
theta = abs(math.atan(delta[0] / delta[1]))
|
||||||
else:
|
else:
|
||||||
theta = math.pi / 2
|
theta = math.pi / 2
|
||||||
if Xp != 0:
|
if Xp != 0:
|
||||||
theta = theta - abs(math.atan(Yp / Xp))
|
theta = theta - abs(math.atan(Yp / Xp))
|
||||||
else: theta = theta - math.pi / 2
|
else: theta = theta - math.pi / 2
|
||||||
r = 1 + abs(math.tan(theta/2))
|
r = 1 + abs(math.tan(theta/2))
|
||||||
if left:
|
if left:
|
||||||
lpoint = (lastpoint[0] + (Yp + delta[0]) * r / (lat_feet * 2), lastpoint[1] + (Xp + delta[1]) * r / (lon_feet * 2))
|
lpoint = (lastpoint[0] + (Yp + delta[0]) * r / (lat_feet * 2), lastpoint[1] + (Xp + delta[1]) * r / (lon_feet * 2))
|
||||||
lsegment.append( (id, lpoint) )
|
lsegment.append( (id, lpoint) )
|
||||||
id += 1
|
id += 1
|
||||||
if right:
|
if right:
|
||||||
rpoint = (lastpoint[0] - (Yp + delta[0]) * r / (lat_feet * 2), lastpoint[1] - (Xp + delta[1]) * r / (lon_feet * 2))
|
rpoint = (lastpoint[0] - (Yp + delta[0]) * r / (lat_feet * 2), lastpoint[1] - (Xp + delta[1]) * r / (lon_feet * 2))
|
||||||
|
|
||||||
rsegment.append( (id, rpoint) )
|
rsegment.append( (id, rpoint) )
|
||||||
id += 1
|
id += 1
|
||||||
|
|
||||||
@@ -3778,116 +3778,116 @@ def addressways(waylist, nodelist, first_id):
|
|||||||
|
|
||||||
|
|
||||||
#Add in the last node
|
#Add in the last node
|
||||||
dX = - (Yp * (pullback / distance)) / lon_feet
|
dX = - (Yp * (pullback / distance)) / lon_feet
|
||||||
dY = (Xp * (pullback / distance)) / lat_feet
|
dY = (Xp * (pullback / distance)) / lat_feet
|
||||||
if left:
|
if left:
|
||||||
lpoint = (lastpoint[0] + (Yp + delta[0]) / (lat_feet * 2) + dY, lastpoint[1] + (Xp + delta[1]) / (lon_feet * 2) + dX )
|
lpoint = (lastpoint[0] + (Yp + delta[0]) / (lat_feet * 2) + dY, lastpoint[1] + (Xp + delta[1]) / (lon_feet * 2) + dX )
|
||||||
lsegment.append( (id, lpoint) )
|
lsegment.append( (id, lpoint) )
|
||||||
id += 1
|
id += 1
|
||||||
if right:
|
if right:
|
||||||
rpoint = (lastpoint[0] - Yp / lat_feet + dY, lastpoint[1] - Xp / lon_feet + dX)
|
rpoint = (lastpoint[0] - Yp / lat_feet + dY, lastpoint[1] - Xp / lon_feet + dX)
|
||||||
rsegment.append( (id, rpoint) )
|
rsegment.append( (id, rpoint) )
|
||||||
id += 1
|
id += 1
|
||||||
|
|
||||||
#Generate the tags for ways and nodes
|
#Generate the tags for ways and nodes
|
||||||
rtags = []
|
rtags = []
|
||||||
ltags = []
|
ltags = []
|
||||||
tags = []
|
tags = []
|
||||||
zipr = ''
|
zipr = ''
|
||||||
zipl = ''
|
zipl = ''
|
||||||
name = ''
|
name = ''
|
||||||
county = ''
|
county = ''
|
||||||
if "tiger:zip_right" in waykey:
|
if "tiger:zip_right" in waykey:
|
||||||
zipr = waykey["tiger:zip_right"]
|
zipr = waykey["tiger:zip_right"]
|
||||||
rtags.append( "<tag k=\"addr:postcode\" v=\"%s\" />" % zipr )
|
rtags.append( "<tag k=\"addr:postcode\" v=\"%s\" />" % zipr )
|
||||||
if "tiger:zip_left" in waykey:
|
if "tiger:zip_left" in waykey:
|
||||||
zipl = waykey["tiger:zip_left"]
|
zipl = waykey["tiger:zip_left"]
|
||||||
ltags.append( "<tag k=\"addr:postcode\" v=\"%s\" />" % zipl )
|
ltags.append( "<tag k=\"addr:postcode\" v=\"%s\" />" % zipl )
|
||||||
if "name" in waykey:
|
if "name" in waykey:
|
||||||
name = waykey["name"]
|
name = waykey["name"]
|
||||||
tags.append( "<tag k=\"addr:street\" v=\"%s\" />" % name )
|
tags.append( "<tag k=\"addr:street\" v=\"%s\" />" % name )
|
||||||
if "is_in:state" in waykey:
|
if "is_in:state" in waykey:
|
||||||
state = waykey["is_in:state"]
|
state = waykey["is_in:state"]
|
||||||
tags.append( "<tag k=\"addr:state\" v=\"%s\" />" % state )
|
tags.append( "<tag k=\"addr:state\" v=\"%s\" />" % state )
|
||||||
if "tiger:county" in waykey:
|
if "tiger:county" in waykey:
|
||||||
county = waykey["tiger:county"]
|
county = waykey["tiger:county"]
|
||||||
tags.append( "<tag k=\"addr:county\" v=\"%s\" />" % county )
|
tags.append( "<tag k=\"addr:county\" v=\"%s\" />" % county )
|
||||||
if "is_in:country_code" in waykey:
|
if "is_in:country_code" in waykey:
|
||||||
country = waykey["is_in:country_code"]
|
country = waykey["is_in:country_code"]
|
||||||
tags.append( "<tag k=\"addr:country\" v=\"%s\" />" % country )
|
tags.append( "<tag k=\"addr:country\" v=\"%s\" />" % country )
|
||||||
if "tiger:separated" in waykey:
|
if "tiger:separated" in waykey:
|
||||||
separated = waykey["tiger:separated"]
|
separated = waykey["tiger:separated"]
|
||||||
else:
|
else:
|
||||||
separated = "N"
|
separated = "N"
|
||||||
ltags.extend(tags)
|
ltags.extend(tags)
|
||||||
rtags.extend(tags)
|
rtags.extend(tags)
|
||||||
|
|
||||||
#Write the nodes of the offset ways
|
#Write the nodes of the offset ways
|
||||||
if right:
|
if right:
|
||||||
rlinestring = [];
|
rlinestring = [];
|
||||||
for i, point in rsegment:
|
for i, point in rsegment:
|
||||||
rlinestring.append( "%f %f" % (point[1], point[0]) )
|
rlinestring.append( "%f %f" % (point[1], point[0]) )
|
||||||
if left:
|
if left:
|
||||||
llinestring = [];
|
llinestring = [];
|
||||||
for i, point in lsegment:
|
for i, point in lsegment:
|
||||||
llinestring.append( "%f %f" % (point[1], point[0]) )
|
llinestring.append( "%f %f" % (point[1], point[0]) )
|
||||||
if right:
|
if right:
|
||||||
rsegments.append( rsegment )
|
rsegments.append( rsegment )
|
||||||
if left:
|
if left:
|
||||||
lsegments.append( lsegment )
|
lsegments.append( lsegment )
|
||||||
rtofromint = right #Do the addresses convert to integers?
|
rtofromint = right #Do the addresses convert to integers?
|
||||||
ltofromint = left #Do the addresses convert to integers?
|
ltofromint = left #Do the addresses convert to integers?
|
||||||
if right:
|
if right:
|
||||||
try: rfromint = int(rfromadd)
|
try: rfromint = int(rfromadd)
|
||||||
except:
|
except:
|
||||||
print("Non integer address: %s" % rfromadd)
|
print("Non integer address: %s" % rfromadd)
|
||||||
rtofromint = False
|
rtofromint = False
|
||||||
try: rtoint = int(rtoadd)
|
try: rtoint = int(rtoadd)
|
||||||
except:
|
except:
|
||||||
print("Non integer address: %s" % rtoadd)
|
print("Non integer address: %s" % rtoadd)
|
||||||
rtofromint = False
|
rtofromint = False
|
||||||
if left:
|
if left:
|
||||||
try: lfromint = int(lfromadd)
|
try: lfromint = int(lfromadd)
|
||||||
except:
|
except:
|
||||||
print("Non integer address: %s" % lfromadd)
|
print("Non integer address: %s" % lfromadd)
|
||||||
ltofromint = False
|
ltofromint = False
|
||||||
try: ltoint = int(ltoadd)
|
try: ltoint = int(ltoadd)
|
||||||
except:
|
except:
|
||||||
print("Non integer address: %s" % ltoadd)
|
print("Non integer address: %s" % ltoadd)
|
||||||
ltofromint = False
|
ltofromint = False
|
||||||
import_guid = time.strftime( '%Y%m%d%H%M%S' )
|
import_guid = time.strftime( '%Y%m%d%H%M%S' )
|
||||||
if right:
|
if right:
|
||||||
id += 1
|
id += 1
|
||||||
|
|
||||||
interpolationtype = "";
|
interpolationtype = "";
|
||||||
if rtofromint:
|
if rtofromint:
|
||||||
if (rfromint % 2) == 0 and (rtoint % 2) == 0:
|
if (rfromint % 2) == 0 and (rtoint % 2) == 0:
|
||||||
if separated == "Y": #Doesn't matter if there is another side
|
if separated == "Y": #Doesn't matter if there is another side
|
||||||
# ret.append( "<tag k=\"addr:interpolation\" v=\"even\" />" )
|
# ret.append( "<tag k=\"addr:interpolation\" v=\"even\" />" )
|
||||||
interpolationtype = "even";
|
interpolationtype = "even";
|
||||||
elif ltofromint and (lfromint % 2) == 1 and (ltoint % 2) == 1:
|
elif ltofromint and (lfromint % 2) == 1 and (ltoint % 2) == 1:
|
||||||
interpolationtype = "even";
|
interpolationtype = "even";
|
||||||
# ret.append( "<tag k=\"addr:interpolation\" v=\"even\" />" )
|
# ret.append( "<tag k=\"addr:interpolation\" v=\"even\" />" )
|
||||||
else:
|
else:
|
||||||
interpolationtype = "all";
|
interpolationtype = "all";
|
||||||
# ret.append( "<tag k=\"addr:interpolation\" v=\"all\" />" )
|
# ret.append( "<tag k=\"addr:interpolation\" v=\"all\" />" )
|
||||||
elif (rfromint % 2) == 1 and (rtoint % 2) == 1:
|
elif (rfromint % 2) == 1 and (rtoint % 2) == 1:
|
||||||
if separated == "Y": #Doesn't matter if there is another side
|
if separated == "Y": #Doesn't matter if there is another side
|
||||||
interpolationtype = "odd";
|
interpolationtype = "odd";
|
||||||
# ret.append( "<tag k=\"addr:interpolation\" v=\"odd\" />" )
|
# ret.append( "<tag k=\"addr:interpolation\" v=\"odd\" />" )
|
||||||
elif ltofromint and (lfromint % 2) == 0 and (ltoint % 2) == 0:
|
elif ltofromint and (lfromint % 2) == 0 and (ltoint % 2) == 0:
|
||||||
interpolationtype = "odd";
|
interpolationtype = "odd";
|
||||||
# ret.append( "<tag k=\"addr:interpolation\" v=\"odd\" />" )
|
# ret.append( "<tag k=\"addr:interpolation\" v=\"odd\" />" )
|
||||||
else:
|
else:
|
||||||
interpolationtype = "all";
|
interpolationtype = "all";
|
||||||
# ret.append( "<tag k=\"addr:interpolation\" v=\"all\" />" )
|
# ret.append( "<tag k=\"addr:interpolation\" v=\"all\" />" )
|
||||||
else:
|
else:
|
||||||
interpolationtype = "all";
|
interpolationtype = "all";
|
||||||
# ret.append( "<tag k=\"addr:interpolation\" v=\"all\" />" )
|
# ret.append( "<tag k=\"addr:interpolation\" v=\"all\" />" )
|
||||||
else:
|
else:
|
||||||
interpolationtype = "all";
|
interpolationtype = "all";
|
||||||
# ret.append( "<tag k=\"addr:interpolation\" v=\"all\" />" )
|
# ret.append( "<tag k=\"addr:interpolation\" v=\"all\" />" )
|
||||||
# ret.extend(rtags)
|
# ret.extend(rtags)
|
||||||
# ret.append( "<tag k=\"source\" v=\"%s_import_v%s_%s\" />" % (iSource, VERSION, import_guid) )
|
# ret.append( "<tag k=\"source\" v=\"%s_import_v%s_%s\" />" % (iSource, VERSION, import_guid) )
|
||||||
# ret.append( "<tag k=\"attribution\" v=\"%s\" />" % (iAttrib) )
|
# ret.append( "<tag k=\"attribution\" v=\"%s\" />" % (iAttrib) )
|
||||||
# ret.append( "</way>" )
|
# ret.append( "</way>" )
|
||||||
@@ -3895,27 +3895,27 @@ def addressways(waylist, nodelist, first_id):
|
|||||||
ret.append( "select tigger_create_interpolation(ST_GeomFromText('LINESTRING(%s)',4326), '%s', '%s', '%s', '%s', '%s', '%s');" %
|
ret.append( "select tigger_create_interpolation(ST_GeomFromText('LINESTRING(%s)',4326), '%s', '%s', '%s', '%s', '%s', '%s');" %
|
||||||
( ",".join(rlinestring), rfromadd.replace("'", "''"), rtoadd.replace("'", "''"), interpolationtype.replace("'", "''"), name.replace("'", "''"), county.replace("'", "''"), zipr.replace("'", "''") ) )
|
( ",".join(rlinestring), rfromadd.replace("'", "''"), rtoadd.replace("'", "''"), interpolationtype.replace("'", "''"), name.replace("'", "''"), county.replace("'", "''"), zipr.replace("'", "''") ) )
|
||||||
|
|
||||||
if left:
|
if left:
|
||||||
id += 1
|
id += 1
|
||||||
if ltofromint:
|
if ltofromint:
|
||||||
if (lfromint % 2) == 0 and (ltoint % 2) == 0:
|
if (lfromint % 2) == 0 and (ltoint % 2) == 0:
|
||||||
if separated == "Y":
|
if separated == "Y":
|
||||||
interpolationtype = "even";
|
interpolationtype = "even";
|
||||||
elif rtofromint and (rfromint % 2) == 1 and (rtoint % 2) == 1:
|
elif rtofromint and (rfromint % 2) == 1 and (rtoint % 2) == 1:
|
||||||
interpolationtype = "even";
|
interpolationtype = "even";
|
||||||
else:
|
else:
|
||||||
interpolationtype = "all";
|
interpolationtype = "all";
|
||||||
|
|
||||||
elif (lfromint % 2) == 1 and (ltoint % 2) == 1:
|
elif (lfromint % 2) == 1 and (ltoint % 2) == 1:
|
||||||
if separated == "Y":
|
if separated == "Y":
|
||||||
interpolationtype = "odd";
|
interpolationtype = "odd";
|
||||||
elif rtofromint and (rfromint %2 ) == 0 and (rtoint % 2) == 0:
|
elif rtofromint and (rfromint %2 ) == 0 and (rtoint % 2) == 0:
|
||||||
interpolationtype = "odd";
|
interpolationtype = "odd";
|
||||||
else:
|
else:
|
||||||
interpolationtype = "all";
|
interpolationtype = "all";
|
||||||
else:
|
else:
|
||||||
interpolationtype = "all";
|
interpolationtype = "all";
|
||||||
else:
|
else:
|
||||||
interpolationtype = "all";
|
interpolationtype = "all";
|
||||||
ret.append( "select tigger_create_interpolation(ST_GeomFromText('LINESTRING(%s)',4326), '%s', '%s', '%s', '%s', '%s', '%s');" %
|
ret.append( "select tigger_create_interpolation(ST_GeomFromText('LINESTRING(%s)',4326), '%s', '%s', '%s', '%s', '%s', '%s');" %
|
||||||
( ",".join(llinestring), lfromadd.replace("'", "''"), ltoadd.replace("'", "''"), interpolationtype.replace("'", "''"), name.replace("'", "''"), county.replace("'", "''"), zipl.replace("'", "''") ) )
|
( ",".join(llinestring), lfromadd.replace("'", "''"), ltoadd.replace("'", "''"), interpolationtype.replace("'", "''"), name.replace("'", "''"), county.replace("'", "''"), zipl.replace("'", "''") ) )
|
||||||
@@ -4023,7 +4023,7 @@ def compile_waylist( parsed_gisdata, blank_way_id ):
|
|||||||
#Group by iSource:way_id
|
#Group by iSource:way_id
|
||||||
for geom, tags in parsed_gisdata:
|
for geom, tags in parsed_gisdata:
|
||||||
way_key = tags.copy()
|
way_key = tags.copy()
|
||||||
way_key = ( way_key[iSource + ':way_id'], tuple( [(k,v) for k,v in way_key.iteritems()] ) )
|
way_key = ( way_key[iSource + ':way_id'], tuple( [(k,v) for k,v in way_key.items()] ) )
|
||||||
|
|
||||||
if way_key not in waylist:
|
if way_key not in waylist:
|
||||||
waylist[way_key] = []
|
waylist[way_key] = []
|
||||||
@@ -4031,7 +4031,7 @@ def compile_waylist( parsed_gisdata, blank_way_id ):
|
|||||||
waylist[way_key].append( geom )
|
waylist[way_key].append( geom )
|
||||||
|
|
||||||
ret = {}
|
ret = {}
|
||||||
for (way_id, way_key), segments in waylist.iteritems():
|
for (way_id, way_key), segments in waylist.items():
|
||||||
|
|
||||||
if way_id != blank_way_id:
|
if way_id != blank_way_id:
|
||||||
ret[way_key] = glom_all( segments )
|
ret[way_key] = glom_all( segments )
|
||||||
@@ -4047,42 +4047,42 @@ def shape_to_osm( shp_filename, base_filename, blank_way_id ):
|
|||||||
|
|
||||||
import_guid = time.strftime( '%Y%m%d%H%M%S' )
|
import_guid = time.strftime( '%Y%m%d%H%M%S' )
|
||||||
|
|
||||||
print "parsing shpfile"
|
print("parsing shpfile")
|
||||||
parsed_features = parse_shp_for_osm( shp_filename )
|
parsed_features = parse_shp_for_osm( shp_filename )
|
||||||
|
|
||||||
print "compiling nodelist"
|
print("compiling nodelist")
|
||||||
i, nodelist = compile_nodelist( parsed_features )
|
i, nodelist = compile_nodelist( parsed_features )
|
||||||
|
|
||||||
print "compiling waylist"
|
print("compiling waylist")
|
||||||
waylist = compile_waylist( parsed_features, blank_way_id )
|
waylist = compile_waylist( parsed_features, blank_way_id )
|
||||||
|
|
||||||
filenumber = 1
|
filenumber = 1
|
||||||
objectcount = 0
|
objectcount = 0
|
||||||
seen = {}
|
seen = {}
|
||||||
|
|
||||||
print "preparing address ways"
|
print("preparing address ways")
|
||||||
ret = addressways(waylist, nodelist, i)
|
ret = addressways(waylist, nodelist, i)
|
||||||
osm_filename = "%s%d.osm" % (base_filename, filenumber)
|
osm_filename = "%s%d.osm" % (base_filename, filenumber)
|
||||||
print "writing %s" %osm_filename
|
print("writing %s" %osm_filename)
|
||||||
fp = open( osm_filename, "w" )
|
fp = open( osm_filename, "w" )
|
||||||
fp.write( "\n".join( ret ) )
|
fp.write( "\n".join( ret ) )
|
||||||
fp.close()
|
fp.close()
|
||||||
filenumber += 1
|
filenumber += 1
|
||||||
|
|
||||||
|
|
||||||
print "constructing osm xml file"
|
print("constructing osm xml file")
|
||||||
ret = []
|
ret = []
|
||||||
ret.append( "<?xml version='1.0' encoding='UTF-8'?>" )
|
ret.append( "<?xml version='1.0' encoding='UTF-8'?>" )
|
||||||
ret.append( "<osm version='0.6' generator='shape_to_osm.py'>" )
|
ret.append( "<osm version='0.6' generator='shape_to_osm.py'>" )
|
||||||
|
|
||||||
for waykey, segments in waylist.iteritems():
|
for waykey, segments in waylist.items():
|
||||||
for segment in segments:
|
for segment in segments:
|
||||||
#write the nodes
|
#write the nodes
|
||||||
for point in segment:
|
for point in segment:
|
||||||
id, (lat, lon) = nodelist[ round_point( point ) ]
|
id, (lat, lon) = nodelist[ round_point( point ) ]
|
||||||
if id not in seen:
|
if id not in seen:
|
||||||
seen[id] = True
|
seen[id] = True
|
||||||
#write node
|
#write node
|
||||||
ret.append( " <node id='-%d' action='create' visible='true' lat='%f' lon='%f' >" % (id, lat, lon) )
|
ret.append( " <node id='-%d' action='create' visible='true' lat='%f' lon='%f' >" % (id, lat, lon) )
|
||||||
ret.append( " </node>" )
|
ret.append( " </node>" )
|
||||||
objectcount += 1
|
objectcount += 1
|
||||||
@@ -4090,7 +4090,7 @@ def shape_to_osm( shp_filename, base_filename, blank_way_id ):
|
|||||||
pass
|
pass
|
||||||
#print "Skipping node %d" %id
|
#print "Skipping node %d" %id
|
||||||
|
|
||||||
#write the way
|
#write the way
|
||||||
ret.append( " <way id='-%d' action='create' visible='true'>" % i )
|
ret.append( " <way id='-%d' action='create' visible='true'>" % i )
|
||||||
|
|
||||||
ids = [ nodelist[ round_point( point ) ][0] for point in segment ]
|
ids = [ nodelist[ round_point( point ) ][0] for point in segment ]
|
||||||
@@ -4099,7 +4099,7 @@ def shape_to_osm( shp_filename, base_filename, blank_way_id ):
|
|||||||
for id in ids:
|
for id in ids:
|
||||||
count += 1
|
count += 1
|
||||||
ret.append( " <nd ref='-%d' />" % id )
|
ret.append( " <nd ref='-%d' />" % id )
|
||||||
if (count % Max_Waylength == 0) and (count != len(ids)): #Split the way
|
if (count % Max_Waylength == 0) and (count != len(ids)): #Split the way
|
||||||
for k, v in waykey:
|
for k, v in waykey:
|
||||||
ret.append( " <tag k=\"%s\" v=\"%s\" />" % (k, escape(str(v))) )
|
ret.append( " <tag k=\"%s\" v=\"%s\" />" % (k, escape(str(v))) )
|
||||||
ret.append( " <tag k=\"source\" v=\"%s_import_v%s_%s\" />" % (iSource, VERSION, import_guid) )
|
ret.append( " <tag k=\"source\" v=\"%s_import_v%s_%s\" />" % (iSource, VERSION, import_guid) )
|
||||||
@@ -4107,7 +4107,7 @@ def shape_to_osm( shp_filename, base_filename, blank_way_id ):
|
|||||||
|
|
||||||
ret.append( " </way>" )
|
ret.append( " </way>" )
|
||||||
objectcount += 1
|
objectcount += 1
|
||||||
i += 1
|
i += 1
|
||||||
ret.append( " <way id='-%d' action='create' visible='true'>" % i )
|
ret.append( " <way id='-%d' action='create' visible='true'>" % i )
|
||||||
ret.append( " <nd ref='-%d' />" % id )
|
ret.append( " <nd ref='-%d' />" % id )
|
||||||
|
|
||||||
@@ -4121,10 +4121,10 @@ def shape_to_osm( shp_filename, base_filename, blank_way_id ):
|
|||||||
|
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
if objectcount > maxNodes: #Write a file
|
if objectcount > maxNodes: #Write a file
|
||||||
ret.append( "</osm>" )
|
ret.append( "</osm>" )
|
||||||
osm_filename = "%s%d.osm" % (base_filename, filenumber)
|
osm_filename = "%s%d.osm" % (base_filename, filenumber)
|
||||||
print "writing %s" %osm_filename
|
print("writing %s" %osm_filename)
|
||||||
fp = open( osm_filename, "w" )
|
fp = open( osm_filename, "w" )
|
||||||
fp.write( "\n".join( ret ) )
|
fp.write( "\n".join( ret ) )
|
||||||
fp.close()
|
fp.close()
|
||||||
@@ -4139,7 +4139,7 @@ def shape_to_osm( shp_filename, base_filename, blank_way_id ):
|
|||||||
ret.append( "</osm>" )
|
ret.append( "</osm>" )
|
||||||
|
|
||||||
osm_filename = "%s%d.osm" % (base_filename, filenumber)
|
osm_filename = "%s%d.osm" % (base_filename, filenumber)
|
||||||
print "writing %s" %osm_filename
|
print("writing %s" %osm_filename)
|
||||||
fp = open( osm_filename, "w" )
|
fp = open( osm_filename, "w" )
|
||||||
fp.write( "\n".join( ret ) )
|
fp.write( "\n".join( ret ) )
|
||||||
fp.close()
|
fp.close()
|
||||||
@@ -4147,7 +4147,7 @@ def shape_to_osm( shp_filename, base_filename, blank_way_id ):
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import sys, os.path
|
import sys, os.path
|
||||||
if len(sys.argv) < 2:
|
if len(sys.argv) < 2:
|
||||||
print "%s filename.shp [filename.osm]" % sys.argv[0]
|
print("%s filename.shp [filename.osm]" % sys.argv[0])
|
||||||
sys.exit()
|
sys.exit()
|
||||||
shape = sys.argv[1]
|
shape = sys.argv[1]
|
||||||
if len(sys.argv) > 2:
|
if len(sys.argv) > 2:
|
||||||
@@ -4155,6 +4155,6 @@ if __name__ == '__main__':
|
|||||||
else:
|
else:
|
||||||
osm = shape[0:-4] + ".osm"
|
osm = shape[0:-4] + ".osm"
|
||||||
id = "1.shp"
|
id = "1.shp"
|
||||||
# Left over from massGIS unknown usage, but works fine hardcoded to "1.shp" which was the valu on a test of the actual mass data,
|
# Left over from massGIS unknown usage, but works fine hardcoded to "1.shp" which was the valu on a test of the actual mass data,
|
||||||
#id = os.path.basename(shape).split("_")[-1]
|
#id = os.path.basename(shape).split("_")[-1]
|
||||||
shape_to_osm( shape, osm, id )
|
shape_to_osm( shape, osm, id )
|
||||||
|
|||||||
Reference in New Issue
Block a user