Skip to content

Instantly share code, notes, and snippets.

@shakasom
Created January 6, 2018 21:25
Show Gist options
  • Save shakasom/4b885507ab7be2d5da36cc37ed25363b to your computer and use it in GitHub Desktop.
Save shakasom/4b885507ab7be2d5da36cc37ed25363b to your computer and use it in GitHub Desktop.
Shapely Geometry example
{
"cells": [
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import geopandas as gpd\n",
"from shapely.geometry import Point, Polygon, LineString\n",
"from fiona.crs import from_epsg\n",
"import matplotlib.pyplot as plt\n",
"import folium\n",
"import mplleaflet"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"file = 'C:/Data/coordinates.txt'"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv(file, sep=';', encoding='iso-8859-1')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>name</th>\n",
" <th>lat</th>\n",
" <th>long</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>101</td>\n",
" <td>Västerås</td>\n",
" <td>59.611366</td>\n",
" <td>16.545025</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>102</td>\n",
" <td>Umeå</td>\n",
" <td>63.825848</td>\n",
" <td>20.263035</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>103</td>\n",
" <td>Norrköping</td>\n",
" <td>58.588455</td>\n",
" <td>16.188313</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>104</td>\n",
" <td>Stockholm</td>\n",
" <td>59.334591</td>\n",
" <td>18.063240</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>105</td>\n",
" <td>Uddevalla</td>\n",
" <td>58.351307</td>\n",
" <td>11.885834</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>106</td>\n",
" <td>Västervik</td>\n",
" <td>57.751442</td>\n",
" <td>16.628838</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>107</td>\n",
" <td>Gothenburg</td>\n",
" <td>57.708870</td>\n",
" <td>11.974560</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>108</td>\n",
" <td>Visby</td>\n",
" <td>57.634800</td>\n",
" <td>18.294840</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id name lat long\n",
"0 101 Västerås 59.611366 16.545025\n",
"1 102 Umeå 63.825848 20.263035\n",
"2 103 Norrköping 58.588455 16.188313\n",
"3 104 Stockholm 59.334591 18.063240\n",
"4 105 Uddevalla 58.351307 11.885834\n",
"5 106 Västervik 57.751442 16.628838\n",
"6 107 Gothenburg 57.708870 11.974560\n",
"7 108 Visby 57.634800 18.294840"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df #simple dataframe consisting lat, long and couple of other columns"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# Create geometry from latitude and longitude.\n",
"geometry = [Point(xy) for xy in zip(df['lat'], df['long'])]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>name</th>\n",
" <th>lat</th>\n",
" <th>long</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>101</td>\n",
" <td>Västerås</td>\n",
" <td>59.611366</td>\n",
" <td>16.545025</td>\n",
" <td>POINT (59.611366 16.545025)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>102</td>\n",
" <td>Umeå</td>\n",
" <td>63.825848</td>\n",
" <td>20.263035</td>\n",
" <td>POINT (63.825848 20.263035)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>103</td>\n",
" <td>Norrköping</td>\n",
" <td>58.588455</td>\n",
" <td>16.188313</td>\n",
" <td>POINT (58.588455 16.188313)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>104</td>\n",
" <td>Stockholm</td>\n",
" <td>59.334591</td>\n",
" <td>18.063240</td>\n",
" <td>POINT (59.334591 18.06324)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>105</td>\n",
" <td>Uddevalla</td>\n",
" <td>58.351307</td>\n",
" <td>11.885834</td>\n",
" <td>POINT (58.35130699999999 11.885834)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>106</td>\n",
" <td>Västervik</td>\n",
" <td>57.751442</td>\n",
" <td>16.628838</td>\n",
" <td>POINT (57.751442 16.628838)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>107</td>\n",
" <td>Gothenburg</td>\n",
" <td>57.708870</td>\n",
" <td>11.974560</td>\n",
" <td>POINT (57.70887 11.97456)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>108</td>\n",
" <td>Visby</td>\n",
" <td>57.634800</td>\n",
" <td>18.294840</td>\n",
" <td>POINT (57.6348 18.29484)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id name lat long geometry\n",
"0 101 Västerås 59.611366 16.545025 POINT (59.611366 16.545025)\n",
"1 102 Umeå 63.825848 20.263035 POINT (63.825848 20.263035)\n",
"2 103 Norrköping 58.588455 16.188313 POINT (58.588455 16.188313)\n",
"3 104 Stockholm 59.334591 18.063240 POINT (59.334591 18.06324)\n",
"4 105 Uddevalla 58.351307 11.885834 POINT (58.35130699999999 11.885834)\n",
"5 106 Västervik 57.751442 16.628838 POINT (57.751442 16.628838)\n",
"6 107 Gothenburg 57.708870 11.974560 POINT (57.70887 11.97456)\n",
"7 108 Visby 57.634800 18.294840 POINT (57.6348 18.29484)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Create Geodataframe out of the geometry and the df\n",
"gdf = gpd.GeoDataFrame(df, crs=from_epsg(4326), geometry=geometry)\n",
"gdf # we have a geometry now that can be analysed, forexampel - distance between points, buffer the points etc.."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x26998e97780>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gdf.plot(); plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment