栅格和世界文件导入ArcGis,地图单位是什么?

时间:2014-03-25 13:38:45

标签: python arcgis raster

简而言之:我认为地图单位是米或公里,但这似乎不对。它们是十进制度吗?可以在ArcGis中将其设置为选项吗?


嗨,

我正在与使用ArcGIS的研究人员合作,在地图上叠加一些计算机视觉图像。我已经创建了一个世界文件来测试ArcGIS中的栅格导入,但我似乎错误地缩放了。

我创建了一个jgw文件,以配合1600x1600像素的图像,该图像应覆盖8 x 8米的正方形。我已经设法正确定位和旋转它,但缩放非常多。

0.005
0.0013043484005
0.00482687012982
-0.005
10.8090421
59.5502261

Screenshot from ArcGIS

更新:我尝试了,几乎是随机缩小图像,并向我的同事发送了这个文件(请注意,我错过了输入第1行和第4行的小数位数:

0.00000005
0.000000013043484005
0.0000000482687012982
-0.00000005
10.8090421
59.5502261

生成的图像看起来像这样,更接近我要找的东西。

The result using a world file with a random number of extra zeros after the decimal point

我使用一个简单的python脚本创建了jgw文件,读取了角位置的csv文件。

CSV输入文件:

Prosjekt,Felt,Kornart,Season,Date_image,BildeID,RuteID,OmtrentligHimmelretning,Hjorne,Koordinat-system,Latitude,Longitude
Multisens,Garder,SW,Harvest,30/08/2012,902,10,se,NedreHoyre,WGS-84,59.5501946,10.8092326
Multisens,Garder,SW,Harvest,30/08/2012,902,10,sw,NedreVenstre,WGS-84,59.5501637,10.809107
Multisens,Garder,SW,Harvest,30/08/2012,902,10,nw,OvreVenstre,WGS-84,59.5502261,10.8090421
Multisens,Garder,SW,Harvest,30/08/2012,902,10,ne,OvreHoyre,WGS-84,59.5502595,10.8091657

Python脚本:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def main():
    data = pd.read_csv('pos.csv',header=0)

    # Latitude is Y and longitude is X
    # The corners are denoted as:
    # a ----- b
    # |       |
    # |       |
    # c ----- d
    hjorne = data['Hjorne']
    lat = data['Latitude']
    lon = data['Longitude']
    a = {
            'lat': lat[ np.where(hjorne=='OvreVenstre')[0][0] ],
            'lon': lon[ np.where(hjorne=='OvreVenstre')[0][0] ] 
            }
    b = {
            'lat': lat[ np.where(hjorne=='OvreHoyre')[0][0] ],
            'lon': lon[ np.where(hjorne=='OvreHoyre')[0][0] ] 
            }
    c = {
            'lat': lat[ np.where(hjorne=='NedreVenstre')[0][0] ],
            'lon': lon[ np.where(hjorne=='NedreVenstre')[0][0] ] 
            }
    d = {
            'lat': lat[ np.where(hjorne=='NedreHoyre')[0][0] ],
            'lon': lon[ np.where(hjorne=='NedreHoyre')[0][0] ] 
            }
    print a , b , c, d

    # Pixels per meter is 1600 per 8 m
    mPerPix = 8 / 1600.0
    scalex = mPerPix
    scaley = -mPerPix

    # The skew rate is sin( image width ) [m/px]

    rotationAngle = np.arctan2( b['lat'] - a['lat'], b['lon'] - a['lon'])
    skewY = np.sin( rotationAngle ) * mPerPix
    skewX = np.cos( rotationAngle ) * mPerPix
    print rotationAngle

    outfile = open('output.jgw','w')
#    Line 1: A: pixel size in the x-direction in map units/pixel
#    Line 2: D: rotation about y-axis
#    Line 3: B: rotation about x-axis
#    Line 4: E: pixel size in the y-direction in map units, almost always negative[3]
#    Line 5: C: x-coordinate Longitude of the center of the upper left pixel
#    Line 6: F: y-coordinate Latitude of the center of the upper left pixel
    outfile.write( '{}\n{}\n{}\n{}\n{}\n{}\n'.format(
            scalex, skewY, skewX, scaley, a['lon'], a['lat']))
    outfile.close()

1 个答案:

答案 0 :(得分:0)

  

简而言之:我认为地图单位是米或公里,但这似乎并不合适。它们是十进制度吗?可以在ArcGis中将其设置为选项吗?

看看你的第一张照片,左下角。显然,地图单位是十进制度。 地图单位取决于坐标系,一般如果你有像(WGS84)这样的地理坐标系,它们将以度为单位,如果使用投影坐标系,它们将是公制坐标系。

如果您需要以米为单位的角坐标,解决方案可以将您的参考点(或您希望用于提取度量坐标的图层)转换为您所在国家/地区使用的投影坐标系。您可以在Arcgis中使用Project或Project栅格工具。