SHARE
TWEET

Untitled

a guest Oct 21st, 2019 76 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import argparse
  2. import os
  3. import xml.etree.ElementTree as et
  4. from zipfile import ZipFile
  5.  
  6. import numpy as np
  7.  
  8.  
  9. def main():
  10.     print("FILENAME :", zipFileName)
  11.     baseName, _ = os.path.splitext(zipFileName)
  12.     print("DIRNAME  :", baseName)
  13.     os.makedirs(baseName, exist_ok=True)
  14.     existing_zip= ZipFile(zipFileName)
  15.     existing_zip.extractall(baseName)
  16.     existing_zip.close()
  17.  
  18.     xNum = 225
  19.     zNum = 150
  20.  
  21.     data = np.full((zNum * 10, xNum * 10), np.nan, dtype=np.float)
  22.  
  23.     for fileName in os.listdir(baseName):
  24.         _, ext = os.path.splitext(fileName)
  25.         if ext == ".xml":
  26.             print("FILENAME :", fileName)
  27.             tree = et.parse(baseName + "//" + fileName)
  28.             root = tree.getroot()
  29.             mesh = root[2][6].text
  30.             N = (9 - int(mesh[6])) * zNum
  31.             E = int(mesh[7]) * xNum
  32.             print(
  33.                 "LOCATION :", mesh, root[2][7][0][0][0].text, root[2][7][0][0][1].text
  34.             )
  35.  
  36.             curData = np.full((zNum, xNum), np.nan, dtype=np.float)
  37.             rawData = root[2][7][2][0][1].text.split()
  38.             xStart, zStart = root[2][7][3][0][1].text.split()
  39.             xStart = int(xStart)
  40.             zStart = int(zStart)
  41.             x=xStart
  42.             z=zStart
  43.             for raw in rawData:
  44.                 if raw.split(",")[0] == "地表面":
  45.                     curData[z][x]=float(raw.split(",")[1])
  46.                 x+=1
  47.                 if x >= xNum:
  48.                     x=0
  49.                     z+=1
  50.                     if z >= zNum:
  51.                         break
  52.             data[N : N + zNum, E : E + xNum] = curData
  53.             print("MAINDATA :", curData)
  54.         os.remove(baseName + "//" + fileName)
  55.  
  56.     os.removedirs(baseName)
  57.  
  58.     data *= yScale*20/(np.nanmax(data)-np.nanmin(data))
  59.     lowestLayer = np.nanmin(data)
  60.     data[np.isnan(data)] = lowestLayer - 3
  61.     data -= (lowestLayer - 5)
  62.  
  63.     file = open(baseName + ".obj", "w")
  64.  
  65.     for z in range(zNum * xzScale1):
  66.         print("\rPROCESSING :{0}".format(int(100*z/(zNum * xzScale1))), end="")
  67.         v = ""
  68.         f = ""
  69.         for x in range(xNum * xzScale1):
  70.             curData = (
  71.                 str(
  72.                     data[
  73.                         z * xzScale2 : z * xzScale2 + xzScale2 - 1,
  74.                         x * xzScale2 : x * xzScale2 + xzScale2 - 1,
  75.                     ].mean()
  76.                 )
  77.             )
  78.             curPos = (z * xNum * xzScale1 + x) * 8
  79.             v += (
  80.                 "v " + str(x) + " " + curData + " " + str(z) + "\n"
  81.                 "v " + str(x + 1) + " " + curData + " " + str(z) + "\n"
  82.                 "v " + str(x) + " " + curData + " " + str(z + 1) + "\n"
  83.                 "v " + str(x + 1) + " " + curData + " " + str(z + 1) + "\n"
  84.                 "v " + str(x) + " 0 " + str(z) + "\n"
  85.                 "v " + str(x + 1) + " 0 " + str(z) + "\n"
  86.                 "v " + str(x) + " 0 " + str(z + 1) + "\n"
  87.                 "v " + str(x + 1) + " 0 " + str(z + 1) + "\n"
  88.             )
  89.             f += (
  90.                 "f "
  91.                 + str(curPos + 1)
  92.                 + " "
  93.                 + str(curPos + 2)
  94.                 + " "
  95.                 + str(curPos + 3)
  96.                 + "\n"
  97.                 + "f "
  98.                 + str(curPos + 2)
  99.                 + " "
  100.                 + str(curPos + 3)
  101.                 + " "
  102.                 + str(curPos + 4)
  103.                 + "\n"
  104.  
  105.                 + "f "
  106.                 + str(curPos + 1)
  107.                 + " "
  108.                 + str(curPos + 2)
  109.                 + " "
  110.                 + str(curPos + 5)
  111.                 + "\n"
  112.                 + "f "
  113.                 + str(curPos + 2)
  114.                 + " "
  115.                 + str(curPos + 5)
  116.                 + " "
  117.                 + str(curPos + 6)
  118.                 + "\n"
  119.  
  120.                 + "f "
  121.                 + str(curPos + 2)
  122.                 + " "
  123.                 + str(curPos + 3)
  124.                 + " "
  125.                 + str(curPos + 6)
  126.                 + "\n"
  127.                 + "f "
  128.                 + str(curPos + 3)
  129.                 + " "
  130.                 + str(curPos + 6)
  131.                 + " "
  132.                 + str(curPos + 7)
  133.                 + "\n"
  134.  
  135.                 + "f "
  136.                 + str(curPos + 3)
  137.                 + " "
  138.                 + str(curPos + 4)
  139.                 + " "
  140.                 + str(curPos + 7)
  141.                 + "\n"
  142.                 + "f "
  143.                 + str(curPos + 4)
  144.                 + " "
  145.                 + str(curPos + 7)
  146.                 + " "
  147.                 + str(curPos + 8)
  148.                 + "\n"
  149.  
  150.                 + "f "
  151.                 + str(curPos + 4)
  152.                 + " "
  153.                 + str(curPos + 1)
  154.                 + " "
  155.                 + str(curPos + 8)
  156.                 + "\n"
  157.                 + "f "
  158.                 + str(curPos + 1)
  159.                 + " "
  160.                 + str(curPos + 8)
  161.                 + " "
  162.                 + str(curPos + 2)
  163.                 + "\n"
  164.             )
  165.  
  166.         file.write(v + f)
  167.  
  168.     file.write(
  169.         "v 0 0 0\n"
  170.         + "v " + str(xNum * xzScale1) + " 0 0\n"
  171.         + "v 0 0 " + str(zNum * xzScale1) + "\n"
  172.         + "v " + str(xNum * xzScale1) + " 0 " + str(zNum * xzScale1) + "\n"
  173.         + "f"
  174.         + str(zNum * xzScale1 * xNum * xzScale1 * 8 + 1)
  175.         + " "
  176.         + str(zNum * xzScale1 * xNum * xzScale1 * 8 + 2)
  177.         + " "
  178.         + str(zNum * xzScale1 * xNum * xzScale1 * 8 + 3)
  179.         + "\n"
  180.         + "f"
  181.         + str(zNum * xzScale1 * xNum * xzScale1 * 8 + 2)
  182.         + " "
  183.         + str(zNum * xzScale1 * xNum * xzScale1 * 8 + 3)
  184.         + " "
  185.         + str(zNum * xzScale1 * xNum * xzScale1 * 8 + 4)
  186.         + "\n"
  187.     )
  188.  
  189.     file.close()
  190.  
  191.  
  192. if __name__ == "__main__":
  193.     parser = argparse.ArgumentParser()
  194.     parser.add_argument("filename", help="Specify a DEM ZIP file")
  195.     parser.add_argument('-x', '--xzscale', type=int, default=2, help="Specify the horizontal scale with a value between 1 and 4. The higher the number, the more precise.")
  196.     parser.add_argument('-y', '--yscale', type=float, default=1.0, help="Specify the vertical scale.")
  197.     args = parser.parse_args()
  198.        
  199.     yScale = args.yscale
  200.     zipFileName=args.filename
  201.  
  202.     # scale1 * scale2 == 10
  203.     xzScale = args.xzscale
  204.     if xzScale == 1:
  205.         xzScale1 = 1
  206.         xzScale2 = 10
  207.     elif xzScale == 2:
  208.         xzScale1 = 2
  209.         xzScale2 = 5
  210.     elif xzScale == 3:
  211.         xzScale1 = 5
  212.         xzScale2 = 2
  213.     else:
  214.         xzScale1 = 10
  215.         xzScale2 = 1
  216.  
  217.     main()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top