亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

arcgis使用Python腳本進(jìn)行批量截圖

介紹

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

思路

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

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

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

準(zhǔn)備

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

實(shí)現(xiàn)

mxd文件準(zhǔn)備

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

python代碼

# -*- coding:utf-8 -*-
"""
實(shí)現(xiàn)arcpy按照圖斑自動截圖,要使用python2.7,需要提前設(shè)置好mxd工程,并進(jìn)行保存,如果進(jìn)行前后時(shí)相截圖,需要設(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,錯(cuò)誤返回False。
        layermain = lyr#主要圖層指定為layermain


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

#循環(huán)
fields = ['TBBH']#根據(jù)field這個(gè)字段進(jìn)行截圖,field必須為唯一字段
values1 = [row[0] for row in arcpy.da.SearchCursor(input, fields)]#使用游標(biāo)訪問其中的字段,返回已fields字段的列表
#print values1
#清空選擇
#arcpy.SelectLayerByAttribute_management(layermain, "CLEAR_SELECTION")#按屬性選擇圖層工具,選擇要素與行,并移除所有選擇內(nèi)容
#arcpy.RefreshActiveView()#刷新當(dāng)前的地圖文檔的活動視圖和內(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)建一個(gè)新的選擇內(nèi)容,默認(rèn)選擇方式為后邊字符串
        df.zoomToSelectedFeatures()#縮放至圖層,按照當(dāng)前圖斑縮放
        df.scale = df.scale*2.5#圖版按位置縮放距離圖片邊界3倍位置,根據(jù)圖斑大小進(jìn)行調(diào)節(jié)
        save_path = "D:\\data\\pic\\"+str(val)+".jpg"#保存圖片為JPEG格式路徑
        arcpy.mapping.ExportToJPEG(mxd,save_path)#按照val為文件名稱進(jìn)行保存,保存格式為JPEG格式
#        arcpy.mapping.ExportToJPEG(mxd,save_path,resolution = 200)#按照val為文件名稱進(jìn)行保存,保存格式為PNG格式
        arcpy.SelectLayerByAttribute_management(layermain, "CLEAR_SELECTION")#按照屬性選擇圖層,并移除所有選擇內(nèi)容
        arcpy.RefreshActiveView()#刷新當(dāng)前活動視圖和內(nèi)容列表
    except:
        print 'wrong'
del mxd
print "Beautiful!"

截圖效果如下:

圖片添加需要的水印

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

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


    /**
     * 獲取不帶擴(kuò)展名的文件名
     *
     * @param filename 文件名
     * @return 不帶擴(kuò)展名的文件名
     */
    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 水印文字(一個(gè)集合一個(gè)值對應(yīng)一條水印)
     * @param srcImageFile  源圖像地址
     * @param destImageFile 目標(biāo)圖像地址
     * @param fontName      水印的字體名稱
     * @param fontStyle     水印的字體樣式
     * @param color         水印的字體顏色
     * @param alpha         透明度:alpha 必須是范圍 [0.0, 1.0] 之內(nèi)(包含邊界值)的一個(gè)浮點(diǎn)數(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();
            // 計(jì)算水印字體大小 首先找出最長的水印文字
            //如果需要加水印的文字沒有超過18個(gè)就按18個(gè)計(jì)算
            int maxLength = 18;
            for (String pressText : pressTextList) {
                if (getLength(pressText) > maxLength) {
                    maxLength = getLength(pressText);
                }
            }
            //根據(jù)圖片寬度計(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)在指定坐標(biāo)繪制水印文字
            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();
        }
    }

    /**
     * 計(jì)算text的長度(一個(gè)中文算兩個(gè)字符)
     *
     * @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腳本進(jìn)行批量截圖功能實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python批量截圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題

    pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題

    這篇文章主要介紹了pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • tensorflow中Dense函數(shù)的具體使用

    tensorflow中Dense函數(shù)的具體使用

    本文主要介紹了tensorflow中Dense函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 關(guān)于Word2Vec可視化展示

    關(guān)于Word2Vec可視化展示

    這篇文章主要介紹了關(guān)于Word2Vec可視化展示,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python Web開發(fā)模板引擎優(yōu)缺點(diǎn)總結(jié)

    Python Web開發(fā)模板引擎優(yōu)缺點(diǎn)總結(jié)

    這篇文章主要介紹了Python Web開發(fā)模板引擎優(yōu)缺點(diǎn)總結(jié),需要的朋友可以參考下
    2014-05-05
  • 解決Scrapy安裝錯(cuò)誤:Microsoft Visual C++ 14.0 is required...

    解決Scrapy安裝錯(cuò)誤:Microsoft Visual C++ 14.0 is required...

    下面小編就為大家?guī)硪黄鉀QScrapy安裝錯(cuò)誤:Microsoft Visual C++ 14.0 is required...的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • python抓取豆瓣圖片并自動保存示例學(xué)習(xí)

    python抓取豆瓣圖片并自動保存示例學(xué)習(xí)

    python抓取豆瓣圖片并自動保存示例學(xué)習(xí),示例使用了beautifulsoup庫分析HTML代碼,beautifulsoup是一個(gè)HTML/XML解析器,可以用來做網(wǎng)頁爬蟲
    2014-01-01
  • Python利用ROI進(jìn)行圖像合成的問題小結(jié)

    Python利用ROI進(jìn)行圖像合成的問題小結(jié)

    圖像的 ROI (region of interest) 是指圖像中感興趣區(qū)域、在 OpenCV 中圖像設(shè)置圖像 ROI 區(qū)域,實(shí)現(xiàn)只對 ROI 區(qū)域操作,本文給大家介紹Python利用ROI進(jìn)行圖像合成的問題小結(jié),感興趣的朋友一起看看吧
    2021-07-07
  • python類的繼承鏈實(shí)例分析

    python類的繼承鏈實(shí)例分析

    在本篇文章里小編給大家整理了一篇關(guān)于python類的繼承鏈分析內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • Python?numpy視圖與副本

    Python?numpy視圖與副本

    這篇文章主要介紹了Python?numpy視圖與副本,繼上一篇對numpy?模塊之ndarray一文中對?ndarray?內(nèi)存結(jié)構(gòu)主要分為兩部分metdata?、raw?bata,下面來一起學(xué)習(xí)文章具體內(nèi)容吧,需要的小伙伴也可以參考一下
    2022-01-01
  • YOLOv5中SPP/SPPF結(jié)構(gòu)源碼詳析(內(nèi)含注釋分析)

    YOLOv5中SPP/SPPF結(jié)構(gòu)源碼詳析(內(nèi)含注釋分析)

    其實(shí)關(guān)于YOLOv5的網(wǎng)絡(luò)結(jié)構(gòu)其實(shí)網(wǎng)上相關(guān)的講解已經(jīng)有很多了,但是覺著還是有必要再給大家介紹下,下面這篇文章主要給大家介紹了關(guān)于YOLOv5中SPP/SPPF結(jié)構(gòu)源碼的相關(guān)資料,需要的朋友可以參考下
    2022-05-05

最新評論