Skip to main content

Convert LineString to Polygon using Python

I am trying to convert geometry from type: LineString into type:Polygon where each line of data is a list of coordinates and at the same time I am trying to add 2 miles radius for each coordinates within list as buffer and output should be polygons. Please see sample data as below:

{

"type": "FeatureCollection",

"name": "Sample_lines",

"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },

"features": [

{ "type": "Feature", "properties": { "OBJECTID": 123, "GLOBAL_ID": "8CAB8A", "IDENT": "41",  "TYPE": "N",  "Shape__Length": 0.2733 }, "geometry": { "type": "LineString", "coordinates": [ [ -112.400011882673994, 41.0833390325461, 0.0 ], [ -112.56667894652, 41.300005042600802, 0.0 ] ] } },

{ "type": "Feature", "properties": { "OBJECTID": 124, "GLOBAL_ID": "9ACAVB", "IDENT": "45",  "TYPE": "N",  "Shape__Length": 0.1573 }, "geometry": { "type": "LineString", "coordinates": [ [ -112.56667894652, 41.300005042600802, 0.0 ], [ -112.650011982188005, 41.4333400501312, 0.0 ] ] } },

{ "type": "Feature", "properties": { "OBJECTID": 125, "GLOBAL_ID": "5ACBFA", "IDENT": "48",  "TYPE": "N",  "Shape__Length": 0.4599 }, "geometry": { "type": "LineString", "coordinates": [ [ -112.650011982188005, 41.4333400501312, 0.0 ], [ -113.100012081374004, 41.5000060205737, 0.0 ] ] } }

]

}

This is what I have tried so far and it is throwing an error as follows:
buffer = gpd.points_from_xy([(x,y)]) TypeError: points_from_xy() missing 1 required positional argument: 'y'.

Please see below code what I attempted to do:


import json
import geopandas as gpd
from shapely.geometry import MultiPolygon

# Load geojson 
with open('Sample_lines.geojson') as f:
    gj = json.load(f)

features = []
for f in gj['features']:

    coords = f['geometry']['coordinates']
    print(coords[0][0])
    print(coords[0][1])
    print(tuple(coords[0]))
    print(coords)
    #quit()
    # Buffer points along line
    buffers = []
    for x,y,z in tuple(coords):
        buffer = gpd.points_from_xy([(x,y)])
        buffer = buffer.to_crs(epsg=4326)
        buffer = buffer.buffer(2)
        buffers.append(buffer)
        
    # Create multipolygon from buffers    
    mpolygon = MultiPolygon(buffers)
    
    # Create feature
    features.append(
        {'geometry': gpd.GeoSeries(mpolygon).__geo_interface__,
         'properties': f['properties']}
    )

# Output new GeoJSON    
new_gj = {
  "type": "FeatureCollection",
  "features": features
}

# output in .GeoJSON

with open('lines2Polygon.geojson','w') as f:
    dump(new_gj, f)

print(new_gj)

Where am I going wrong here? Thank you in Advance for your time and support.



source https://stackoverflow.com/questions/77594571/convert-linestring-to-polygon-using-python

Comments

Popular posts from this blog

Prop `className` did not match in next js app

I have written a sample code ( Github Link here ). this is a simple next js app, but giving me error when I refresh the page. This seems to be the common problem and I tried the fix provided in the internet but does not seem to fix my issue. The error is Warning: Prop className did not match. Server: "MuiBox-root MuiBox-root-1" Client: "MuiBox-root MuiBox-root-2". Did changes for _document.js, modified _app.js as mentioned in official website and solutions in stackoverflow. but nothing seems to work. Could someone take a look and help me whats wrong with the code? Via Active questions tagged javascript - Stack Overflow https://ift.tt/2FdjaAW

How to show number of registered users in Laravel based on usertype?

i'm trying to display data from the database in the admin dashboard i used this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count(); echo $users; ?> and i have successfully get the correct data from the database but what if i want to display a specific data for example in this user table there is "usertype" that specify if the user is normal user or admin i want to user the same code above but to display a specific usertype i tried this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count()->WHERE usertype =admin; echo $users; ?> but it didn't work, what am i doing wrong? source https://stackoverflow.com/questions/68199726/how-to-show-number-of-registered-users-in-laravel-based-on-usertype

Why is my reports service not connecting?

I am trying to pull some data from a Postgres database using Node.js and node-postures but I can't figure out why my service isn't connecting. my routes/index.js file: const express = require('express'); const router = express.Router(); const ordersCountController = require('../controllers/ordersCountController'); const ordersController = require('../controllers/ordersController'); const weeklyReportsController = require('../controllers/weeklyReportsController'); router.get('/orders_count', ordersCountController); router.get('/orders', ordersController); router.get('/weekly_reports', weeklyReportsController); module.exports = router; My controllers/weeklyReportsController.js file: const weeklyReportsService = require('../services/weeklyReportsService'); const weeklyReportsController = async (req, res) => { try { const data = await weeklyReportsService; res.json({data}) console