Aphelion



برخی مواقع شما توابع رستری را در سرور خود تعریف می کنید و آن ها را به همراه ImageService خود پابلیش میکنید تا کاربر بتواند از آن تابع برای آن سرویس استفاده کند. در مواقعی که اینکار را بخواهید به صورت اتوماسیون با کد پایتون بنویسید، می توانید هنگامی که فایل sddraft سرویس خود را ساختید، می توانید این فایل را که محتوای آن xml است فراخوانی کنید، و سپس تغییرات زیر را در آن اعمال کنید:


        RasterFunction = "C:\\Classified.rft.xml,None"
        descriptions = doc.getElementsByTagName('PropertySetProperty')
        for desc in descriptions:
            keynodes = desc.getElementsByTagName('Key')
            for keynode in keynodes:
                if keynode in keynodes:
                    if keynode.firstChild.nodeValue == 'rasterFunctions':
                        valnodes = desc.getElementsByTagName('Value')
                        for valnode in valnodes:
                            if valnode.firstChild == None:
                                valnode.appendChild(doc.createTextNode(RasterFunction))
                            else:
                                valnode.firstChild.replaceWholeText(RasterFunction)


برخی مواقع نیاز است که به وب سرویسی دسترسی پیدا کنید و داده های آن را گرفته و ذخیره کنید. بدین منظور می توانید از کد زیر استفاده کنید. در این کد، ابتدا از طریق وب سرویسی یک Token برای دسترسی به اطلاعات در اختیار شما قرار میگیرد. سپس از آن Token استفاده می شود تا داده ها به صورت json دریافت شوند. در نهایت با استفاده از کتابخانه pyodbc اطلاعات json در جدولی در دیتابیس SQL Server ذخیره می شود.

#!/usr/bin/env python
# coding=utf-8
import requests
import pyodbc
import datetime
 
# Get Token
url = "http://token.webservice.com/sample1"
data = '{"username":"username-t","password":"password-t"}'
headers = {'content-type': 'application/json'}
r = requests.post(url = url, data = data, headers=headers)
token = r.json()['token']

# Read data
url = "
http://data.webservice.com/sample2"
headers = {'Authorization': 'Bearer ' + str(token)}
r = requests.post(url = url, headers=headers)
data_list = r.json()

# Write to DB
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=address\SQLEXPRESS,port;DATABASE=SampleDB;UID=username;PWD=password')
cursor = conn.cursor()
for record in data_list:
    d = datetime.datetime.fromtimestamp(int(str(record['data_time'])[:-3]))
    cursor.execute("INSERT INTO Data_Table (type,station,farsi_name,date_temp,temp) values (?,?,?,?,?)",                   ('Synoptic',record['station'],record['farsi_station'],d,record['present_temperature_c'])))
    conn.commit()
cursor.close()
conn.close()


برای ارسال ایمیل از طریق زبان برنامه نویسی پایتون می توانید از تابع زیر استفاده کنید:

def send_email(user, pwd, recipient, subject, body):
    import smtplib

    FROM = user
    TO = recipient if isinstance(recipient, list) else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(user, pwd)
        server.sendmail(FROM, TO, message)
        server.close()
        print 'Email was sent.'
    except:
        print "Failed to send the mail."

لازم به ذکر است که بایستی در تنظیمات ایمیلتان، گزینه Less secure apps access را در بخش Security فعال کنید.

مشکلی که بعضی مواقع ممکن است در کار با enterprise geodatabase به وجود بیاید. در این مشکل هنگامی که میخواهید یک موزاییک بسازید، نامی که به عنوان نام موزاییک خود انتخاب میکنید (به طور مثال RM) ممکن است در دیتابیس رزرو شده باشد. این اتفاق به طور مثال زمانی می افتد که شما با استفاده از دستورات sql اقدام به پاک کردن موزاییک می کنید در صورتی که بهتر است اینکار را از طریق ArcSDE انجام دهید. در چنین مواقعی زمانی که میخواهید موزاییک مدنظر را بسازید، با خطای زیر مواجه میشوید:

Table not registered [GEODB.DBO.AMD_RM_BND]
Table not registered [GEODB.DBO.AMD_RM_CAT]
Could not create mosaic dataset. Possible invalid or reserved mosaic name specified.
Table not registered [GEODB.DBO.AMD_RM_LOG]
Table not registered [GEODB.DBO.AMD_RM_ART]

برای حل این مسئله بایستی با استفاده از SQL Server studio یا Oracle به ژئودیتابیس خود متصل شوید. سپس بر روی جدول GDB_ITEMS کوئری زیر را وارد میکنید:

DELETE FROM [GEODB].[dbo].[GDB_ITEMS]
      WHERE [Name] = 'RM'
GO


فرض کنید لایه ای از یکسری پلی لاین دارید و میخواهید خطوطی از لایه که درون بخش خاصی قرار میگیرند حذف شوند. به منظور استفاده از زبان برنامه نویسی پایتون در نرم افزاری جداگانه، بایستی ابتدا یک لایه (layer) از روی لایه پلی لاین خودتان بسازید، انتخاب را بر روی آن انجام دهید و سپس اقدام به حذف موارد انتخاب شده بکنید. کد زیر برای مثال نوشته شده است:

arcpy.MakeFeatureLayer_management(r'output.gdb/sample_lines', "lines_lyr")
arcpy.SelectLayerByLocation_management ("lines_lyr", "INTERSECT", r"output.gdb/barrier_polygon")
arcpy.DeleteFeatures_management(r'lines_lyr')


ArcGIS Server به صورت پیش فرض وقتی رسترها را نشان می‌دهند از طیف سفید-مشکی استفاده می کند. برای اینکه سیستمی طراحی کنید که توان عوض کردن نحوه نمایش رسترها را داشته باشد، می توانید از گامهای زیر استفاده کنید:

1. Resampling (در صورت نیاز)
2. Reclassifying در صورتی که رسترشما از نوع tiff است و مقادیر آن به صورت اعشاری میباشد، با دسته بندی رستر مدنظر، آن را به کلاس های محدودی تبدیل می کنید و به مقادیر کلاس ها مقادیر int می دهید.
3. رستر خود را از به صورت Image Service بر روی ArcGIS server خود Publish کنید.
در اینجا دو راه حل پیش روی شماست:
     1. تعریف یک Raster Function برای اعمال Colormap بر روی رستر مورد نظر در سرور
     2. تعریف Colormap در هنگام فراخوانی نقشه بر روی کلاینت
راه حل اول در مراجع به خوبی توضیخ داده شده است، به همین دلیل به راه حل دوم میپردازیم. با فرض به اینکه شما بر روی کلاینت خود در کد Javascript خود از Openlayers استفاده می کنید، برای فراخوانی یک Image Service از روی سرور ArcGIS از دستور زیر در هنگام تعریف لایه استفاده می کنید:

new ol.layer.Image({
          source: new ol.source.ImageArcGISRest({
            ratio: 1,
            params: {},
            url: url
          })
        })


در کد بالا هنگامی که می خواهید از یک Colormap تعریفی خود استفاده کنید، در قسمت Params که مربوط به پارامترهای درخواستی شما از سرور نقشه می شود، پارامترهای زیر را اضافه میکنید:

 renderingRule={ "rasterFunction" : "Colormap",
  "rasterFunctionArguments" : {
    "Colormap" : [
      [0, 255,255,255],
      [1, 182,237,240],
      [2, 149,209, 237],
      [3, 116, 180,232],
      [4, 80, 155, 230],
      [5, 31, 131, 224],
      [6, 33, 98,204],
      [7, 29, 68, 184],
      [8, 23, 40, 166],
      [9, 9, 9, 145],
    ]
  },
  "variableName" : "Raster"
}

در این کد، برای یک رستر 10 کلاسه، رنگبندی (Colormap) مورد نظر شما معرفی شده است. در نهایت لایه تعریفی شما در Openlayers به شکل زیر در خواهد آمد:

new ol.layer.Image({
          source: new ol.source.ImageArcGISRest({
            ratio: 1,
            params: {'renderingRule':'{"rasterFunction" : "Colormap","rasterFunctionArguments" : {"Colormap" : [[0, 255,255,255],[1, 182,237,240],[2, 149,209, 237],[3, 116, 180,232],[4, 80, 155, 230],[5, 31, 131, 224],[6, 33, 98,204],[7, 29, 68, 184],[8, 23, 40, 166],[9, 9, 9, 145],]},"variableName" : "Raster"} '},
            url: url
          })
        })


لازم به ذکر است که اگر در هنگام Publish کردن رستر، فایل Raster Function را همراه آن معرفی کرده باشید، در قسمت Params کافیست تنها نام Raster Function خود را بنویسید.

new ol.layer.Image({
          source: new ol.source.ImageArcGISRest({
            ratio: 1,
            params: {'renderingRule':'{"rasterFunction":"sample"}'},
            url: url
          })
        })


شما ArcGIS for Server را بر روی سرور خود به منظور استفاده از سرویسهای نقشه نصب میکنید.در کنار ArcGIS for Server معمولا بر روی وب سرور خود (به طور مثال IIS) وبسایت خود را تشکیل میدهید تا با استفاده از سرویس های ArcGIS for Server به کلاینتهای خود اجازه مشاهده و تجزیه و تحلیل های گوناگون دهید. در این حالت برای اینکه تعامل میان IIS و ArcGIS for Server انجام شود و اطلاعات به راحتی میان این دو وب سرویس جابجا شود، نیاز به نصب ArcGIS Web Adapter (IIS) است.
به طور مثال زمانی که شما بخواهید از عارضه ای کوئری بگیرید و اطلاعات آن را به صورت XML بخوانید، ممکن است به دلیل Same Origin Policy شما از اینکار توسط مرورگر و وب سرورها منع شوید. زیرا وب سرور وبسایت شما بر روی http://machin-name:80 و وب سرور ArcGIS شما بر روی http://machin-name:6080 قرار دارد. با استفاده از روش Cross Origin Resource Sharing هم نمیتوانید این مشکل را برطرف کنید و در نهایت با پیغامی مبنی بر عدم اجازه دسترسی برای وبسایتتان مواجه میشوید. با نصب Web Adapter، وب سرور ArcGIS شما نیز به نوعی بر روی IIS قرار خواهد گرفت و مشکل SOP برطرف خواهد شد. در این حالت سرویس های ArcGIS for Server بر روی پورت 80 نیز در دسترس قرار میگیرند (http://machin-name:80).
نحوه نصب ArcGIS Web Adapter به طور کامل در مراجع توضیح داده شده است.

ArcGIS Web Adapter (IIS)

باید به یاد داشته باشید که برای نصب Web Adapter بر روی Windows Server 2012، کامپوننت IIS باید به همراه مشخصات زیر بر روی ویندوز شما نصب شده باشد، در غیر این صورت نصب با اررور (Specific IIS components are required for IIS 7.0 and higher) همراه خواهد بود. مشخصات IIS نصب شده بر روی ویندوز سرور 2012 عبارتند از:
  • Web Server
    • Common HTTP Features
      • Default Document
      • Static Content
    • Security
      • Request Filtering
      • Basic Authentication
      • Windows Authentication
    • Application Development
      • .NET Extensibility 4.5
      • .NET Extensibility
      • ASP.NET 4.5
      • ASP.NET
      • ISAPI Extensions
      • ISAPI Filters
  • Management Tools
    • IIS Management Console
    • IIS 6 Management Compatibility
      • IIS 6 Metabase Compatibility
    • IIS Management Scripts and Tools
    • Management Service




اگر میخواهید که از سیستمی در شبکه بر روی geodatabase تجاری خود (SQL Server) ویرایش انجام دهید، باید نرم افزار Microsoft SQL Server Native Client را بر روی آن سیستم نصب کنید. نسخه ای که در این پست ارائه شده، بر روی ArcGIS 10.2.0 و SQL Server 2012 کار میکند.

دانلود

Password: 2tijoon

برخی مواقع ممکن است که نرم افزار ArcGIS در هنگام باز کردن جدول توصیفی یک shapefile، متون فارسی را به صورت غریب نمایش دهد. این مشکل ناشی از آن است که سیستم نمیفهمد که نوشته‎‌هایی که در کد نوشتاری خود نیستند را باید چطور نمایش دهند. برای حل این مشکل کافیست که به نرم‌افزار بگوییم که از کد نوشتاری مناسب استفاده کند.
برای انجام این کار مراحل زیر را به دقت دنبال کنید:
1. notepad خود را باز کنید.
2. درون آن متن زیر را بنویسید:
UTF-8
3. فایل خود را در مسیر shapefile مدنظر با نام زیر ذخیره کنید:
<shapefile-name>.cpg

حال کافیست با استفاده از نرم‌افزار ArcMap لایه مورد نظر خود را باز کنید و حدول توصیفی را چک نمایید.

برای اجرا کردن کدهای پایتون در محیط .net می توانید به راحتی از فریم ورک IronPython استفاده کنید. اما در صورتی که کتابخانه ای که استفاد می کنید توسط CPython توسعه یافته باشد، شما قادر به استفاده از IronPython  نخواهید بود. کتابخانه ArcPY از جمله همین کتابخانه هاست. بدین منظور می توانید به طریق زیر کد پایتون حاوی ArcPy خود را اجرا کنید. ابتدا در محیط Controller (MVC) خود کد زیر را وارد کنید:
  string command = "python " + @"c:\test.py";
            try
            {
                // Create the ProcessStartInfo using "cmd" as the program to be run, and "/c " as the parameters. "/c" tells cmd that you want it to 
                //execute the command that follows, then exit.
                ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command);

                // The following commands are needed to redirect the standard output. This means that it will be redirected to the Process.
                //StandardOutput StreamReader.
                procStartInfo.RedirectStandardOutput = true;
                procStartInfo.UseShellExecute = false;

                // Do not create the black window.
                procStartInfo.CreateNoWindow = true;

                // Now you create a process, assign its ProcessStartInfo, and start it.
                Process proc = new Process();
                proc.StartInfo = procStartInfo;
                proc.Start();

                // Get the output into a string.
                string result = proc.StandardOutput.ReadToEnd();

                // Display the command output.
                Debug.WriteLine(result);
                //MessageBox.Show(result);
            }
            catch (Exception objException)
            {
                Debug.WriteLine(objException.Message);
                //MessageBox.Show(objException.Message);
                // Log the exception and errors.
            }

سپس کد پایتون خود را به طور مثال به صورت زیر در فایل test.py بنویسید:
کد زیر به صورت نمونه، یک فایل MXD را به یک فایل MSD تبدیل می کند که برای ArcGIS for Server قابل انتشار باشد.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\workspace\dl\density.mxd")
msd = r"C:\workspace\dl\msd\density5.msd"
df = arcpy.mapping.ListDataFrames(mxd,"Map2")[0]
arcpy.mapping.ConvertToMSD(mxd,msd,df,"NORMAL","NORMAL")
del mxd,msd

بدین ترتیب پس از فراخوانی متد موجود در کنترلر خود، کد پایتون شما به راحتی اجرا خواهد شد.




تبلیغات

محل تبلیغات شما
محل تبلیغات شما محل تبلیغات شما

آخرین وبلاگ ها

آخرین جستجو ها

خرید و فروش کامپیوتر Misty داروخانه دكتر سليمي وبلاگ رسمی لوازم تخصصی قنادی بوغدا موسسه داوري دادجويان منصف بابلسر هواساز معبر سایبری بیت الشهدا صفحه رسمی مهدی عبدی ( Mehdi Abdi ) کابینت|ام|دی|اف|سفید|های|گلاس گروه تئاتر قاب خالی