পাইথন দিয়ে বর্গাকার গ্রিড বহুভুজ আকৃতি তৈরি করতে চান?


9

আমার নীচের সমন্বয়গুলি রয়েছে

minx, maxx, miny ,maxy = 448262.080078, 450360.750122, 6262492.020081, 6262938.950073

আমি পাইথন ব্যবহার করে 1 মিটার আকারের একটি বর্গ গ্রিড তৈরি করতে চাই।

import math


minx,maxx,miny,maxy = 448262.080078, 450360.750122, 6262492.020081, 6262938.950073
size = 1

def set_bbox(minx, maxx, miny, maxy, distx, disty):
    nx = int(math.ceil(abs(maxx - minx)/distx))
    ny = int(math.ceil(abs(maxy - miny)/disty))
    new_maxx = minx + (nx*distx)
    new_miny = maxy - (ny*disty)
    return ((minx, new_maxx, new_miny, maxy),ny,nx)

# shift the bottom (right - down)
coord, ny, nx = set_bbox(minx,maxx,miny,maxy,size,size)
# left-up origin
origin = coord[0],coord[3]
# number of tiles
ncell = ny*nx

এটি কি কোনও নির্দিষ্ট জিআইএস প্ল্যাটফর্মের সাথে সংযুক্ত বা কোনও নির্দিষ্ট আউটপুট বিন্যাস ছাড়াই খাঁটি অজগরটিতে এটি করার প্রয়োজনীয়তা রয়েছে (যেমন, শেফফাইল, টেক্সটফিল ইত্যাদি)

ধন্যবাদ @ ড্যান, আমি খাঁটি অজগরটিতে পারফর্ম করতে চাই এবং আউটপুটটি শেফফাইল ফর্ম্যাটে থাকবে
জিয়ান্নি

আর্কম্যাপের লাইসেন্সের আর্কআইএনফো স্তরের ফিশনেট সরঞ্জাম রয়েছে তবে আপনি কীভাবে আকৃতিটি তৈরি করতে চান তা নির্দেশ করেননি।

দুঃখিত আমি বাণিজ্যিক সফ্টওয়্যার ব্যবহার করি না। আমি খাঁটি ভাষা জাভা, পাইথন, সি ++ এ প্রোগ্রাম পছন্দ করি।
জিয়ান্নি

1
তবে আপনি জিডিএল / ওজিআর ( পিপিপিপিথন.আর / পিপিআই / জিডিএল ) বা পাইসপি ( পিপিপিপিথন.আর.পিআইপি / পিআইএসপি ) এর মতো কোনও লাইব্রেরি ব্যবহার করতে আপত্তি করেন না ?
স্নোরফলোরপাগাস

উত্তর:


11

নিম্নলিখিত স্ক্রিপ্টটি জিডিএল এবং পাইথন দিয়ে কাজ করবে:

import os, sys
import ogr
from math import ceil

def main(outputGridfn,xmin,xmax,ymin,ymax,gridHeight,gridWidth):

    # convert sys.argv to float
    xmin = float(xmin)
    xmax = float(xmax)
    ymin = float(ymin)
    ymax = float(ymax)
    gridWidth = float(gridWidth)
    gridHeight = float(gridHeight)

    # get rows
    rows = ceil((ymax-ymin)/gridHeight)
    # get columns
    cols = ceil((xmax-xmin)/gridWidth)

    # start grid cell envelope
    ringXleftOrigin = xmin
    ringXrightOrigin = xmin + gridWidth
    ringYtopOrigin = ymax
    ringYbottomOrigin = ymax-gridHeight

    # create output file
    outDriver = ogr.GetDriverByName('ESRI Shapefile')
    if os.path.exists(outputGridfn):
        os.remove(outputGridfn)
    outDataSource = outDriver.CreateDataSource(outputGridfn)
    outLayer = outDataSource.CreateLayer(outputGridfn,geom_type=ogr.wkbPolygon )
    featureDefn = outLayer.GetLayerDefn()

    # create grid cells
    countcols = 0
    while countcols < cols:
        countcols += 1

        # reset envelope for rows
        ringYtop = ringYtopOrigin
        ringYbottom =ringYbottomOrigin
        countrows = 0

        while countrows < rows:
            countrows += 1
            ring = ogr.Geometry(ogr.wkbLinearRing)
            ring.AddPoint(ringXleftOrigin, ringYtop)
            ring.AddPoint(ringXrightOrigin, ringYtop)
            ring.AddPoint(ringXrightOrigin, ringYbottom)
            ring.AddPoint(ringXleftOrigin, ringYbottom)
            ring.AddPoint(ringXleftOrigin, ringYtop)
            poly = ogr.Geometry(ogr.wkbPolygon)
            poly.AddGeometry(ring)

            # add new geom to layer
            outFeature = ogr.Feature(featureDefn)
            outFeature.SetGeometry(poly)
            outLayer.CreateFeature(outFeature)
            outFeature.Destroy

            # new envelope for next poly
            ringYtop = ringYtop - gridHeight
            ringYbottom = ringYbottom - gridHeight

        # new envelope for next poly
        ringXleftOrigin = ringXleftOrigin + gridWidth
        ringXrightOrigin = ringXrightOrigin + gridWidth

    # Close DataSources
    outDataSource.Destroy()


if __name__ == "__main__":

    #
    # example run : $ python grid.py <full-path><output-shapefile-name>.shp xmin xmax ymin ymax gridHeight gridWidth
    #

    if len( sys.argv ) != 8:
        print "[ ERROR ] you must supply seven arguments: output-shapefile-name.shp xmin xmax ymin ymax gridHeight gridWidth"
        sys.exit( 1 )

    main( sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6], sys.argv[7] )

6

এই পাইথন স্ক্রিপ্টটি ব্যবহারকারীর দ্বারা প্রস্তাবিত পাইশপ লাইব্রেরি ব্যবহার করে 6044:

import shapefile as shp
import math

minx,maxx,miny,maxy = 448262.080078, 450360.750122, 6262492.020081, 6262938.950073
dx = 100
dy = 100

nx = int(math.ceil(abs(maxx - minx)/dx))
ny = int(math.ceil(abs(maxy - miny)/dy))

w = shp.Writer(shp.POLYGON)
w.autoBalance = 1
w.field("ID")
id=0

for i in range(ny):
    for j in range(nx):
        id+=1
        vertices = []
        parts = []
        vertices.append([min(minx+dx*j,maxx),max(maxy-dy*i,miny)])
        vertices.append([min(minx+dx*(j+1),maxx),max(maxy-dy*i,miny)])
        vertices.append([min(minx+dx*(j+1),maxx),max(maxy-dy*(i+1),miny)])
        vertices.append([min(minx+dx*j,maxx),max(maxy-dy*(i+1),miny)])
        parts.append(vertices)
        w.poly(parts)
        w.record(id)

w.save('polygon_grid')

দ্রষ্টব্য: এর পরিমাণের সাথে 1 মাপের একটি বর্গ গ্রিড প্রায় 1 মিলিয়ন বহুভুজ সমন্বিত একটি স্তরের সমান এবং তাই স্ক্রিপ্টের কার্যকারিতা সংবেদনশীলভাবে হ্রাস পায়।


1

এই প্রশ্নের উত্তর আগে থেকেই দেওয়া হয়েছে তবে আমি সুদৃ and় এবং ফিওনা লাইব্রেরি ব্যবহার করে আরও একটি সমাধান যুক্ত করছি:

import fiona
from shapely.geometry import mapping, LineString, MultiLineString

file = 'input.shp'
with fiona.open(file, 'r') as ds_in:
    num_tiles = 5
    schema = {
    "geometry": "MultiLineString",
    "properties": {"id": "int"}
     }
minx, miny, maxx, maxy = ds_in.bounds
dx = (maxx - minx) / num_tiles
dy = (maxy - miny) / num_tiles

lines = []
for x in range(num_tiles + 1):
    lines.append(LineString([(minx + x * dx, miny), (minx + x * dx, maxy)]))
for y in range(num_tiles + 1):
    lines.append(LineString([(minx, miny + y * dy), (maxx, miny + y * dy)]))
grid = MultiLineString(lines)
out = 'gridtest.shp'
with fiona.open(out, 'w', driver=ds_in.driver, schema=schema, crs=ds_in.crs) as ds_dst:
    ds_dst.write({'geometry': mapping(grid), "properties": {"id": 0}})

-1

কিউজিসে ফিশনেট গ্রিড শেফিল তৈরির উত্তর ? কিউজিআইএস প্রসেসিং টুলবক্সে গ্রিড বিকল্প তৈরি করে shows


ওপি জানিয়েছে যে সে কোনও সফ্টওয়্যার না দিয়ে খাঁটি পাইথনে উদাহরণ পছন্দ করে
হাসি

অন্যান্য উত্তরগুলি আমদানি গ্রন্থাগারগুলি দেওয়া, কিউআইজিআইএস মডিউলগুলি আমদানি করা একটি জিইউআই এড়ানোর জন্য একটি বৈধ উপায় forward এই উত্তরে লাইক করুন gis.stackexchange.com/questions/79916/…
user965586

অন্য উত্তরগুলি কোড সরবরাহ করে তাই আপনার যদি এটিও হয় তবে আমি মনে করি এটি আরও ভালভাবে গ্রহণ করা হবে।
পলিজিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.