#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, os
from osgeo import ogr
from shapely import wkt
from shapely.geometry import LineString

in_lns = sys.argv[1]
out_pts = sys.argv[2]

# open shapefile with OGR
input = ogr.Open(in_lns)
in_lyr = input.GetLayer(0)

## create output point shapefile
ogrDriver = ogr.GetDriverByName("ESRI Shapefile")
outDataSource = ogrDriver.CreateDataSource(out_pts)

# copy SRS from the input shapefile
srs = in_lyr.GetSpatialRef()

# create layer
out_lyr = outDataSource.CreateLayer(out_pts, srs, ogr.wkbPoint)

# export to WKT, compute center points and write them to shp
for f in in_lyr:
    g = f.geometry().ExportToWkt()
    shapelyLine = LineString(wkt.loads(g))
    midPoint = shapelyLine.interpolate(shapelyLine.length/2).to_wkt()
    # write point features to layer
    feature = ogr.Feature(out_lyr.GetLayerDefn())
    point = ogr.CreateGeometryFromWkt(midPoint)
    feature.SetGeometry(point)
    out_lyr.CreateFeature(feature)
    feature.Destroy()

# Destroy the data source to free resources
outDataSource.Destroy() 
