ArcMap के लेआउट दृश्य में वर्तमान डेटाफ्रेम extents से आकार बनाने?


11

आर्कजीआईएस 10 उपकरण लेआउट दृश्य में वर्तमान डेटाफ्रेम extents से एक आकृति बनाने के लिए कहां है?

चारों ओर देखा है और कोठरी बात मैं पा सकता है टूलबॉक्स ग्रिड / स्ट्रिप मैप इंडेक्स टूल डेटा ड्राइव पेज के तहत।

मैं बस किसी भी पैमाने / पृष्ठ सेटअप के लिए डेटा फ्रेम (लेआउट दृश्य में) के आधार पर एक एकल बहुभुज आयत shp फ़ाइल बनाने में सक्षम होना चाहता हूं ।


क्या आप मैपबुक टूल का उपयोग कर रहे हैं, या केवल एक लेआउट दृश्य के लिए एक पीपी बहुभुज बनाना चाहते हैं?
कलाकृति 21

सिर्फ एक लेआउट दृश्य के लिए
sirgeo

यदि यह एक इनसेट मैप के लिए है, तो डेटा फ़्रेम गुणों में सीमा सूचक विकल्प देखें। यदि यह अन्य कारणों के लिए है, तो मैं इसके लिए एक अजगर स्क्रिप्ट लिखूंगा।
MLowry

इस विधायिका के लिए अजगर की पटकथा लिखने में कितना समय लगेगा? यह आर्कगिस से ऑटोकैड के लिए रैस्टर इमेज एक्सपोर्ट लेने के लिए है और भविष्य में कई बार इसकी जरूरत होगी। मैंने अभी वीएस एक्सप्रेस को डाउनलोड किया है और किर्क के सी # को एक शॉट दूंगा लेकिन इस सामान के साथ काम करना मेरे ज्ञान के आधार से परे है।
सेर्जियो

जवाबों:


11

मैंने आर्कजीआईएस 10. में टूलबॉक्स के माध्यम से ऐसा करने के लिए एक उपकरण बनाया। यह स्क्रिप्टिंग की तुलना में उपयोग करना आसान हो सकता है। आप इसे यहाँ डाउनलोड कर सकते हैं । बस अपने mxd (s) को एक फ़ोल्डर में कॉपी करें और उस फ़ोल्डर पर टूल चलाएं। यह उस फ़ोल्डर में प्रत्येक mxd के सभी मुख्य extents युक्त एक आकृति का निर्माण करेगा।


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;                        
        }
    }
}

जब आप विज़ुअल स्टूडियो के साथ एक नया ऐड-इन प्रोजेक्ट बनाते हैं, तो आपको इस तरह के कुछ विकल्प देखने चाहिए। मुझे यकीन नहीं है कि यह विजुअल स्टूडियो एक्सप्रेस के साथ काम करता है, या आर्कओबजेक्ट्स एसडीके को स्थापित करने की आवश्यकता है या नहीं।

यहाँ छवि विवरण दर्ज करें


धन्यवाद Kirk, यह मेरा पहला प्रयास होगा नए ArcGIS ऐड-इन्स विज़ार्ड का उपयोग करके। पहला सवाल, यह कहता है "1. विज़ुअल स्टूडियो शुरू करें" विज़ुअल स्टूडियो कहाँ है? एक डाउनलोड? मैं एक प्रोग्रामिंग डाँस हूँ इसलिए कृपया धीरे से समझाएँ।
19ge पर sirgeo

मैंने इसका कभी उपयोग नहीं किया है, लेकिन आपको यहां विजुअल स्टूडियो का मुफ्त ("एक्सप्रेस") संस्करण डाउनलोड करने में सक्षम होना चाहिए । यह लिंक कहता है "... दृश्य स्टूडियो के एक्सप्रेस संस्करणों में सीमाओं के कारण, फ्रेमवर्क की सभी विशेषताएं एक्सप्रेस संस्करणों में समर्थित नहीं हैं।" वे यह नहीं कहते कि कौन सी सुविधाएँ हैं।
कर्क कुक्केंडल

ठीक है, मैंने 700mb वीएस एक्सप्रेस डाउनलोड किया और अब यह 3.4 जीबी का सामान स्थापित कर रहा है ... आर्कगिस ऐड-इन विज़ार्ड को और क्या चाहिए?
सेर्जियो

मुझे निश्चित नहीं है, लेकिन आपको "आर्कओबजेक्ट्स एसडीके को Microsoft फ्रेमवर्क के लिए" स्थापित करने की आवश्यकता हो सकती है। मैंने इसे अपनी मशीन पर स्थापित किया है। हालांकि इसके बिना ऐड-इन बनाने की कोशिश कभी नहीं की गई।
किर्क कुएकेन्डल

अच्छी तरह से मुझे चरण 2 पर क्लिक करना है "फ़ाइल पर क्लिक करें, नया चुनें, और परियोजना पर क्लिक करें। नया प्रोजेक्ट संवाद बॉक्स खुलता है।" लेकिन चरण 3 "प्रोजेक्ट प्रकार के तहत, Visual Basic या Visual C # प्रोजेक्ट नोड का विस्तार करें, ArcGIS नोड का विस्तार करें, और Add-Ins पर क्लिक करें।" कोई मतलब नहीं ... स्क्रीन शॉट यहाँ: i.imgur.com/jHuJ6.png
sirgeo

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

आप बहुउद्देशीय टूल से मैप एक्स्टेंट का उपयोग कर सकते हैं :

वर्तमान मानचित्र सीमा से बहुभुज सुविधा बनाता है। लेआउट में सीमा मानचित्र डेटा फ़्रेम की होगी, डेटा दृश्य में यह परिणामी सीमा एप्लिकेशन विंडो सीमा की होगी। डेटा फ़्रेम रोटेशन समर्थित नहीं है।



0

यदि आपको केवल एक बार करने की आवश्यकता है, तो आप डेटा फ़्रेम गुण विंडो में विस्तार पा सकते हैं। फिर आप एक नई आकृति बना सकते हैं, एक नई सुविधा जोड़ सकते हैं, राइट-क्लिक करें और कोनों के अनुरूप निर्देशांक दर्ज कर सकते हैं।

अन्यथा @ कलाकृति 21 से स्क्रिप्ट के साथ जाओ।


0

मैं इस NOAA पोर्टल को एक कार्यक्रम के साथ देखता हूं।
स्क्रिप्ट - आकार को विस्तार देता है
मुझे पता है कि मैंने कहीं देखा है। अभी भी देख रहा है।
यहाँ संसाधन केंद्र पर ddp उपकरण के एक जोड़े हैं।


मैं 9.3 में से एक का उपयोग करता था किसी कारण से यह 10 में काम नहीं करता है
sirgeo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.