Skip to content

Instantly share code, notes, and snippets.

@ljwolf
Forked from sjsrey/alphabug.ipynb
Last active October 10, 2019 14:57
Show Gist options
  • Save ljwolf/5647181cb68cf1c47894f294d3ad1da3 to your computer and use it in GitHub Desktop.
Save ljwolf/5647181cb68cf1c47894f294d3ad1da3 to your computer and use it in GitHub Desktop.
alpha clipping bug
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"import libpysal\n",
"import numpy\n",
"import geopandas\n",
"from shapely.geometry import Point, Polygon\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(50, 2)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"points = numpy.loadtxt('alphapoints.txt')\n",
"points.shape"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"w_test = libpysal.weights.Voronoi(points)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"49"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"w_test.n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"p_gdf = geopandas.GeoDataFrame(geometry=[Point(point) for point in points])"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"regions, generators = libpysal.cg.voronoi.voronoi_frames(points)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"a_regions = libpysal.cg.voronoi.clip_voronoi_frames_to_extent(regions, generators, clip='ahull')"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f72f65442e8>"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"ax = regions.plot(color='white', edgecolor='black')\n",
"a_regions.plot(ax=ax, alpha=0.2, color='green')\n",
"generators.plot(ax=ax, color='red')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
1.029128626334328445e+01 1.365816287575282217e+01
1.195670482003673030e+01 1.471579988333618516e+01
1.897682175711089059e+01 1.382784831636707068e+01
1.113533517690262187e+01 1.601637670660973711e+01
1.462906854496425879e+01 1.375513889320493455e+01
1.100534935018026950e+01 1.907425742182736172e+01
1.884919710605745280e+01 1.251931919170242402e+01
1.045159564037694544e+01 1.884556815316026501e+01
1.158277314162118188e+01 1.621805205103852998e+01
1.660235416968842159e+01 1.519387455027133882e+01
1.756838227823502763e+01 1.380998327257449354e+01
1.723869420902103755e+01 1.023414275142773633e+01
1.698404619430929685e+01 1.205643537016283773e+01
1.204673219358900660e+01 1.956061924357363324e+01
1.499043599656454795e+01 1.145301772049807987e+01
1.708209028469097035e+01 1.402870211122390209e+01
1.589573166403873117e+01 1.465951259545013485e+01
1.582136241533121179e+01 1.050353084733463938e+01
1.147080242126983762e+01 1.457617246833424751e+01
1.758407826011995922e+01 1.616417827489364711e+01
1.717312085194632232e+01 1.270418505208493087e+01
1.332203009720132414e+01 1.425581912363055181e+01
1.946907894574708564e+01 1.314421552600851228e+01
1.704857801949855656e+01 1.035906345122783456e+01
1.339986530464298298e+01 1.939053117658754388e+01
1.504669045194645172e+01 1.661936061061076941e+01
1.287454403444879247e+01 1.808811930471991758e+01
1.959718858566854038e+01 1.439118605832049980e+01
1.264476504038637827e+01 1.545316648830846162e+01
1.834661710432902737e+01 1.052062362263327344e+01
1.161168727172857018e+01 1.042609481502864099e+01
1.005375702449195963e+01 1.378849222938711527e+01
1.977190244539414721e+01 1.168635731842035419e+01
1.689198869339618625e+01 1.553627001092079851e+01
1.293537450428770796e+01 1.094741669487824609e+01
1.011649833845572388e+01 1.463882930247080161e+01
1.959407900074536002e+01 1.578353082466281521e+01
1.298147190913113747e+01 1.565679636207205760e+01
1.659623645664111891e+01 1.614805175330319997e+01
1.486084931012926091e+01 1.014642950294869905e+01
1.190328905291297446e+01 1.891832213780040206e+01
1.450627033074235683e+01 1.269156576659019464e+01
1.598140358238145708e+01 1.550667220541790670e+01
1.946557544983048871e+01 1.954205825748656622e+01
1.592717374102223182e+01 1.170862929232374583e+01
1.260927308699297811e+01 1.031667428830976263e+01
1.438377320701443196e+01 1.123894736922024506e+01
1.648343788504370622e+01 1.002621532387114200e+01
1.318416688225100941e+01 1.381532057344131914e+01
1.302815156398435548e+01 1.306160001112482938e+01
import libpysal
from libpysal.cg import alpha_shapes
import numpy
import geopandas
points = numpy.loadtxt('alphapoints.txt')
## just pull in the algo line by line
from scipy import spatial
triangulation = spatial.Delaunay(coords)
triangles = coords[triangulation.simplices]
a_pts = triangles[:,0,:]
b_pts = triangles[:,1,:]
c_pts = triangles[:,2,:]
# the radii broadly look correct.
radii = alpha_shapes.r_circumcircle_triangle(a_pts, b_pts, c_pts)
radii[numpy.isnan(radii)] = 0
radii_sorted_i = radii.argsort()
triangles = triangulation.simplices[radii_sorted_i][::-1]
radii = radii[radii_sorted_i][::-1]
boundingbox = numpy.array([*xys.min(axis=0), xys.max(axis=0)])
# step through each geometry & see what changes:
shapes = (alpha_shapes.alpha_geoms((1/radii[i]) - numpy.finfo(float).eps, triangles, radii, xys) for i in range(50))
for i in range(50):
this_shape = next(shapes)
geopandas.GeoDataFrame(geometry=this_shape).plot(facecolor='cornflowerblue', edgecolor='k')
plt.show()
get_input = input()
if get_input != '':
break
#!/usr/bin/env python
# coding: utf-8
# In[1]:
import libpysal
import numpy
import geopandas
from shapely.geometry import Point, Polygon
get_ipython().run_line_magic('matplotlib', 'inline')
# In[2]:
points = numpy.loadtxt('alphapoints.txt')
points.shape
# In[3]:
w_test = libpysal.weights.Voronoi(points)
# In[4]:
w_test.n
# In[5]:
p_gdf = geopandas.GeoDataFrame(geometry=[Point(point) for point in points])
# In[6]:
regions, generators = libpysal.cg.voronoi.voronoi_frames(points)
# In[7]:
a_regions = libpysal.cg.voronoi.clip_voronoi_frames_to_extent(regions, generators, clip='ahull')
# In[8]:
ax = regions.plot(color='white', edgecolor='black')
a_regions.plot(ax=ax, alpha=0.2, color='green')
generators.plot(ax=ax, color='red')
# In[ ]:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment