כמו לכל פעולה ב GIS גם לבניית  קאש יש יותר מדרך אחת ויכול להיות שהמדריך כאן הוא לא הכי אופטימפלי בעולם אבל הוא עבד…

בבנית קאש יש לא מעט פרמטרים שצריך לשים לב אליהם במיוחד אם בונים קאש ברמות קנ”מ נמוכות ובפריסה רחבה.

הדוגמאות נלקחו מבניית קאש לאורטופוטו ברמה ארצית, הנתונים היו ב ITM ואילו הסרוויס ב web Mercator על מנת שיהיה אפשר לעבור בין מפות בסיס שונות באפלקציה

  • בדיקת קבצי האורטופוטו

 בדיקה של הקבצים כדי לדעת באיזה היטל הם, גם קבצים שלכאורה בהיטל WGS או שמוגדר להם undefined הם לפעמים בהיטל אחר – למשל בדוגמה אפשר לראות לפי הקורדינאטות ב extent שזה ברשת ישראל החדשה

  •  קודם כל נגדיר לכל הקבצים היטל אחיד אפשר לעשות define projection

(במקרה כמו כאן של קבצים מרובים בתקיות משנה שונות במקום להפעיל batch אפשר להריץ את הסקריפט שכתבתי שמחפש גם בתקיות משנה את קבצי הsid (הסקריפט בנספח א))

  •  יש בעיה שראינו שלמרות שהסקריפט רץ על כל הקבצים לא תמיד המערכת מזהה(ראינו הבדל בין 10.4 ל 10.5 שלא מזהה) שנעשה define projection וזאת מכיוון שלצד קבצי הsid יש 2 סוגי קבצי xml עם הגדרות , הסקריפט הקודם משנה קובץ שהסיומת שלו היא xml ואילו ישנם קבצים עם סיומת aux.xml שלא משתנים ושם צריך גם לעדכן את ההיטל, לצורך כך ניתן להריץ את הסקריפט שמוסיף לקובץ aux.xml את השורת ההיטל בשורה השניה בקובץ, הסקריפט נמצא בנספח ב)
  •  הכנת רסטר קטלוג

    אפשר באמצעות כפתור ימני על GDB ליצור רסטר קטלוג ואפשר בכלי ייעודי.
    חשוב למלא את השדות של  ההיטל (נראה לי עדיף שיהיה תואם את ההיטל של הקבצים)
    חשוב מאוד לבחור ב Unmanaged

  • טעינת הקבצים לרסטר קטלוג

 כפתור ימני על הרסטר קטלוג load   – load from workspace

מכניסים את התיקייה הרצויה של הרסטרים (אפשר להכניס גם את תיקיית האב) ולסמן שיכלול גם את תיקיות המשנה וגם כדאי  לסמן project on the fly

  • בניית mxd

במקרה שלנו ה mxd כלל  3 רסטרי קטלוג שונים (ברזוציות שונות) בגלל החוסר בכיסוי .

כמובן שקודם כל נגדיר את  ה MXD בהיטל הנכון ונבצע טרנספורמציה לנתונים שמעלים מהרסטר קטלוג, שימו לב שהרסטר קטלוג עולה בדיפולט כשכבה פוליגנלית ללא תצוגה של התמונות , במאפיינים של השכבה צריך להכנס ללשונית display  וללחוץ שם על Never show wireframe .

  • אפשר גם לשנות את מאפיינים האחרים בתצוגה של שקיפות, ניגודיות ועוד
  • לרוב השכבה עולה עם צבעים לא תקינים ויש צורך לתקן את הצבעים בלשונית הסימבולוגיה ב 10.4 התוכנה קרסה שעברנו ללשונית הזאת , יש תוסף ל 4.1 שמתקן וב 10.5 הבאג טופל 

צריך לשנות את stretch ל None

  • פיבלוש סרוויס

בחלונית פיבלוש הסרוויס (יש מצב שייקח לחלונית קצת זמן לעלות) נגדיר את הפרמטרים הבאים:

  • Capbiliteies –  Mapping
  • Caching
  • Advanced setting
  • הערה – אם אנחנו רוצים לבנות את הקאש בתקייה אחרת מהתיקייה הדיפולטיבית אפשר לשנות את התיקיה של הקאש ע”י הגדרת תיקייה, בעזרת כפתור ימני על השרת בקטלוג ושם להגדיר את התקייה
  • אפשר להגדיר את extent עפ”י שכבה מסויימת
  • Advanced setting – Advanced ניתן לשנות ל exploded המשמעות היא שהקאש נוצר יותר לאט אבל המהירות תגובה בשרת תהיה מהירה יותר (אם נכנס לתקייה של הקאש בשרת מה שנראה בסוף זה המוני תמונות בפורמט שבחרנו)
  • בניית קאש

לאחר שהסרוויס נוצר צריך ליצור את הקאש ניתן לחלק את המשימה הזאת לכמה מכונות וכמה תהליכים מקבילים, לצורך כך ניתן להפעיל את הפעולה בכמה אופנים שונים כפי שיבואר בהמשך.

צריך להפעיל את הכלי Mange Map server cache tiles אפשר גם בכפתור ימני על הסרוויס צריך לסמן וי על הרמות שרוצים להכין , אם מחלקים לפעולות שונות עדיף לעשות את הקנ”מים הנמוכים לבד ואת הגבוהים לעשות במקביל, אפשר לשנות את האינסטסים שהשרת משתמש בהם כדי לא להעמיס על השרת, אפשר לשנות את התיחום לפי שכבה.אם לא מייצרים חדש אלא רק מתקנים תהליך שלא סיים אפשר לשנות ל Recreate empty tiles

  • בדיקת סטאטוס וסיום התהליך

התהליך לוקח זמן ותלוי במשתנים שונים ניתן לבדוק את הסטאטוס של התהליך בלחיצה על כפתור ימני על הסרוויס.

האחוזים של הסטאטוס לא משקפים בצורה טובה את בניית הקאש , כשמגדירים שהקאש יבנה בתוך גבול מסויים יתכן ונראה כי רמה מסויימת לא הגיעה ל 100 אחוז במיוחד ברמות הנמוכות כדאי לבדוק את לשונית job status ולראות שהמשימות שם  נמצאים במאה אחוז בסוף התהליך.

נספח א define projection

import arcpy, os

workspace = arcpy.GetParameterAsText(0).encode('utf-8')

walk = arcpy.da.Walk(workspace, datatype="RasterDataset")

sr=arcpy.GetParameterAsText(1)

for dirpath, dirnames, filenames in walk:

    a=dirpath, dirnames, filenames

    for filename in filenames:
 fc= dirpath+"\\"+filename
                                arcpy.AddMessage(fc)
                                spatial_ref = arcpy.Describe(fc).spatialReference
                                arcpy.DefineProjection_management(fc, sr)

נספח ב ImportSR

import fnmatch

import os

import time

startTime = time.time()

matches = []

change = []

for root, dirnames, filenames in os.walk('.'):

    for filename in fnmatch.filter(filenames, '*aux.xml'):

        matches.append(os.path.join(root, filename))

print str(len(matches))+ " matches file"

value= """  <SRS>PROJCS["Israel_TM_Grid",GEOGCS["GCS_Israel",DATUM["Israel",SPHEROID["GRS_1980",6378137.0,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6141"]],PRIMEM["Greenwich",0.0,AUTHORITY["EPSG","8901"]],UNIT["Degree",0.0174532925199433,AUTHORITY["EPSG","9102"]],AUTHORITY["EPSG","4141"]],PROJECTION["Transverse_Mercator",AUTHORITY["Esri","43006"]],PARAMETER["False_Easting",219529.584,AUTHORITY["Esri","100001"]],PARAMETER["False_Northing",626907.39,AUTHORITY["Esri","100002"]],PARAMETER["Central_Meridian",35.20451694444445,AUTHORITY["Esri","100010"]],PARAMETER["Scale_Factor",1.0000067,AUTHORITY["Esri","100003"]],PARAMETER["Latitude_Of_Origin",31.73439361111111,AUTHORITY["Esri","100021"]],UNIT["Meter",1.0,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","2039"]]</SRS>\n"""

for m in matches:

    f = open(m, "r")

    contents = f.readlines()

    if contents[1] !=value:

        change.append(m)

    f.close()

    contents.insert(1, value)   

print str(len(change))+ " change file"

for c in change:

    f = open(c, "w")

    contents = "".join(contents)

    f.write(contents)

    f.close()

elapsedTime = time.time() - startTime

print  "run time is:" + str(elapsedTime) + " sec"
[elementor-template id="1652"]