связка MapServer+Postgis+Mapinfo
-
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 29 авг 2011, 16:51
- Репутация: 1
связка MapServer+Postgis+Mapinfo
Доброго времени суток! Я пытаюсь разобраться со связкой MapServer+Postgis+Mapinfo. Выдает следующую ошибку:
msDrawMap(): Image handling error. Failed to draw layer named 'MapServ'. msPostGISLayerWhichShapes(): Query error. Error (ERROR: syntax error at or near "'MapServ'" LINE 1: ...D("SP_GEOMETRY"),'NDR'),'hex') as geom,"oid" from 'MapServ' ... ^ ) executing query: select encode(ST_AsBinary(ST_Force_2D("SP_GEOMETRY"),'NDR'),'hex') as geom,"oid" from 'MapServ' where SP_GEOMETRY && GeomFromText('POLYGON((0 0,0 10000,10000 10000,10000 0,0 0))',find_srid('',''MapServ'','SP_GEOMETRY')) msPostGISRetrievePK(): Query error. Error executing SQL: select attname from pg_attribute, pg_constraint, pg_class where pg_constraint.conrelid = pg_class.oid and pg_class.oid = pg_attribute.attrelid and pg_constraint.contype = 'p' and pg_constraint.conkey[1] = pg_attribute.attnum and pg_class.relname = ''MapServ'' and pg_table_is_visible(pg_class.oid) and pg_constraint.conkey[2] is null
Исходник MAP
MAP
IMAGETYPE GIF
EXTENT 0 0 10000 10000
SIZE 900 900
IMAGECOLOR 200 200 200
LAYER
NAME 'MapServ'
CONNECTIONTYPE postgis
CONNECTION "user=postgres password=123456 dbname=postgis host=localhost"
DATA "SP_GEOMETRY from 'MapServ'"
TYPE POLYGON
CLASS
COLOR 200 120 123
END
PROCESSING "CLOSE_CONNECTION=DEFER"
END
END
Открываю в MapInfo все работает и редактируется.
msDrawMap(): Image handling error. Failed to draw layer named 'MapServ'. msPostGISLayerWhichShapes(): Query error. Error (ERROR: syntax error at or near "'MapServ'" LINE 1: ...D("SP_GEOMETRY"),'NDR'),'hex') as geom,"oid" from 'MapServ' ... ^ ) executing query: select encode(ST_AsBinary(ST_Force_2D("SP_GEOMETRY"),'NDR'),'hex') as geom,"oid" from 'MapServ' where SP_GEOMETRY && GeomFromText('POLYGON((0 0,0 10000,10000 10000,10000 0,0 0))',find_srid('',''MapServ'','SP_GEOMETRY')) msPostGISRetrievePK(): Query error. Error executing SQL: select attname from pg_attribute, pg_constraint, pg_class where pg_constraint.conrelid = pg_class.oid and pg_class.oid = pg_attribute.attrelid and pg_constraint.contype = 'p' and pg_constraint.conkey[1] = pg_attribute.attnum and pg_class.relname = ''MapServ'' and pg_table_is_visible(pg_class.oid) and pg_constraint.conkey[2] is null
Исходник MAP
MAP
IMAGETYPE GIF
EXTENT 0 0 10000 10000
SIZE 900 900
IMAGECOLOR 200 200 200
LAYER
NAME 'MapServ'
CONNECTIONTYPE postgis
CONNECTION "user=postgres password=123456 dbname=postgis host=localhost"
DATA "SP_GEOMETRY from 'MapServ'"
TYPE POLYGON
CLASS
COLOR 200 120 123
END
PROCESSING "CLOSE_CONNECTION=DEFER"
END
END
Открываю в MapInfo все работает и редактируется.
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: связка MapServer+Postgis+Mapinfo
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 29 авг 2011, 16:51
- Репутация: 1
Re: связка MapServer+Postgis+Mapinfo
Я конечно сильно извиняюсь может я туплю но можно объяснить поподробнее. Я пытался делать запрос в pgAdmin выдает ошибку
Запрос: SELECT "NAME",encode(AsBinary(force_collection(force_2d("SP_GEOMETRY")),'NDR'),'hex')
AS geom,"gid" FROM 'MapServ' WHERE SP_GEOMETRY && GeomFromText('POLYGON((0 0,0 10000,10000 10000,10000 0,0 0))'
,find_srid('','MapServ','SP_GEOMETRY'));
Ошибка:
ERROR: syntax error at or near "'MapServ'"
LINE 2: AS geom,"gid" FROM 'MapServ' WHERE SP_GEOMETRY && GeomFromTe...
^
********** Ошибка **********
ERROR: syntax error at or near "'MapServ'"
SQL state: 42601
Символ: 107
Запрос: SELECT "NAME",encode(AsBinary(force_collection(force_2d("SP_GEOMETRY")),'NDR'),'hex')
AS geom,"gid" FROM 'MapServ' WHERE SP_GEOMETRY && GeomFromText('POLYGON((0 0,0 10000,10000 10000,10000 0,0 0))'
,find_srid('','MapServ','SP_GEOMETRY'));
Ошибка:
ERROR: syntax error at or near "'MapServ'"
LINE 2: AS geom,"gid" FROM 'MapServ' WHERE SP_GEOMETRY && GeomFromTe...
^
********** Ошибка **********
ERROR: syntax error at or near "'MapServ'"
SQL state: 42601
Символ: 107
-
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 29 авг 2011, 16:51
- Репутация: 1
Re: связка MapServer+Postgis+Mapinfo
Кстати пробовал колонку the_geom тот же результат и записывать имя таблицы по разному MapServ,'MapServ',"MapServ" не помогает результат тот же
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: связка MapServer+Postgis+Mapinfo
MapServ - уберите кавычки
SP_GEOMETRY - откуда такое странное название для колонки?
Откуда "NAME" во втором посте? В первом его не было.
SP_GEOMETRY - откуда такое странное название для колонки?
Откуда "NAME" во втором посте? В первом его не было.
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 29 авг 2011, 16:51
- Репутация: 1
Re: связка MapServer+Postgis+Mapinfo
SP_GEOMETRY - это колонка создаваемая EasyLoader там хранится геометрия объектов MapInfo
по полю NAME пробовал сделать аналогию с запросом в представленной вами ветке
по полю NAME пробовал сделать аналогию с запросом в представленной вами ветке
-
- Участник
- Сообщения: 78
- Зарегистрирован: 25 янв 2010, 14:14
- Репутация: 3
Re: связка MapServer+Postgis+Mapinfo
попробуйте
Колонку SP_GEOMETRY надо переименовать в нижний регистр. Сколько я не возился с 5.6.x mapserver'ом, он у меня всегда терял экранирование для неё, а без кавычек PostgreSQL ожидает в нижнем регистре. 6й я не проверял ещё.
Делается так:
+- индексы поломать и запись о геометрии
Код: Выделить всё
...
DATA 'sp_geometry from "MapServ"'
...
Делается так:
Код: Выделить всё
ALTER TABLE "MapServ" RENAME COLUMN "SP_GEOMETRY" TO "sp_geometry"
-
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 29 авг 2011, 16:51
- Репутация: 1
Re: связка MapServer+Postgis+Mapinfo
Колонку "SP_GEOMETRY" переделал с нижним регистром результат тот же
-
- Участник
- Сообщения: 78
- Зарегистрирован: 25 янв 2010, 14:14
- Репутация: 3
Re: связка MapServer+Postgis+Mapinfo
Покажите выводимую ошибку.Клим писал(а):Колонку "SP_GEOMETRY" переделал с нижним регистром результат тот же
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: связка MapServer+Postgis+Mapinfo
Код: Выделить всё
SELECT
"NAME",
encode(AsBinary(force_collection(force_2d("SP_GEOMETRY")),'NDR'),'hex') AS geom,
"gid"
FROM 'MapServ'
WHERE
SP_GEOMETRY
&& GeomFromText('POLYGON((0 0,0 10000,10000 10000,10000 0,0 0))',
find_srid('','MapServ','SP_GEOMETRY'));
Код: Выделить всё
FROM 'MapServ'
Код: Выделить всё
FROM MapServ
У вас еще ошибки остались?
Проверьте таблицу geometry_columns, там поле f_geometry_column как заполнено - SP_GEOMETRY или sp_geometry?
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 29 авг 2011, 16:51
- Репутация: 1
Re: связка MapServer+Postgis+Mapinfo
Исправил название таблицы на mapserv поправил все индексы и записи о геометрии
В f_geometry_column стоит sp_geometry
При FROM mapserv говорит что не может найти таблицу, хотя она есть, и с MapInfo я её легко редактирую
В f_geometry_column стоит sp_geometry
При FROM mapserv говорит что не может найти таблицу, хотя она есть, и с MapInfo я её легко редактирую
-
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 29 авг 2011, 16:51
- Репутация: 1
Re: связка MapServer+Postgis+Mapinfo
Кстати может это поможет SQL на создание таблицы:
-- Sequence: "Проба"."mapserv_MI_PRINX_seq"
-- DROP SEQUENCE "Проба"."mapserv_MI_PRINX_seq";
CREATE SEQUENCE "Проба"."mapserv_MI_PRINX_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 4
CACHE 1;
ALTER TABLE "Проба"."mapserv_MI_PRINX_seq" OWNER TO postgres;
-- Table: "Проба"."mapserv"
-- DROP TABLE "Проба"."mapserv";
CREATE TABLE "Проба"."mapserv"
(
"ID" smallint,
"Наименование" character varying(70),
"Аббревиатура" character varying(6),
"Площадь_га" double precision,
"Примечание" character varying(50),
"MI_STYLE" character varying(254),
"MI_PRINX" integer NOT NULL DEFAULT nextval('"Проба"."mapserv_MI_PRINX_seq"'::regclass),
"sp_geometry" geometry,
CONSTRAINT "mapserv_pkey" PRIMARY KEY ("MI_PRINX"),
CONSTRAINT "enforce_dims_sp_geometry" CHECK (st_ndims("sp_geometry") = 2),
CONSTRAINT "enforce_srid_sp_geometry" CHECK (st_srid("sp_geometry") = (-1))
)
WITH (
OIDS=TRUE
);
ALTER TABLE "Проба"."mapserv" OWNER TO postgres;
-- Index: "Проба"."SIndex_mapserv_sp_geometry"
-- DROP INDEX "Проба"."SIndex_mapserv_sp_geometry";
CREATE INDEX "SIndex_mapserv_sp_geometry"
ON "Проба"."mapserv"
USING gist
("sp_geometry");
insert into "mapinfo"."mapinfo_mapcatalog" (spatialtype, tablename, ownername, spatialcolumn, db_x_ll, db_y_ll, db_x_ur, db_y_ur, coordinatesystem, symbol, xcolumnname, ycolumnname, renditiontype, renditioncolumn, renditiontable, view_x_ll, view_y_ll, view_x_ur, view_y_ur)
values ( 19.3, 'mapserv', 'Проба', 'sp_geometry', 4994.783505, 4998.525775, 5009.051550, 5003.453610, 'NonEarth Units "m" Bounds (0, 0) (10000, 10000)', '', 'NO_COLUMN', 'NO_COLUMN', 1, 'MI_STYLE', '' , 0.000000, 0.000000, 10000.000000, 10000.000000);
INSERT INTO "public"."geometry_columns" (
f_table_catalog, f_table_schema, f_table_name, f_geometry_column,
coord_dimension, srid, "type")
VALUES ('', 'Проба', 'mapserv', 'sp_geometry',
2, -1, 'GEOMETRY');
-- Sequence: "Проба"."mapserv_MI_PRINX_seq"
-- DROP SEQUENCE "Проба"."mapserv_MI_PRINX_seq";
CREATE SEQUENCE "Проба"."mapserv_MI_PRINX_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 4
CACHE 1;
ALTER TABLE "Проба"."mapserv_MI_PRINX_seq" OWNER TO postgres;
-- Table: "Проба"."mapserv"
-- DROP TABLE "Проба"."mapserv";
CREATE TABLE "Проба"."mapserv"
(
"ID" smallint,
"Наименование" character varying(70),
"Аббревиатура" character varying(6),
"Площадь_га" double precision,
"Примечание" character varying(50),
"MI_STYLE" character varying(254),
"MI_PRINX" integer NOT NULL DEFAULT nextval('"Проба"."mapserv_MI_PRINX_seq"'::regclass),
"sp_geometry" geometry,
CONSTRAINT "mapserv_pkey" PRIMARY KEY ("MI_PRINX"),
CONSTRAINT "enforce_dims_sp_geometry" CHECK (st_ndims("sp_geometry") = 2),
CONSTRAINT "enforce_srid_sp_geometry" CHECK (st_srid("sp_geometry") = (-1))
)
WITH (
OIDS=TRUE
);
ALTER TABLE "Проба"."mapserv" OWNER TO postgres;
-- Index: "Проба"."SIndex_mapserv_sp_geometry"
-- DROP INDEX "Проба"."SIndex_mapserv_sp_geometry";
CREATE INDEX "SIndex_mapserv_sp_geometry"
ON "Проба"."mapserv"
USING gist
("sp_geometry");
insert into "mapinfo"."mapinfo_mapcatalog" (spatialtype, tablename, ownername, spatialcolumn, db_x_ll, db_y_ll, db_x_ur, db_y_ur, coordinatesystem, symbol, xcolumnname, ycolumnname, renditiontype, renditioncolumn, renditiontable, view_x_ll, view_y_ll, view_x_ur, view_y_ur)
values ( 19.3, 'mapserv', 'Проба', 'sp_geometry', 4994.783505, 4998.525775, 5009.051550, 5003.453610, 'NonEarth Units "m" Bounds (0, 0) (10000, 10000)', '', 'NO_COLUMN', 'NO_COLUMN', 1, 'MI_STYLE', '' , 0.000000, 0.000000, 10000.000000, 10000.000000);
INSERT INTO "public"."geometry_columns" (
f_table_catalog, f_table_schema, f_table_name, f_geometry_column,
coord_dimension, srid, "type")
VALUES ('', 'Проба', 'mapserv', 'sp_geometry',
2, -1, 'GEOMETRY');
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: связка MapServer+Postgis+Mapinfo
Использование кириллицы в именах полей и таблиц - моветон, не делайте так.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 29 авг 2011, 16:51
- Репутация: 1
Re: связка MapServer+Postgis+Mapinfo
Название схем можно и английским сделать а вот названия полей и таблиц все равно необходимо кириллицей, т.к. того требует основной проект, а конечный пользователь обычно не может правильно прочитать транс лит и тем более не знает английский
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей