Импорт растровых файлов и файлов мира в ArcGis. Какие единицы карты?

Вкратце: я думал, что единицы измерения карты будут в метрах или километрах, но это не кажется правильным. Они в десятичных градусах? Можно ли установить это как опцию в ArcGis?


Hi,

Я сотрудничаю с исследователем, использующим ArcGIS для наложения некоторых изображений компьютерного зрения на карту. Я создал файл привязки для проверки импорта растров в ArcGIS, но, похоже, я ошибся в масштабировании.

Я создал файл jgw для сопровождения изображения размером 1600x1600 пикселей, которое должно охватывать квадрат размером 8 на 8 метров. Мне удалось правильно расположить и повернуть его, но масштабирование очень сильно отличается.

0.005
0.0013043484005
0.00482687012982
-0.005
10.8090421
59.5502261

Снимок экрана из ArcGIS

Обновление: я попытался, практически наугад, уменьшить масштаб изображения и отправил коллеге этот файл (обратите внимание, что я пропустил количество десятичных знаков в строке 1 и 4:

0.00000005
0.000000013043484005
0.0000000482687012982
-0.00000005
10.8090421
59.5502261

Полученное изображение выглядит так, намного ближе к тому, что я ищу.

Результат использования файла привязки со случайным количеством дополнительных нулей после запятой

Я создал файл jgw, используя простой скрипт Python, который считывает 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()

person Trygve    schedule 25.03.2014    source источник
comment
разве это не изображение с высоким разрешением и нестандартным происхождением?   -  person Paulo E. Cardoso    schedule 26.03.2014
comment
Да, это изображение высокого разрешения, 1600x1600 пикселей. Должен покрывать квадрат 8х8 метров на карте.   -  person Trygve    schedule 28.03.2014


Ответы (1)


Вкратце: я думал, что единицы карты будут в метрах или километрах, но это не кажется правильным. Они в десятичных градусах? Можно ли установить это как опцию в ArcGis?

Посмотрите на свою первую картинку, внизу слева. Очевидно, что единицы карты указаны в десятичных градусах. Единицы карты зависят от системы координат, и, как правило, если у вас есть географическая система координат, такая как (WGS84), они будут в градусах, если вы используете проекционную систему координат, они будут метрическими или около того.

Если вам нужны угловые координаты в метрах, решением может быть преобразование ваших опорных точек (или слоя, который вы хотите использовать для извлечения метрических координат) в проекционную систему координат, используемую в вашей стране. Для этого вы можете использовать Project или растровый инструмент Project в Arcgis.

person makak    schedule 10.04.2014