При подключении к источнику данных ArcGIS применяет некоторые правила. Когда ArcGIS подключается и считывает данные из базы, применяются следующие правила:
Имена объектов
СУБД имеют различные требования к символам, используемым для названий объектов. Большинство имен должны начинаться с буквы и не содержать пробелов, обратного слеша или зарезервированных ключевых слов СУБД. Некоторые СУБД позволяют использовать специальные символы, такие как прямую косую черту (/), подчеркивание (_), знак доллара ($), тире (-), точку (.) или смешанный регистр. Иногда СУБД позволяет использовать специальные символы, зарезервированные ключевые слова или имена со смешанным, верхним или нижним регистром, если вы задаете имя объекта в разделителях, например, в двойных кавычках.
Однако ArcGIS не распознает такие разделители. Не создавайте таблиц, классов объектов, баз данных, пользователей*, ролей или других объектов с именами, требующих разделителей, если вы собираетесь использовать их с ArcGIS. Объект будет создан в базе данных, но ArcGIS не сможет получить к нему доступ.
*Имена пользователей SQL Server со специальными символами обозначаются разделителями для поддержки учетных записей Active Directory Groups и Windows Authenticated.
Длина имени
ArcGIS может считывать и (в некоторых случаях) создавать объекты базы данных, такие как таблицы, виды и пользователи. Максимально разрешенная в ArcGIS длина имен для таких объектов указана здесь.
Указанное число знаков предполагает использование текста в формате ANSI. Символы в формате UTF-8 используют по крайней мере в два раза большее число байт, чем ANSI, что вдвое уменьшает допустимое число знаков.
ALTIBASE | DB2 | Informix | Netezza | Oracle | PostgreSQL | SAP HANA | SQL Server | Teradata | |
---|---|---|---|---|---|---|---|---|---|
Имя базы данных (Database name) | 31 | 8 | 31 | 31 | 30 | 31 | 31 | 31 | 31 |
Имя поля (столбца) | 31 | 31 | 31 | 31 | 30 | 31 | 31 | 31 | 31 |
Имя индекса | 40 | 128 | 128 | Не используется | 30 | 63 | 127 | 128 | 128 |
Пароль | 22 (ALTIBASE на Windows) 16 (ALTIBASE на других ОС, кроме Windows) | 31 | 31 | 31 | 31 | 31 | 127 | 31 | 30 |
Имя таблицы или класса объектов | 40 | 128 | 128 | 128 | 30 | 63 | 127 | 128 | 128 |
Имя пользователя | 31 | 30 | 31 | 31 | 30 | 31 | 31 | 31 | 31 |
Имя представления | 40 | 128 | 128 | 128 | 30 | 63 | 127 | 128 | 128 |
Проверка геометрии
Когда вы создаете данные в базе с помощью клиента ArcGIS, ArcGIS проверяет геометрию на основе определенных правил. Если создаваемая в клиенте ArcGIS геометрия является недопустимой, ArcGIS не позволит разместить ее в базе данных.
Функции конструктора Esri и IBM ST_Geometry, а также ArcGIS API, используют для проверки геометрии данных библиотеку геометрии Esri. Поэтому даже если вы создаете геометрию Esri или IBM ST_Geometry с помощью SQL, применяются правила проверки и недопустимая геометрия не будет размещена в базе.
Другие пространственные типы, такие как SDO_Geometry, геометрия PostGIS и геометрия или география Microsoft SQL Server, имеют собственные функции построения и используют собственные правила проверки геометрии. Эти правила могут не совпадать с правилами ArcGIS. Клиенты ArcGIS проверяют геометрию при чтении данных и не отображают такую геометрию, которая нарушает правила проверки ArcGIS. Если вы подключаетесь к базе данных, которая содержит данные, созданные не в ArcGIS, необходимо помнить о применении правил ArcGIS.
Правила проверки для точек
- Площадь и длина точек равны 0,0.
- Конверт (envelope) одной точки равен значениям X, Y этой точки.
- Конверт из нескольких точек равен минимальному прямоугольнику, ограничивающему точки.
Правила проверки для простых линий (simple lines) или последовательностей линий (linestrings)
- Каждая часть линии должна иметь по меньшей мере две различные точки.
- Каждая часть линии не должна пересекать сама себя. Начальная и конечная точка линии могут быть одинаковыми, но полученное замкнутое кольцо не будет считаться полигоном.
- Части линии могут касаться друг друга в конечных точках.
- Длина линии равна сумме длин всех ее частей.
Правила проверки для линий (lines) или слабо структурированных последовательностей линий (spaghetti strings)
- Линии могут пересекать сами себя.
- Каждая часть линии должна иметь по меньшей мере две различные точки.
- Длина линии равна сумме длин всех ее частей.
Правила проверки и операции для полигонов
- Висячие узлы недопустимы.
- Сегменты линий, составляющие полигон, должны быть замкнуты (при этом z-координаты начальной и конечной точек также должны совпадать) и не должны перекрещиваться.
- Если полигоны содержат пробелы, они должны полностью располагаться внутри внешней границы площади. Пробелы, находящиеся за пределами внешней границы, недопустимы.
- Пробел, имеющий одну общую точку с внешней границей, преобразуется в полигон.
- Несколько пробелов, имеющих общие точки, объединяются в один пробел.
- Составные полигоны не могут перекрываться. Однако две части могут касаться в одной общей точке.
- Составные полигоны не могут иметь общих границ.
- Если два кольца имеют общую границу, они сливаются в одно кольцо.
- В качестве длины геометрии рассчитывается общий периметр, включая границы всех пробелов в полигонах с пробелами.
- Рассчитывается площадь.
- Рассчитывается конверт.
- Точки полигона хранятся в базе по направлению против часовой стрелки, хотя клиенты ArcGIS могут обратить точки в любом направлении. Если создается полигон, содержащий координаты в направлении по часовой стрелке, ArcGIS изменяет это направление и записывает координаты против часовой стрелки.
В этом примере начальная точка – a, и координаты должны быть перечислены в порядке a,b,c,d,a.
- Полигон может иметь выемки, в тех местах, где пустоты внутри полигона касаются внешней границы.
- Полигоны с выемками имеют внутреннее кольцо, касающееся внешней границы. Они не считаются полигонами с пробелами.
- Если в полигоне имеется пробел, в первую очередь считывается внешняя граница. Точки пробелов хранятся в направлении, противоположном направлению внешней границы.
В примере на следующем рисунке внешняя граница описана в порядке a,b,c,d,a, а пробел – в порядке e,f,g,h,e. Весь полигон, как объект, хранится в виде a,b,c,d,a,e,f,g,h,e.
- Если два пробела касаются в одной общей точке, они считаются за один пробел, а не за два.
В приведенном примере две внутренние области являются единым пробелом, так как они имеют общую точку g.
- Как показано на следующем рисунке, сочетания обычных полигонов и полигонов с пробелами могут иметь достаточно сложную структуру. Внешняя граница представляет озеро с островом. На острове тоже есть небольшое озеро.
Можно представить такие полигоны как один, два или три объекта. Каждый полигон может храниться как отдельный объект. Большое озеро является полигоном с пробелом. Граница большого озера является внешней границей формы, тогда как остров представлен границей ее единственного пробела. Остров также является полигоном с пробелом. Граница острова является внешней границей, тогда как маленькое озеро представлено пробелом. Маленькое озеро является одним полигоном.
Если озера являются важными объектами, один полигон с пробелом может представлять большое озеро, а второй полигон – малое озеро. Также для отображения объектов можно использовать составные полигоны. Первой частью полигона будет большое озеро с пробелом, представляющим остров. Второй частью будет малое озеро.
- Нулевая геометрия допустима и действует как заполнитель. Они позволяют хранить атрибутивную строку без соответствующей геометрии. Например, нулевая геометрия может появиться как результат запроса пересечения двух непересекающихся полигонов.
Так как площади A и B не касаются друг друга, в результате запроса их пересечения будет возвращена пустая геометрия.
- Объекты обладают размерами. Объект обладающий только координатами x и y, считается двухмерным. Объекты с z-координатами и измерениями являются трехмерными. Объект также может иметь нулевое измерение.
Пространственные метаданные
Базы данных хранят метаданные пространственных данных. Клиенты ArcGIS могут считывать информацию о типе классов объектов (например, точки, линии и полигоны), размерности (x, y, z и m координаты), пространственной привязке, уникальном идентификаторе и экстенте класса объектов из системных таблиц базы геоданных. Эти таблицы недоступны, если ArcGIS подключается к классу объектов в базе данных. Поэтому ArcGIS должен получать эти сведения из других источников.
При перетаскивании класса пространственных объектов (пространственной таблицы) в ArcMap создается слой запроса. Определение слоя запроса в ArcMap происходит следующим образом:
- В базе данных запрашивается информация о пространственной таблице, в частности, размерность, пространственная привязка и тип геометрии.
- Если эта информация не определена для всей таблицы, ArcMap считывает первую строку таблицы и использует информацию, указанную для этого объекта.
- Если пространственная привязка, тип геометрии или размерность таблицы не могут быть определены по первой строке – например, таблица является пустой, или эта строка имеет пользовательскую пространственную привязку – нужная информация для определения слоя будет запрошена у пользователя.
- ArcMap, отправляя в базу данных запрос, подбирает столбец, отличный от NULL, который можно использовать как уникальный идентификатор строк (ObjectID) в отдельной таблице. Если подходящий столбец не найден, определение ObjectID таблицы будет запрошено у пользователя.
- Наконец, ArcMap вычисляет экстент данного слоя при добавлении его на карту.
Поскольку данные, отображаемые в ArcMap, зависят от слоя запросов, можно открыть определение слоя запросов и изменить его вручную. К примеру, если класс пространственных объектов содержит как точки, так и полигоны, можно выбрать нужный тип геометрии, открыв определение слоя запросов. Кроме того, если класс пространственных объектов содержит несколько пространственных столбцов, можно открыть определение слоя запроса и изменить запрос так, чтобы использовался нужный столбец. Имейте в виду, что путем изменения запроса нельзя отобразить неподдерживаемые типы данных.