Example Usage Applied to Venus Lineaments - Ganiki Planitia¶
Data fromGaniki Planitia Quadrangle (V–14)
Radial lineaments on Venus are intriguing geological features indicative of the planet’s dynamic surface and internal processes. These lineaments are essentially long, linear structures that radiate outward from a central point. The presence of radial lineaments on Venus provides valuable insights into the planet’s geological history and its current geodynamic behavior. They can indicate the locations of past volcanic activity, the movement of tectonic plates (if applicable, given Venus’s thick lithosphere and unique tectonic regime), or the impact of asteroids and comets. These features are also important for understanding the crustal stress patterns and may help to map out the subsurface structures of the planet.
Load in a shape file with multiple features.
Find the lines you want.
Perform the Hough Transform
Visualize the Results
Radial Feature extraction
Save features

Grosfils, E. B., Long, S. M., Venechuk, E. M., Hurwitz, D. M., Richards, J. W., Kastl, B., … & Hardin, J. S. (2011). Geologic map of the ganiki planitia quadrangle (v–14), venus.
[43]:
#Let's begin by loading the module
import linkinglines as ll
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
[44]:
# Load the example dataset
dikeset=ll.readFile('../data/exampleGanikiSegments.shp', preprocess=True)
22 dropped for not being straight
0 dropped for not being straight
The next step is to perform the Hough Transform
Besides the data the input in the hough transform code is the center (xc,yc) which is assumed to be the mean of the X and Y coordinates. It can be set arbitrarily. You may wish to set this to investigate structures in your dataset. But most people will use the default settings.
[45]:
dikeset, xc, yc=ll.HoughTransform(dikeset)
print(xc,yc)
print(dikeset.columns)
-85099.97178645834 -5451850.508986442
Index(['WKT', 'v14_gt_LWM', 'Type', 'Shape_Leng', 'geometry', 'Xstart',
'Ystart', 'Xend', 'Yend', 'seg_length', 'HashID', 'Xmid', 'Ymid',
'theta', 'rho', 'xc', 'yc', 'PerpOffsetDist', 'PerpIntX', 'PerpIntY',
'Date Changed'],
dtype='object')
Visualize the hough transform data.
[46]:
fig, [ax_main, ax_xDist, ax_yDist]=ll.plotScatterHist(dikeset, "theta",
"rho", hue='Ymid', palette="icefire")
Now we will apply the radial feature extraction. The ‘tol’ feature is the radius of the area of intersection and this is set to 15km. Then save the features.
[47]:
rad=ll.RadialFit(dikeset)
close, rad=ll.NearCenters(dikeset, rad, tol=15000)
ll.writeCenterWKT(rad, 'VenusGanikiRadialFitsCenters.csv')
[47]:
| Center | Std Error | RSq | Spacing | ExpandingR | AngleRange | nDikes | geometry | |
|---|---|---|---|---|---|---|---|---|
| 0 | [-80280.397841859, -5493100.957091977] | [5533.63948925587, 9042.67306613744] | 0.171472 | (8.193225176241935, 2.839983294061625, 0.02250... | [0.0, 0.020833333333333332, 0.03125, 0.6666666... | 332.671883 | 42 | POINT (-80280.397841859 -5493100.957091977) |
[48]:
fig, [axCart, axHough] = ll.DotsLines(dikeset, ColorBy='Ymid') # Plot the lines and the dots
axCart.plot(rad['Center'][0][0], rad['Center'][0][1], 'ro') #plot the center of the radial fit
#Plot the fit onto the data
angles=np.linspace(-90,90) #make an array of angles from -90,90 for plotting
rhorad=ll.CenterFunc(angles,rad['Center'][0][0], rad['Center'][0][1], xc,yc)/1000 #calculate rho values, convert to kilometers
axHough.plot(angles, rhorad, 'r-.', label='Radial Fit') #plot the radial fit
axHough.legend() #add a legend
km scale label
/home/akh/myprojects/Dikes_Linking_Project/linkinglines/src/linkinglines/PlotUtils.py:1428: UserWarning: The figure layout has changed to tight
plt.tight_layout()
[48]:
<matplotlib.legend.Legend at 0x7ff498a40f70>
[ ]: