আরকম্যাপের লেআউট ভিউতে বর্তমান ডেটাফ্রেম এক্সটেন্টস থেকে শেফফাইল তৈরি করছেন?


11

লেআউট ভিউতে বর্তমান ডেটাফ্রেম এক্সটেন্টস থেকে একটি শেফফাইল তৈরির জন্য আর্কজিআইএস 10 সরঞ্জামটি কোথায়?

চারপাশে দেখেছি এবং যে ক্লোজের জিনিসটি আমি সন্ধান করতে পারি তা হ'ল ডেটা ড্রাইভ পৃষ্ঠাগুলির অধীনে টুলবক্সের গ্রিড / স্ট্রিপ ম্যাপ সূচক সরঞ্জাম।

আমি কেবলমাত্র কোনও নির্দিষ্ট স্কেল / পৃষ্ঠা সেটআপের জন্য ডেটা ফ্রেমের (লেআউটে ভিউতে) ভিত্তিতে একটি একক বহুভুজ আয়তক্ষেত্রাকার shp ফাইল তৈরি করতে সক্ষম হতে চাই ।


আপনি কি ম্যাপবুক সরঞ্জামটি ব্যবহার করছেন, বা কেবল একটি বিন্যাস দর্শনের জন্য একটি shp বহুভুজ তৈরি করতে চান?
আর্টওয়ার্ক 21

মাত্র একটি বিন্যাস দেখার জন্য
সিরজিও

এটি যদি কোনও ইনসেট মানচিত্রের জন্য হয় তবে ডেটা ফ্রেমের বৈশিষ্ট্যগুলিতে ব্যাপ্তি সূচক বিকল্পটি পরীক্ষা করে দেখুন। যদি এটি অন্য কারণে হয় তবে আমি কেবল এটির জন্য একটি অজগর স্ক্রিপ্ট লিখব।
এমলাউরি

এই এমলউরির জন্য অজগর স্ক্রিপ্ট লিখতে কত সময় লাগবে? এটি আর্কজিআইএস থেকে অটোক্যাডে রাস্টার ইমেজ রফতানি করার জন্য এবং ভবিষ্যতে অনেক বার এর প্রয়োজন হবে। আমি সবেমাত্র ভিএস এক্সপ্রেস ডাউনলোড করেছি এবং কার্কের সি # শট দেব তবে এই জিনিসগুলির সাথে কাজ করা আমার জ্ঞানের ভিত্তির বাইরে।
সিরজিও

উত্তর:


11

আমি আর্কজিআইএস ১০-এ একটি টুলবক্সের মাধ্যমে এটি করার জন্য একটি সরঞ্জাম তৈরি করেছি sc স্ক্রিপ্টিংয়ের চেয়ে এটি ব্যবহার করা সহজ। আপনি এটি এখানে ডাউনলোড করতে পারেন । কেবলমাত্র আপনার এমএক্সডি (গুলি) একটি ফোল্ডারে অনুলিপি করুন এবং সেই ফোল্ডারে সরঞ্জামটি চালান। এটি সেই ফোল্ডারে প্রতিটি এমএক্সডির সমস্ত মূল এক্সটেন্ট যুক্ত একটি শেফফাইল তৈরি করবে।


7

এই সি # কোডটি আর্কম্যাপের জন্য একটি অ্যাড-ইন তৈরি করতে ব্যবহৃত হতে পারে ।

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Windows.Forms;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.ArcMapUI;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.Geodatabase;

namespace MainToolsAddin
{
    public class Extent2ShapefileButton : ESRI.ArcGIS.Desktop.AddIns.Button
    {
        public Extent2ShapefileButton()
        {
        }

        protected override void OnClick()
        {
            try
            {
                var polygon = GetExtentPolygon(ArcMap.Document.FocusMap);
                //IGraphicsContainer gc = ArcMap.Document.FocusMap as IGraphicsContainer;
                //var element = new PolygonElementClass() as IElement;
                //element.Geometry = polygon;
                //((IFillShapeElement)element).Symbol = ((IDocumentDefaultSymbols)ArcMap.Document).FillSymbol;
                //gc.AddElement(element,0);
                //((IActiveView)ArcMap.Document.FocusMap).Refresh();
                WritePolygon(@"C:\projects\forums\extents.shp", polygon);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        protected override void OnUpdate()
        {
        }

        private void WritePolygon(string shpFilePath, IGeometry geom)
        {
            var featClass = OpenShapeFile(shpFilePath);
            if (featClass == null)
                featClass = CreateShapeFile(shpFilePath, geom);
            IFeature feat = featClass.CreateFeature();
            feat.Shape = geom;
            feat.Store();
        }
        private IFeatureClass CreateShapeFile(string shpFilepath, IGeometry geom)
        {
            System.IO.FileInfo fi = new FileInfo(shpFilepath);
            var wsf = Activator.CreateInstance(Type.GetTypeFromProgID("esriDataSourcesFile.ShapefileWorkspaceFactory")) as IWorkspaceFactory;
            var fws = wsf.OpenFromFile(fi.DirectoryName, 0) as IFeatureWorkspace;
            IFieldsEdit flds = new FieldsClass();
            flds.AddField(MakeField("ObjectID", esriFieldType.esriFieldTypeOID,0));
            IGeometryDefEdit geomDef = new GeometryDefClass();
            geomDef.GeometryType_2 = geom.GeometryType;
            geomDef.SpatialReference_2 = geom.SpatialReference;
            var shpField = MakeField("Shape", esriFieldType.esriFieldTypeGeometry, 0) as IFieldEdit;
            shpField.GeometryDef_2 = geomDef;
            flds.AddField(shpField);
            flds.AddField(MakeField("Name", esriFieldType.esriFieldTypeString, 16));
            string fcName = fi.Name;
            if (fcName.ToUpper().EndsWith(".SHP"))
                fcName = fcName.Substring(0, fcName.LastIndexOf("."));

            var fc = fws.CreateFeatureClass(fcName, flds, null, null, esriFeatureType.esriFTSimple, "Shape", "");
            return fc;
        }

        private IField MakeField(string name, esriFieldType fType, int length)
        {
            IFieldEdit fld = new FieldClass();
            fld.Name_2 = name;
            fld.Type_2 = fType;
            if (length > 0 && fType == esriFieldType.esriFieldTypeString)
                fld.Length_2 = length;
            return fld;
        }

        private IFeatureClass OpenShapeFile(string shpFilepath)
        {
            var wsf = Activator.CreateInstance(Type.GetTypeFromProgID("esriDataSourcesFile.ShapefileWorkspaceFactory")) as IWorkspaceFactory;

            System.IO.FileInfo fi = new FileInfo(shpFilepath);
            string name = fi.Name.ToUpper().EndsWith(".SHP") ? fi.Name.Substring(0, fi.Name.LastIndexOf(".")) : fi.Name;
            string fileName = String.Format("{0}.shp", name);
            if (File.Exists(System.IO.Path.Combine(fi.DirectoryName,fileName)))
            {
                var fws = wsf.OpenFromFile(fi.DirectoryName, 0) as IFeatureWorkspace;
                return fws.OpenFeatureClass(name);
            }
            else
                return null;
        }

        private IPolygon GetExtentPolygon(IMap map)
        {
            // A polygon is returned since the dataframe might be rotated
            var grphCont = ArcMap.Document.PageLayout as IGraphicsContainer;
            var mapFrame = grphCont.FindFrame(map) as IMapFrame;
            var av = map as IActiveView;
            var extent = mapFrame.MapBounds.Envelope;
            ISegmentCollection sc = new PolygonClass() as ISegmentCollection;
            sc.SetRectangle(extent);

            var center = ((IArea)extent).Centroid;
            var angle = -(av.ScreenDisplay.DisplayTransformation.Rotation / 180.0 * Math.PI);
            ((ITransform2D)sc).Rotate(center, angle);
            return (IPolygon)sc;                        
        }
    }
}

আপনি যখন ভিজ্যুয়াল স্টুডিওতে একটি নতুন অ্যাড-ইন প্রকল্প তৈরি করেন, আপনার কিছু বিকল্প দেখতে হবে। আমি নিশ্চিত নই যে এটি ভিজ্যুয়াল স্টুডিও এক্সপ্রেসের সাথে কাজ করে, বা আরকোবজেক্টস এসডিকে ইনস্টল করা দরকার কিনা।

এখানে চিত্র বর্ণনা লিখুন


ধন্যবাদ কার্ক, নতুন আরকজিআইএস অ্যাড-ইন উইজার্ডটি ব্যবহার করে এটি আমার প্রথম প্রচেষ্টা হবে। প্রথম প্রশ্ন, এটিতে বলা হয়েছে "১. ভিজ্যুয়াল স্টুডিও শুরু করুন" ভিজুয়াল স্টুডিওটি কোথায়? একটি ডাউনলোড? আমি একটি প্রোগ্রামিং ঘনত্ব তাই আলতো করে ব্যাখ্যা করুন।
সিরজিও

আমি এটি কখনও ব্যবহার করি নি, তবে আপনার এখানে ভিজ্যুয়াল স্টুডিওর বিনামূল্যে ("এক্সপ্রেস") সংস্করণটি ডাউনলোড করতে সক্ষম হওয়া উচিত । এই লিঙ্কটি বলে ... "ভিজ্যুয়াল স্টুডিওর এক্সপ্রেস সংস্করণগুলির সীমাবদ্ধতার কারণে ফ্রেমওয়ার্কের সমস্ত বৈশিষ্ট্য এক্সপ্রেস সংস্করণগুলিতে সমর্থিত নয়।" তারা কোন বৈশিষ্ট্যটি যদিও তা বলে না ।
কर्क কুইকেনডাল

ঠিক আছে, আমি 700 এমবি ভিএস এক্সপ্রেস ডাউনলোড করেছি এবং এখন এটি 3.4gb স্টাফ ইনস্টল করছে ... আরকিজিআইএস অ্যাড-ইন উইজার্ডের আর কী দরকার?
সিরজিও

আমি নিশ্চিত নই, তবে আপনার "মাইক্রোসফ্ট কাঠামোর জন্য আরকোবজেক্টস এসডিকে" ইনস্টল করার দরকারও থাকতে পারে। আমি এটি আমার মেশিনে ইনস্টল করেছি। এটি ছাড়া কখনও অ্যাড-ইন তৈরি করার চেষ্টা করেন নি।
কर्क কুইকেনডাল

ভাল আমি পদক্ষেপ 2 এ পৌঁছেছি "ফাইল ক্লিক করুন, নতুন নির্বাচন করুন, এবং প্রকল্প ক্লিক করুন। নতুন প্রকল্প ডায়ালগ বক্স খোলে।" তবে পদক্ষেপ 3 "প্রকল্পের ধরণের অধীনে, ভিজ্যুয়াল বেসিক বা ভিজ্যুয়াল সি # প্রকল্প নোডটি প্রসারিত করুন, আর্কজিআইএস নোডটি প্রসারিত করুন এবং ডেস্কটপ অ্যাড-ইন ক্লিক করুন।" কোনও অর্থহীনতা
সিরজিও

3

ডেটাফ্রেম পরিধি থেকে বহুভুজ তৈরি করার জন্য এখানে একটি বেসিক পাইথন স্ক্রিপ্ট। আপনার প্রয়োজন অনুসারে চলক সামঞ্জস্য করুন। আপনি যদি কেবল একটি সাধারণ মাত্রার বহুভুজ চান তবে আপনি 'কীর্তি', 'স্কেল' এবং 'পৃষ্ঠা' থেকে মুক্তি পেতে পারেন। ('পৃষ্ঠা' কেবল তখনই কাজ করবে যদি আপনি ডেটাচালিত পৃষ্ঠাগুলি ব্যবহার করছেন)।

doc = arcpy.mapping.MapDocument("current")
df = arcpy.mapping.ListDataFrames(doc)[0] #First Dataframe
extent = df.extent
fc = arcpy.GetParameterAsText(0)
feat = arcpy.GetParameterAsText(1)
scale = arcpy.GetParameterAsText(2)
Page = doc.dataDrivenPages.currentPageID

# Create Extent Polygon
array = arcpy.Array()
array.add(extent.lowerLeft)
array.add(extent.lowerRight)
array.add(extent.upperRight)
array.add(extent.upperLeft)
array.add(extent.lowerLeft)
polygon = arcpy.Polygon(array)
cursor = arcpy.da.InsertCursor(fc,["SHAPE@","Page","Feature","Scale"])
cursor.insertRow([polygon, Page, feat, scale])
del cursor

2

আপনি বহুভুজ সরঞ্জামের মানচিত্র এক্সটেনশন ব্যবহার করতে পারেন :

বর্তমান মানচিত্রের পরিমাণ থেকে বহুভুজ বৈশিষ্ট্য তৈরি করে। বিন্যাসে সীমা মানচিত্রের ডেটা ফ্রেমের হবে, ডেটা দেখার ফলে ফলাফলটি সীমাটি অ্যাপ্লিকেশন উইন্ডোর পরিমাণের হবে। ডেটা ফ্রেম রোটেশন সমর্থিত নয়।


1

এই ডেটা ফ্রেম তৈরি করুন বহুভুজ সরঞ্জামটি আর্কজিআইএস ডেস্কটপ 10.3 এ কাজ করে

অ্যাড-ইন লোড করুন, তারপরে একটি সরঞ্জাম বার কাস্টমাইজ করুন (বা একটি নতুন তৈরি করুন) এবং এটি যুক্ত করুন।


0

আপনার যদি কেবল একবার এটি করতে হয়, আপনি ডেটা ফ্রেম বৈশিষ্ট্য উইন্ডোতে এক্সটেন্টগুলি খুঁজে পেতে পারেন। তারপরে আপনি একটি নতুন শেফফাইল তৈরি করতে পারেন, একটি নতুন বৈশিষ্ট্য যুক্ত করতে পারেন, ডান ক্লিক করুন এবং কোণগুলির সাথে সম্পর্কিত স্থানাঙ্কগুলিতে ম্যানুয়ালি প্রবেশ করতে চয়ন করতে পারেন।

অন্যথায় @ আর্টওয়ার্ক 21 থেকে স্ক্রিপ্টটি নিয়ে যান।


0

আমি একটি প্রোগ্রাম সহ এই এনওএএ পোর্টালটি দেখছি।
স্ক্রিপ্ট - শেফফাইলে এক্সটেন্টস
আমি জানি আমি এটি কোথাও দেখেছি। তবুও খুঁজছি। সম্পদ কেন্দ্রে
কয়েকটি ডিডিপি সরঞ্জাম এখানে রয়েছে


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