К основной карте нужно добавить временную карту и создавать на ней объекты, с целью дальнейшего сохранения фрагмента основной карты вместе с временной картой в Emf.
Делаем это так:
Var TempObject : integer; TempSite : integer; res : integer; begin
Скачали с сайта gisinfo.ru последний дистрибутив GIS ToolKit 14.5.2.1 Установили под Delphi XE5 Все нормально, но почему-то перестал работать метод Add при добавлении семантики в визуальном компоненте TMapFind Что-то я не так делаю?
Собираем объект и подобъекты его, в Мультиполигон следующим образом:
Скрытый текст
[CODE] If XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].nodeName = 'spatials_elements' then begin SubObjCount := XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes.length; SubObjNum := 0; // Прокручиваем подобъекты в цикле For w := 0 to SubObjCount-1 do begin
If w = 0 then begin hSite := mapGetSiteIdent(form_main.mvMap.MapHandle,1); hObjKPT := mapCreateSiteObject(form_main.mvMap.MapHandle, hSite,KM_IDDOUBLE2, 0); mapRegisterObject(hObjKPT, 10000017, OL_SQUARE); end;
If w > 0 then SubObjNum := mapCreateSubject(hObjKPT);
If XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes[w].nodeName = 'spatial_element' then begin For r := 0 to XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes[w].childNodes.length-1 do begin If XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes[w].childNodes[r].nodeName = 'ordinates' then begin For t := 0 to XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes[w].childNodes[r].childNodes.length-1 do begin If XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes[w].childNodes[r].childNodes[t].nodeName = 'ordinate' then begin For z := 0 to XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes[w].childNodes[r].childNodes[t].childNodes.length-1 do begin If XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes[w].childNodes[r].childNodes[t].childNodes[z].nodeName = 'x' then tmp_X := StrToFloat(XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes[w].childNodes[r].childNodes[t].childNodes[z].childNodes[0].nodeValue); If XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes[w].childNodes[r].childNodes[t].childNodes[z].nodeName = 'y' then tmp_Y := StrToFloat(XMLDocument.DOMDocument.documentElement.childNodes[a].childNodes[b].childNodes[c].childNodes[d].childNodes[e].childNodes[g].childNodes[h].childNodes[k].childNodes[m].childNodes[n].childNodes[q].childNodes[w].childNodes[r].childNodes[t].childNodes[z].childNodes[0].nodeValue); end; mapAppendPointPlane(hObjKPT, tmp_X, tmp_Y, SubObjNum); end; end; end; end; end; end;[/CODE]
Все работает хорошо тогда, когда подобъекты стандартные, т.е. находятся внутри объекта или касаются. Но если подобъект находится на расстоянии от объекта, то такой код не срабатывает, т.е. объект наносится на карту, а вот подобъект его нет. QGis показывает, что это Многоконтурный объект, на скриншоте он красным цветом. Как решить вопрос?
[QUOTE]Денис Вицко написал: Актуальной версией GIS ToolKit в настоящее время является 14.4.3Рекомендуем прислать запрос на предоставление актуальной версии GIS ToolKit Free.[/QUOTE] Сделали запрос и получили актуальную версию GIS ToolKit 14.4.3.0 Free Наблюдается проблема неверной передачи координат при создании объекта площадной контур линия без заливки если не установлена команда Commit. Если команда Commit есть, то все хорошо. Если команды Commit нет, то наблюдается "хвостик" в левом нижнем углу объекта. Нам нужно, чтобы команды Commit не было.
В качестве рамки с неизменяемыми шириной и высотой мы используем объект MapObj3 До обновления с GIS ToolKit 14.1 Free на GIS ToolKit 14.2 Free сохранение фрагмента карты в Emf работало хорошо. Теперь же, похоже только узкий кусочек карты сохраняется в Emf, а не то, что передаем. Что-то изменилось?
// Сохранение в файл Emf NameEmf := 'c:\users\'+UserName+'\Report1.emf';
FillChar(parm, SizeOf(TMETAFILEBUILDPARMEX),0);
With parm do begin Frame.X1 := form_main.MapObj3.Metric.Points[0,1].X; Frame.Y1 := form_main.MapObj3.Metric.Points[0,1].Y; Frame.X2 := form_main.MapObj3.Metric.Points[0,3].X; Frame.Y2 := form_main.MapObj3.Metric.Points[0,3].Y; Scale := form_main.mvMap.ViewScale; VisualType:= cVT_SCREEN; // VisualType:= cVT_PRINT; Border :=0; DontClip :=0; Black :=0; end;
[QUOTE]Денис Вицко написал: Но, судя по тому, что у Вас в подобъект второго объекта фактически заносится метрика основного контура этого же (второго) объекта, а не исходного (первого), возникает подозрение, что Вы оба TMapObj настроили на один и тот же объект (второй).[/QUOTE] Да, все стало лучше. При компиляции программа также не дает предупреждений. Спасибо большое.