Cheat sheet on Geocoordinates#
Links: notebook
, html, PDF
, python
, slides, GitHub
Cheat sheet on geocoding.
from jyquickhelper import add_notebook_menu
add_notebook_menu()
Read shapefiles#
Shapefiles usually comes in three file:
<name>.shp
: the shapes<name>.shx
<name>.dbf
: the metadata
Module you can use to read the files: pyshp, fiona…
from pyquickhelper.filehelper import unzip_files
unzip_files("geo_data.zip", ".")
['.\Centerline.dbf', '.\Centerline.prj', '.\Centerline.shp', '.\Centerline.shx']
import shapefile
shp = shapefile.Reader("Centerline.shp")
records = shp.records()
shapes = shp.shapes()
fields = shp.fields
shapes[0].__dict__
{'shapeType': 3,
'points': [(1312867.164001003, 260498.0600337088),
(1313098.4133638293, 260489.8426001817),
(1313098.288386017, 260482.84261640906)],
'parts': [0],
'bbox': [1312867.164001003, 260482.84261640906, 1313098.4133638293, 260498.0600337088]}
{k[0]:v for k,v in zip(fields[1:], records[0])}
{'StreetName': 'NE 118th CT',
'FromStreet': '132nd PL NE',
'ToStreet': 'E of 132nd PL NE',
'StreetWidt': 34.0,
'ConstYear': 1980.0,
'ConstBy': '',
'd_Classifi': 4.0,
'd_Ownershi': 'RED',
'd_Status': 'ACT',
'd_DataSour': 'EXT',
'd_InsideCi': 'YES',
'FromLeft': 13200,
'ToLeft': 13398,
'FromRight': 13201,
'ToRight': 13399,
'LeftCity': 'RED',
'RightCity': 'RED',
'LeftZip': '98052',
'RightZip': '98052',
'Side': 'B',
'Exclude': '',
'Location': '',
'lz_evn': 'G',
'lz_odd': 'G',
'la_evn': 'G',
'la_odd': 'G',
'StreetNa_1': 'NE 118 CT',
'FireArteri': 0,
'surface': '1',
'Migrated': 'YES',
'd_ConstBy': '',
'RedCenterl': 7,
'MaxSpeedLi': 25,
'CreatedBy': '',
'DateCreate': b'',
'ModifiedBy': 'ESP-NFEARS',
'DateModifi': datetime.date(2016, 7, 21),
'StAlias1': '',
'StAlias2': '',
'StAlias3': '',
'AssetID': 'Cntl7',
'LucityAuto': 0,
'd_AssetTyp': 'Centerline',
'CalcLength': 238.39641915,
'Shape_len': 238.396419151}
Convert coordinates into longitude / latitude#
Source : GIS Tips – How to Find the EPSG Code of your Shapefile
The file <name>.prj
contains informations about the coordinates used
to encode the shapefiles.
%load_ext pyensae
%head Centerline.prj
PROJCS["NAD_1983_HARN_StatePlane_Washington_North_FIPS_4601_Feet",GEOGCS["GCS_North_American_1983_HARN",DATUM["D_North_American_1983_HARN",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",1640416.666666667],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-120.8333333333333],PARAMETER["Standard_Parallel_1",47.5],PARAMETER["Standard_Parallel_2",48.73333333333333],PARAMETER["Latitude_Of_Origin",47.0],UNIT["Foot_US",0.3048006096012192]],VERTCS["NGVD_1929",VDATUM["National_Geodetic_Vertical_Datum_1929"],PARAMETER["Vertical_Shift",0.0],PARAMETER["Direction",1.0],UNIT["Foot_US",0.3048006096012192]]
This means to be converted into another coordinates system: ESPG:XXXX. That’s what the website Prj2EPSG does. The module pyproj does the conversion into longitude / latitude.
from pyproj import Proj, transform
p1 = Proj(init='epsg:2926') # returned by Prj2ESPG
p2 = Proj(init='epsg:4326') # longitude / latidue
x0, y0 = 1312487.225652799, 231314.96255882084
transform(p1,p2,x0,y0)
(-109.78898903640629, 48.55518509715834)