最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

arcgis使用Python腳本進行批量截圖功能實現(xiàn)

 更新時間:2023年01月15日 08:54:43   作者:孫霸天  
最近公司數(shù)據(jù)部那邊有個需求,需要結(jié)合矢量數(shù)據(jù)和影像數(shù)據(jù),進行批量截圖,并且截圖中只能有一個圖斑,還要添加上相應(yīng)的水印,這篇文章主要介紹了arcgis使用Python腳本進行批量截圖,需要的朋友可以參考下

arcgis使用Python腳本進行批量截圖

介紹

最近公司數(shù)據(jù)部那邊有個需求,需要結(jié)合矢量數(shù)據(jù)和影像數(shù)據(jù),進行批量截圖,并且截圖中只能有一個圖斑,還要添加上相應(yīng)的水印。

思路

一開始我是準備使用QGIS直接進行批量出圖,但我發(fā)現(xiàn)使用布局管理器進行批量出圖會有問題,截圖時沒辦法將周邊的其他圖斑隱藏掉。然后考慮使用python調(diào)用QGIS的方法來進行操作,結(jié)果我是沒找到什么示例或方法,如果其他人有方法可以分享一下。

最終還是準備使用arcpy進行批量截圖,arcpy的例子就比較多了,這里我就展示一下我的方法和思路。個人認為比較low,勿噴!

  • 使用mxd先設(shè)置好矢量圖層和影像圖層
  • python加載矢量圖層,并讀取出所有的矢量數(shù)據(jù)唯一字段值
  • 結(jié)合唯一字段值進行循環(huán)遍歷,在mxd中的矢量圖層中進行條件匹配,匹配到后定位到對應(yīng)圖斑上并設(shè)置層級縮放
  • 設(shè)置了選中狀態(tài),選中的會藍色(選中狀態(tài)這個顏色和樣式我不知道在哪改,如果有人知道請告知一下)
  • 然后進行截圖

準備

  • 系統(tǒng):win11
  • ArcMap:10.2
  • Python:2.7(arcmap自帶的)

實現(xiàn)

mxd文件準備

提前準備好矢量圖層和遙感影像數(shù)據(jù),設(shè)置好需要樣式

python代碼

# -*- coding:utf-8 -*-
"""
實現(xiàn)arcpy按照圖斑自動截圖,要使用python2.7,需要提前設(shè)置好mxd工程,并進行保存,如果進行前后時相截圖,需要設(shè)置好label與所需季度影像
"""
import arcpy
#import os

#截圖地圖文件路徑
input = "D:\\data\\tb_1.shp"
mxd_path = u"D:\\data\\tb_1.mxd"
mxd = arcpy.mapping.MapDocument(mxd_path)#通過MapDocument函數(shù)來引用地圖文檔
df = arcpy.mapping.ListDataFrames(mxd)[0]#返回名為Layers的數(shù)據(jù)框?qū)ο?
for lyr in arcpy.mapping.ListLayers(mxd): #遍歷地圖文檔的圖層
    if lyr.name.startswith("tb_"):#指定圖層文件,搜索為tb開頭的文件夾,startwith函數(shù)用于檢查字符串是否已指定字符串為開頭,正確返回Trur,錯誤返回False。
        layermain = lyr#主要圖層指定為layermain


#輸出lyr.name10(輸出指定圖層的名稱(需要截圖圖層))
print "Layer name: " + layermain.name

#循環(huán)
fields = ['TBBH']#根據(jù)field這個字段進行截圖,field必須為唯一字段
values1 = [row[0] for row in arcpy.da.SearchCursor(input, fields)]#使用游標訪問其中的字段,返回已fields字段的列表
#print values1
#清空選擇
#arcpy.SelectLayerByAttribute_management(layermain, "CLEAR_SELECTION")#按屬性選擇圖層工具,選擇要素與行,并移除所有選擇內(nèi)容
#arcpy.RefreshActiveView()#刷新當前的地圖文檔的活動視圖和內(nèi)容列表

delimfield = arcpy.AddFieldDelimiters(input, 'TBBH')#生成相應(yīng)的sql語句
#print delimfield

#循環(huán)
for val in values1:#遍歷字段列表
    try:
       # 狀態(tài)是0的圖斑
        whereClause0 = delimfield+" = '"+str(val)+"'"#whereClause為"TBBH=val"字符串
        print(whereClause0)
        arcpy.SelectLayerByAttribute_management(layermain, "NEW_SELECTION", whereClause0)#按屬性選擇圖層,創(chuàng)建一個新的選擇內(nèi)容,默認選擇方式為后邊字符串
        df.zoomToSelectedFeatures()#縮放至圖層,按照當前圖斑縮放
        df.scale = df.scale*2.5#圖版按位置縮放距離圖片邊界3倍位置,根據(jù)圖斑大小進行調(diào)節(jié)
        save_path = "D:\\data\\pic\\"+str(val)+".jpg"#保存圖片為JPEG格式路徑
        arcpy.mapping.ExportToJPEG(mxd,save_path)#按照val為文件名稱進行保存,保存格式為JPEG格式
#        arcpy.mapping.ExportToJPEG(mxd,save_path,resolution = 200)#按照val為文件名稱進行保存,保存格式為PNG格式
        arcpy.SelectLayerByAttribute_management(layermain, "CLEAR_SELECTION")#按照屬性選擇圖層,并移除所有選擇內(nèi)容
        arcpy.RefreshActiveView()#刷新當前活動視圖和內(nèi)容列表
    except:
        print 'wrong'
del mxd
print "Beautiful!"

截圖效果如下:

圖片添加需要的水印

圖片上需要添加上一些水印,這里我使用Java代碼進行操作也比較方便:

  	@Test
    void pic() {
        String srcDirStr = "D:\\data\\output";
        String destDirStr = "D:\\data\\res";
        File srcDir = new File(srcDirStr);
        String[] srcList = srcDir.list();
        String year = "2020年影像";
        for (String srcFileStr : srcList) {
            File srcFile = new File(srcFileStr);
            String fileName = getFileNameNoEx(srcFile.getName());
            List<String> markList = new ArrayList<String>();
            markList.add(fileName);
            markList.add(year);
            String srcFilePath = srcDirStr + File.separator + srcFile.getName();
            String destFilePath = destDirStr + File.separator + srcFile.getName();
            pressText(markList,
                    srcFilePath, destFilePath,
                    "黑體",
                    Font.TYPE1_FONT, new Color(0, 255, 255), 0.9f);
        }
    }


    /**
     * 獲取不帶擴展名的文件名
     *
     * @param filename 文件名
     * @return 不帶擴展名的文件名
     */
    public String getFileNameNoEx(String filename) {
        if ((filename != null) && (filename.length() > 0)) {
            int dot = filename.lastIndexOf('.');
            if ((dot > -1) && (dot < (filename.length()))) {
                return filename.substring(0, dot);
            }
        }
        return filename;
    }

    /**
     * 給圖片添加文字水印
     *
     * @param pressTextList 水印文字(一個集合一個值對應(yīng)一條水印)
     * @param srcImageFile  源圖像地址
     * @param destImageFile 目標圖像地址
     * @param fontName      水印的字體名稱
     * @param fontStyle     水印的字體樣式
     * @param color         水印的字體顏色
     * @param alpha         透明度:alpha 必須是范圍 [0.0, 1.0] 之內(nèi)(包含邊界值)的一個浮點數(shù)字
     */
    public void pressText(List<String> pressTextList,
                          String srcImageFile, String destImageFile, String fontName,
                          int fontStyle, Color color, float alpha) {
        try {
            File img = new File(srcImageFile);
            Image src = ImageIO.read(img);
            int width = src.getWidth(null);
            int height = src.getHeight(null);
            BufferedImage image = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
            Graphics2D g = image.createGraphics();
            // 計算水印字體大小 首先找出最長的水印文字
            //如果需要加水印的文字沒有超過18個就按18個計算
            int maxLength = 18;
            for (String pressText : pressTextList) {
                if (getLength(pressText) > maxLength) {
                    maxLength = getLength(pressText);
                }
            }
            //根據(jù)圖片寬度計算水字體大小
            int fontSize = (int) (((width) / (maxLength)) * 0.8);
            g.drawImage(src, 0, 0, width, height, null);
            g.setColor(color);
            g.setFont(new Font(fontName, fontStyle, fontSize));
//            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
//                    alpha));
            // 循環(huán)在指定坐標繪制水印文字
            int count = pressTextList.size();
            for (int i = 0; i < pressTextList.size(); i++) {
                if (i == 0) {
                    g.drawString(pressTextList.get(0), (int) ((width * 0.43) - (2 * fontSize)), (int) ((height * 0.05) + fontSize * count));
//                    g.drawString(pressTextList.get(0), (int) ((width * 0.35) - (2 * fontSize)), (int) ((height * 0.05) + fontSize * count));
                }
                if (i == 1) {
                    g.drawString(pressTextList.get(1), (int) ((width * 0.48) - (2 * fontSize)), (int) ((height * 0.90) - fontSize * count));
                }
                count--;
            }
            g.dispose();
            ImageIO.write(image, "JPEG", new File(destImageFile));// 輸出到文件流
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 計算text的長度(一個中文算兩個字符)
     *
     * @param text 文本
     * @return int
     */
    public int getLength(String text) {
        int length = 0;
        for (int i = 0; i < text.length(); i++) {
            if (new String(text.charAt(i) + "").getBytes().length > 1) {
                length += 2;
            } else {
                length += 1;
            }
        }
        return length / 2;
    }

水印效果如下:

image-20230114153539839

到此這篇關(guān)于arcgis使用Python腳本進行批量截圖功能實現(xiàn)的文章就介紹到這了,更多相關(guān)Python批量截圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 分享Python?加速運行技巧

    分享Python?加速運行技巧

    這篇文章主要介紹了分享Python?加速運行技巧,Python?是一種腳本語言,相比?C/C++?這樣的編譯語言,在效率和性能方面存在一些不足,本文對一些?Python?代碼加速運行的技巧進行整,需要的小伙伴可以參考一下
    2022-03-03
  • python主要用于哪些方向

    python主要用于哪些方向

    在本篇文章里小編給大家整理了一篇關(guān)于python用于的方向的相關(guān)文章,有需要的閱讀下吧。
    2020-07-07
  • python利用re,bs4,requests模塊獲取股票數(shù)據(jù)

    python利用re,bs4,requests模塊獲取股票數(shù)據(jù)

    這篇文章主要介紹了python利用re,bs4,requests模塊獲取股票數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python發(fā)送arp欺騙攻擊代碼分析

    python發(fā)送arp欺騙攻擊代碼分析

    這篇文章主要介紹了python發(fā)送arp欺騙攻擊的方法,大家碰到這樣的事情可以預防一下
    2014-01-01
  • 使用Python實現(xiàn)調(diào)整Excel中的行列順序

    使用Python實現(xiàn)調(diào)整Excel中的行列順序

    調(diào)整Excel?行列順序指的是改變工作表中行或列的位置,以便更好地展示和分析數(shù)據(jù),本文將介紹如何通過Python高效地調(diào)整Excel?行列順序,感興趣的可以了解下
    2025-01-01
  • Python數(shù)據(jù)可視化:泊松分布詳解

    Python數(shù)據(jù)可視化:泊松分布詳解

    今天小編就為大家分享一篇Python數(shù)據(jù)可視化:泊松分布詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 基于python實現(xiàn)微信模板消息

    基于python實現(xiàn)微信模板消息

    本文通過一段代碼實例給大家介紹基于python實現(xiàn)微信模板消息的相關(guān)資料,對python模板消息感興趣的朋友一起學習吧
    2015-12-12
  • jupyter安裝小結(jié)

    jupyter安裝小結(jié)

    jupyter (之前的 ipython notebook )于我的最大意義在于,讓學習進程和探索進程變得可累積,正如它的原先名字中的 notebook 所暗示的那樣,作為學習的記錄者,方便你隨時撿起學習的進度,增量式地前進
    2016-03-03
  • 計算機二級python學習教程(2) python語言基本語法元素

    計算機二級python學習教程(2) python語言基本語法元素

    這篇文章主要為大家詳細介紹了計算機二級python學習教程的第2篇,Python語言基本語法元素,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • python讀取json數(shù)據(jù)還原表格批量轉(zhuǎn)換成html

    python讀取json數(shù)據(jù)還原表格批量轉(zhuǎn)換成html

    這篇文章主要介紹了python讀取json數(shù)據(jù)還原表格批量轉(zhuǎn)換成html,由于需要對ocr識別系統(tǒng)的表格識別結(jié)果做驗證,通過返回的json文件結(jié)果對比比較麻煩,故需要將json文件里面的識別結(jié)果還原為表格做驗證,下面詳細內(nèi)容需要的小伙伴可以參考一下
    2022-03-03

最新評論

潼南县| 溆浦县| 岳池县| 旬邑县| 东乡县| 友谊县| 乌拉特前旗| 祁阳县| 九龙县| 五台县| 延津县| 白河县| 上栗县| 内江市| 喜德县| 东光县| 竹山县| 浦北县| 南江县| 武隆县| 旬阳县| 铜梁县| 星子县| 紫云| 江西省| 巴中市| 曲水县| 江门市| 铜陵市| 桂林市| 大姚县| 伊宁市| 朔州市| 凉山| 中超| 兰坪| 乐都县| 祥云县| 长宁区| 曲周县| 临高县|