MYSQL CSV Import - невозможно получить объект геометрии из данных, которые вы отправляете в поле GEOMETRY - PullRequest
2 голосов
/ 21 июля 2011

У меня на сервере есть файл CSV, в котором данные выглядят следующим образом;

16777216,17039359,"APNIC Debogon Project"
17367040,17432575,"Tmnet, Telekom Malaysia Bhd."
17435136,17435391,"APNIC Debogon Project"
17498112,17563647,"CJ-HELLOVISION"
17563648,17825791,"Beijing Founder Broadband Network Technology Co.,L"
17825792,18087935,"Allocated to KRNIC Member."
18153984,18154239,"Double Cast"
18157056,18163711,"FAMILY NET JAPAN INCORPORATED"

Я пытаюсь вставить это в мою таблицу, которая структурирована следующим образом:

ipoid    INTEGER  11 NOT NULL PRIMARY KEY
beginip  INTEGER  14 NOT NULL UNSIGNED
endip    INTEGER  14 NOT NULL UNSIGNED
org      VARCHAR  255
ip_poly  POLYGON

У меня также есть пространственный индекс, созданный в поле ip_poly

Я пытаюсь вставить данные csv с помощью следующего кода

LOAD DATA INFILE "/home/GeoIPOrg.csv"
INTO TABLE crm_geo_org
FIELDS
TERMINATED BY ","
ENCLOSED BY "\""
LINES
TERMINATED BY "\n"
(@beginIp,@endIp,@org)
SET
ipoid      := NULL,
beginip := @beginIp,
endip   := @endIp,
ip_poly := GEOMFROMWKB(POLYGON(LINESTRING(
/* clockwise, 4 points and back to 0 */
POINT(@beginIp, -1), /* 0, top left */
POINT(@endIp,   -1), /* 1, top right */
POINT(@endIp,    1), /* 2, bottom right */
POINT(@beginIp,  1), /* 3, bottom left */
POINT(@beginIp, -1)  /* 0, back to start */
))),
org:= @org;

Однако, когда я пытаюсь сделать это, я получаю эту ошибку

ОШИБКА 1416 (22003): невозможно получить геометрический объект из данных, отправленных в поле ГЕОМЕТРИЯ

Есть идеи?

1 Ответ

1 голос
/ 21 июля 2011

В более поздних версиях MySQL вам не нужны преобразования WKB / WKT для построения геометрических объектов.

Кроме того, Polygon здесь избыточно: MBR также может быть построен из одного LineString.

Измените ip_poly на iprange LINESTRING NOT NULL и используйте это:

LOAD DATA INFILE "/home/GeoIPOrg.csv"
INTO TABLE
        crm_geo_org
FIELDS
        TERMINATED BY
                ","
        ENCLOSED BY
                "\""
LINES
        TERMINATED BY "\n"
        (@beginIp, @endIp, @org)
SET     ipoid   := NULL,
        beginip := @beginIp,
        endip   := @endIp,
        iprange := GeomFromWKB(
                        LineString(
                                Point(@beginIp, -1),
                                Point(@endIp, 1)
                                )
                        ),
        org     := @org;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...