WLD — файл ESRI World — документация GDAL

Файл мира — это простой текстовый файл ASCII, состоящий из шести значений, разделенных символами новой строки. Формат следующий:

 Изменение размера пикселя по оси Y (обычно 0,0), вращение вокруг оси X (обычно 0,0), отрицательный размер пикселя по оси Y, координата X верхнего  центр левого пикселя Координата Y центра верхнего левого пикселя 

Например:

 60.00000000000.  00000000000.0000000000-60.0000000000440750.00000000003751290.0000000000 

Вы можете создать этот файл, просто используя свой любимый текстовый редактор.

Файл World обычно имеет суффикс .wld , но иногда он может содержать .tfw , .tifw , .jgw или другие суффиксы в зависимости от файла изображения, с которым он поставляется.



Как получить значения для создания мирового формата файла?

Я исследовал создание формата файла мира и попытался создать его с помощью C ++ в Windows, может ли кто-нибудь подтвердить правильность того, откуда я получаю значения? литература о мировых форматах файлов довольно расплывчата. Я не использую вращение, поэтому предполагаю, что значения D и E всегда равны нулю.

Строка 1: A: размер пикселя в направлении x в единицах карты/пиксель.

p-> GetDeviceCaps (HORZRES); //HORZRES определяется в wingdi.h как ширина по горизонтали в
пикселях

Строка 2: D: вращение вокруг оси y//всегда 0, поскольку я не использую вращение

Строка 3: B: вращение вокруг оси x//всегда 0, поскольку я не использую вращение

Строка 4: E: размер пикселя в направлении y в единицах карты почти всегда отрицательное

p-> GetDeviceCaps (VERTRES); //ВЕРТРЕС определяется в wingdi.h как горизонтальная ширина в
пикселях

Строка 5: C: координата x центра верхнего левого пикселя//как вы получаете это значение?

Строка 6: F: координата y центра левого верхнего пикселя//как вы получите это значение?


Файлы World, используемые Esri, GDAL и т. д., имеют стандартный формат:

Обычно поворот равен 0 для обоих значений (не повернутый), но значения образуют 6-параметрическое аффинное преобразование между ячейками и миром; если вы разбираетесь в математике, вы могли бы ввести эти числа для точного вращения. Вот код для массива GDAL GeoTransform, который очень похож на файл мира:

  double GeoTransform [6]; GeoTransform [0] = Xmin; //Верхний левый XGeoTransform [1] = CellSize; //Размер пикселя W-E GeoTransform [2] = 0; //Вращение, 0 если 'Север вверх' GeoTransform [3] = Ymax; //Вверху слева YGeoTransform [4] = 0; //Поворот, 0, если 'Север вверх' GeoTransform [5] = -CellSize; //Размер пикселя NS  

В то время как файл мира заполняется следующим образом:

  Ширина ячейки00 Высота ячейки (отрицательная) Координата X верхнего  левая ячейка (центр) Координата Y верхней левой ячейки (центр)  

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

Вот пример того, как я мог бы вычислить/создать файл мира в объектах Esri:

  void GetWorldValuesFromActiveView (ESRI.ArcGIS.Framework.IApplication pApp) {ESRI.ArcGIS.ArcMapUI.IMxDocument pDoc = (ESRI.ArcGIS.ArcMapUI.IM.Document) pApp  ESRI.ArcGIS.Carto.IActiveView pView = pDoc.ActiveView;  ESRI.ArcGIS.Geometry.IEnvelope pExtent = pView.Extent; //границы отображения в мировых единицах ESRI.ArcGIS.esriSystem.tagRECT pPixBnd = pView.ExportFrame; //границы отображения в единицах экрана//ширина и высота ячеек, я использую абсолютное значение//поскольку (очень редко) экран может иметь отрицательные координаты int Rows = Math.Abs ​​(pPixBnd.top - pPixBnd.bottom);  int Cols = Math.Abs ​​(pPixBnd.right - pPixBnd.left);  double Width = pExtent.XMax - pExtent.XMin; //ширина в "мировых" единицах double Height = pExtent.YMax - pExtent.YMin;  двойной CellX = ширина/столбцы;  двойной CellY = Высота/Ряды;  двойной ULX = pExtent.XMin + (CellX/2);  двойной ULY = pExtent.YMax - (CellY/2);  используя (System.IO.StreamWriter pWorldWrite = new System.IO.StreamWriter ("c: \ путь \ к \ world \ file.tfw")) {pWorldWrite.WriteLine (CellX.ToString ());  pWorldWrite.WriteLine («0»);  pWorldWrite.WriteLine («0»);  pWorldWrite.WriteLine ("-" + CellY.ToString ());  pWorldWrite.WriteLine (ULX.ToString ());  pWorldWrite.WriteLine (ULY.ToString ());  }}  

Как видно из приложения, вы должны знать, сколько пикселей находится в окне, а также какую протяженность «на земле» представляют эти пиксели. Если вы пишете свое собственное приложение, вы должны знать эти значения в какой-то момент, поскольку они являются неотъемлемой частью рендеринга для отображения.

Оцените статью
clickpad.ru
Добавить комментарий