На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Роман Твердов (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Роман Твердов
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 14 15 16 17 18 19 20 21 22 23 24 След.
axOpenMapDialog, не работает фильтр типов файлов
 
Компонент axOpenMapDialog исправил. Фильтр возможно задать только программно.
Если Вам срочно необходимо могу выслать ocx.
Изменено: Роман Твердов - 25.05.2011 11:15:33
axOpenMapDialog, не работает фильтр типов файлов
 
Добрый день!
С фильтром разбираемся.

А "подсунуть" можно и без mapOpenData. Например:
[CODE]
       If (DlgOpen.FileName <> "") And (DlgOpen.Execute) Then
           MapView.MapFileName = DlgOpen.FileName
           MapView.MapShow = True
       End If
[/CODE]
Изменено: Роман Твердов - 25.05.2011 10:56:43
axMapFind.MapSelect, где?!
 
Попробуйте вместо mapFind.cMapSelect.AllMaps = false
                 mapFind.cMapSelect.MapSites_set(-1, False)
Поиск без учета скрытых объектов
 
Попробуйте воспользоваться функцией:
 // Установить параметры поиска объектов по области.
 // hMap     - идентификатор открытой карты;
 // object   - объект-область поиска
 // distance - расстояние поиска в метрах
 // nmap     - номер карты поиска; устанавливает границы поиска
 //            по картам.Если nmap=-1;поиск по всем картам
 // флажки;описывающие критерии поиска :
 // filter  - учитывать/не учитывать(1/0) фильтр объектов
 //           (параметры фильтра должны быть установлены заранее
 //           в контексте поиска)
 // inside  - границы поиска объектов по области :
 //           1 - внутри области; 2 - целиком внутри области;
 //           0 - по расстоянию.
 // visible - с учетом/без учета(1/0) видимости объектов на карте
 // action   - порядок поиска объектов :
 //            0 - последовательный поиск по мере запроса объектов;
 //            1 - предварительный отбор всех объектов (главному
 //            окну приложения посылается WM_PROGRESSBAR - maptype.h);
 //            ускоряет многократный запрос отобранных объектов;
 // При ошибке возвращает ноль

function mapSelectAreaEx(Map : HMap; Obj : HOBJ; distance: double;
   filter, inside, visible, action, nmap : integer) : integer;

Пример выслал Вам на почту.
Классификатор + отображение объектов
 
Попробуйте перед  mapPaintExampleRscObject вызвать функцию SetViewportOrgEx(pbExObject.Canvas.Handle,0,0,nil);

Вы можете также посмотреть вывод образца вида объекта в компонентах Gis ToolKit.
[CODE]
procedure TMapObj.Example;
var
 R:TRect;
 CodObj:integer;
begin
 if (FObj<>0) and (ABitmap<>nil) then
   with ABitmap do
     if (Height<>0) and (Width<>0) then begin
       CodObj:=mapObjectCode(FObj);
       if CodObj <> 0 then begin
         R:=Bounds(0,0,Width,Height);
         SetViewportOrgEx(Canvas.Handle,0,0,nil);
         mapPaintExampleSiteObject(FMapView.FMap,
mapGetObjectSiteIdent(FMapView.FMap,FObj),
Canvas.Handle,R,CodObj);
       end;
     end;
end;
[/CODE]

А получить картинку в своей программе:
[CODE]
var
 ObjectFind : TMapObj;
 Image1 : TImage;
...
procedure TfrmFind.ShowSelectedObjExample;
var
 ibit : TBitMap;
begin
ibit := TBitMap.Create;
try
  ibit.Width  := 50;
  ibit.Height := 50;
  ObjectFind.Example(ibit);
  Image1.Picture.Bitmap := ibit;
finally
  ibit.Free;
end;
end;

[/CODE]

Тут для выбранного объекта на карте выводится его образца вида в Image1.
Классификатор + отображение объектов
 
Проверьте rect - координаты клиентской области окна вывода (размер окна).

Например, можно сделать так:
[CODE]

var
 pbExObject: TPaintBox;  

...

Rect:= pbExObject.Canvas.ClipRect;
mapPaintExampleRscObject(FMap, RscH, pbExObject.Canvas.Handle, @Rect,
                          CodeObject);
...
[/CODE]
Классификатор + отображение объектов
 
Для работы с галочкой "Масштабируемость" попробуйте функции.

// Установить/сбросить/запросить масштабируемость объекта
// scale = 1 для установки масштабируемости при увеличении карты
//         0 для сброса признака масштабируемости
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetObjectScale(HOBJ info, long int scale);
_MAPIMP long int _MAPAPI mapGetObjectScale(HOBJ info);

По поводу размеров значка. Как Вам уже писал [QUOTE]Andrey Gheleznyakov пишет:
Классификатор настраивается для базового масштаба. [/QUOTE]

Классификатор карты Подольска Topo100t.rsc настроен для масштаб 1 : 100000.
Классификатор карты Подольска redkit.rsc настроен для масштаб 1 : 200000.

Вот и получается, что создаваемые Вами объекты получаются в 2 раза крупнее.
Поиск без учета скрытых объектов
 
Добрый день!
Получили Ваше письмо. Будем разбираться.
axcMapScreen.Bitmap, Как правильно использовать метод Bitmap элементов управления axcMapView, axcMapScreen?
 
Посмотрите пример FindObj, входящий в состав GIS ToolKit Active.
Из примера переделанное для axcMapScreen
[CODE]
  Private Sub btnSaveWindowBmp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveWindowBmp.Click
       Dim filen1 As String
       Dim parm As axGisToolKit.TxMetaFileBuildParamEx  ' 18/12/2009

       If AxaxcMapScreen1.MapHandle = 0 Then Exit Sub

       AxaxcMapScreen1.PrintScale = AxaxcMapScreen1.ViewScale
       AxaxcMapScreen1.PrintSelect.PlaceInp = axGisToolKit.TxPPLACE.PP_PICTURE
       AxaxcMapScreen1.PrintSelect.SetRegionOut(AxaxcMapScreen1.MapLeft, AxaxcMapScreen1.MapTop + AxaxcMapScreen1.Height, AxaxcMapScreen1.MapLeft + AxaxcMapScreen1.Width, AxaxcMapScreen1.MapTop)
       'aMvMap.Bitmap(filen1)

       If SaveFileDialog1.ShowDialog Then                  ' 18/12/2009
           filen1 = SaveFileDialog1.FileName
           If System.IO.Path.GetExtension(filen1) = ".bmp" Then
               AxaxcMapScreen1.Bitmap(filen1)
           End If
           If System.IO.Path.GetExtension(filen1) = ".emf" Then
               parm.Frame = AxaxcMapScreen1.PrintSelect.GetDFrame(True)
               parm.Scale = AxaxcMapScreen1.ViewScale
               parm.VisualType = 3
               parm.Border = 1
               parm.Intensity = 50
               AxaxcMapScreen1.SaveFrameToEmfEx(filen1, parm)
           End If
       End If
   End Sub
[/CODE]
Высота
 
Для работы с третьей координатой (высотой H) объекта электронной карты, необходимо чтобы для него был установлен соответствующий тип метрики, например, IDDOUBLE3 (трехмерная метрика с плавающей запятой двойной точностью). Каждый объект карты может иметь свой тип метрии, т.е. одни объекты могут иметь 3 координаты (X, Y, H), другие нет (только X, Y). Тип метрики объекта можно установит/получить с помощью свойство TMapObj.Kind. Тип метрики может быть установлен как для существующего объекта, так и для нового. Также можно проверить имеет ли объект трехмерную метрику с помощью свойства TMapObj.IsObject3D, которое возвращает значение true, если объект имеет трехмерную метрику.
При работе с третьей координатой необходимо учитывать, что высота может иметь свой тип (свойство TMapObj.HeightType): абсолютная высота (HT_ALTITUDE) или относительная (HT_RELATIVE). Тип высоты влияет на процесс построение матрицы высот по объектам. Объекты с относительной высотой не влияют на построение матрицы высот.
Чтобы установить значение высоты в конкретной точке метрики объекта можно воспользоваться функций TMapMetric.UpdateHeight, в которой передаются в качестве параметров номер подобъекта объекта карты (при значении 0 обрабатывается сам объект), номер точки в цепочке метрики и значение устанавливаемой высоты.
Добавление и изменение трехмерной координаты метрики точки осуществляется теми же функциями, что и для двумерной метрики (TMapMetric.Append, TMapMetric.Insert, TMapMetric.Update). В качестве входного параметра в каждую из этих процедур передается ссылка на экземпляр класса TCompMapPoint (в нем определены координаты точки). Для того, чтобы установить в TCompMapPoint трехмерные координаты точки необходимо воспользоваться функцией TCompMapPoint.SetPoint3D, где в качестве параметров передается X, Y, H.
Для получения трехмерной координаты точки метрики объекта предназначена функция TCompMapPoint.GetPoint3D.

ВНИМАНИЕ!!!
При работе с трехмерной метрикой объекта необходимо учитывать, что реально высота для объекта может быть и не задана, в этом случае значение высоты принимает значение cERRORHEIGHT = -111111.0. Такое же значение высоты будет, если  для объекта установлена двумерная метрика.
Страницы: Пред. 1 ... 14 15 16 17 18 19 20 21 22 23 24 След.



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности