-
Notifications
You must be signed in to change notification settings - Fork 141
Expand file tree
/
Copy pathOgrLabels.cpp
More file actions
86 lines (73 loc) · 2.82 KB
/
OgrLabels.cpp
File metadata and controls
86 lines (73 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "stdafx.h"
#include "OgrLabels.h"
#include "OgrHelper.h"
#define LABEL_OFFSETX_FIELD "labelOffsetX"
#define LABEL_OFFSETY_FIELD "labelOffsetY"
#define LABEL_X_FIELD "labelX"
#define LABEL_Y_FIELD "labelY"
#define LABEL_TEXT_FIELD "labelText"
#define LABEL_ROTATION_FIELD "labelRotation"
// *************************************************************
// GetLabelFields()
// *************************************************************
bool OgrLabelsHelper::GetLabelFields(OGRLayer* ogrLayer, LabelFields& fields)
{
OGRFeatureDefn* fd = ogrLayer->GetLayerDefn();
fields.X = fd->GetFieldIndex(LABEL_X_FIELD);
fields.Y = fd->GetFieldIndex(LABEL_Y_FIELD);
fields.Text = fd->GetFieldIndex(LABEL_TEXT_FIELD);
fields.Rotation = fd->GetFieldIndex(LABEL_ROTATION_FIELD);
fields.OffsetX = fd->GetFieldIndex(LABEL_OFFSETX_FIELD);
fields.OffsetY = fd->GetFieldIndex(LABEL_OFFSETY_FIELD);
return fields.HasFields();
}
// *************************************************************
// AddFieldsForLabels()
// *************************************************************
bool OgrLabelsHelper::AddFieldsForLabels(OGRLayer* ogrLayer)
{
CComBSTR fields[4];
fields[0].Attach(A2BSTR(LABEL_X_FIELD));
fields[1].Attach(A2BSTR(LABEL_Y_FIELD));
fields[2].Attach(A2BSTR(LABEL_TEXT_FIELD));
fields[3].Attach(A2BSTR(LABEL_ROTATION_FIELD));
for (int i = 0; i < 4; i++)
{
OGRFieldDefn oField(OgrHelper::Bstr2OgrString(fields[i].m_str), i == 2 ? OFTString : OFTReal);
oField.SetWidth(i == 2 ? 128 : 0);
oField.SetPrecision(8);
if (ogrLayer->CreateField(&oField) != OGRERR_NONE)
return false;
}
return true;
}
// *************************************************************
// AddLabelFeature()
// *************************************************************
bool OgrLabelsHelper::AddLabel2Feature(ILabels* labels, int shapeIndex, OGRFeature* feature, LabelFields& labelFields)
{
if (!labels || !feature) return false;
CComPtr<ILabel> label = NULL;
labels->get_Label(shapeIndex, 0, &label);
CComBSTR text;
double x, y, rotation, offsetX, offsetY;
label->get_X(&x);
label->get_Y(&y);
label->get_Rotation(&rotation);
label->get_Text(&text);
label->get_OffsetX(&offsetX);
label->get_OffsetY(&offsetY);
if (labelFields.X != -1)
feature->SetField(labelFields.X, x);
if (labelFields.Y != -1)
feature->SetField(labelFields.Y, y);
if (labelFields.Rotation != -1)
feature->SetField(labelFields.Rotation, rotation);
if (labelFields.Text != -1)
feature->SetField(labelFields.Text, OgrHelper::Bstr2OgrString(text.m_str));
if (labelFields.OffsetX != -1)
feature->SetField(labelFields.OffsetX, offsetX);
if (labelFields.OffsetY != -1)
feature->SetField(labelFields.OffsetY, offsetY);
return false;
}