как быть, с чего начать... разработка в ArcGIS (ArcObjects)
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 22 сен 2008, 07:19
- Репутация: 0
- Откуда: Astana
- Контактная информация:
как быть, с чего начать... разработка в ArcGIS (ArcObjects)
привет форумчане, я новичек в системе ArcGIS, раньше программировал на дельфи и немножко на ВБ, мне tools к ArcGIS надо написать, т.е, есть карты города, адресный поиск организовать надо, т.е юзер вводит имя улицы и номер дома на интерфейсе и находит обьект. Как лучше сделать, через COM или же через макросы ? как правильно загрузить атрибутивные данные, т.е с mdb или с dbf как загрузить названия улиц и номера домов ? какие компоненты или библиотеки использовать надо, мне желательно с помощью запросов SQL используя LIKEзагуризить данные
За ранее благодарен !!!
За ранее благодарен !!!
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
А какая разница - один черт COM, хоть через макросы, хоть через ДельфиDido писал(а):Как лучше сделать, через COM или же через макросы ?
Тоже без разницы, хоть на АДе, все зависит от того, как организован тот интерфейс, в который юзер вводит имя улицы и номер домаDido писал(а):как правильно загрузить атрибутивные данные, т.е с mdb или с dbf как загрузить названия улиц и номера домов ?какие компоненты или библиотеки использовать надо, мне желательно с помощью запросов SQL используя LIKEзагуризить данные
По делу - гляньте сюда, надеюсь, разберетесь
http://www.dataplus.ru/forum/forum_posts.asp?TID=6002
По-моему, интерфейс IQueryFilter должен понимать LIKE, только формат может быть отличный от классического SQL
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 22 сен 2008, 07:19
- Репутация: 0
- Откуда: Astana
- Контактная информация:
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
AndreyL спс что ответил, СОМ имеется виде dll-ку написать к ArcMap или же через макросы проще ? на счет интерфейса, 2 окна для ввода и одна кнопка 
IQueryFilter не понимает LIKE, юзал уже

IQueryFilter не понимает LIKE, юзал уже
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
Впрочем, а какая разница, писать ДЛЛ-ку, или макрос – выборка не такая сверхскоростная задача. Если хочется скрыть код – тогда понятно.
Не понял, зачем два окна – для того чтобы задать несколько значений достаточно одного. Или под окном понимается что-то другое - с точки зрения программиста С все элементы управления окна, однако я тоже иногда делфист.
Далее, по поводу ЛайК – как пишете? А в Определяющем Запросе (Definition Query) слоя Ваша запись работает? Там еще апострофы бы не пропустить.
Не понял, зачем два окна – для того чтобы задать несколько значений достаточно одного. Или под окном понимается что-то другое - с точки зрения программиста С все элементы управления окна, однако я тоже иногда делфист.
Далее, по поводу ЛайК – как пишете? А в Определяющем Запросе (Definition Query) слоя Ваша запись работает? Там еще апострофы бы не пропустить.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
Есть книжка по программированию ArcObjects на VBA, возможно что-нибудь полезное найдёте.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 22 сен 2008, 07:19
- Репутация: 0
- Откуда: Astana
- Контактная информация:
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
_DR_ спасибо за книжку, буду читать....
AndreyL, код скрывать не буду, че мне, жалко что-ль, пусть смотрят
на счет окон, я так условно сказал, например:юзер выбирает из комбобокса_1 улицу и из комбобокса_2 номер дома (не вводит,а выбирает), потом нажимает на кнопку "Показать"
я начал загружать данные через ADODB компоненты:
иначе говоря, мне получается надо найти полигональный обьект(зданий) и выделить его(Zoom) ?
AndreyL, код скрывать не буду, че мне, жалко что-ль, пусть смотрят

на счет окон, я так условно сказал, например:юзер выбирает из комбобокса_1 улицу и из комбобокса_2 номер дома (не вводит,а выбирает), потом нажимает на кнопку "Показать"
я начал загружать данные через ADODB компоненты:
Код: Выделить всё
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim str, SQL As String
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
MDB= path+'map.mdb'
'txtStreet.Text - Edit поле, где юзер вводит названия улицы
If txtStreet.Text <> "" Then
SQL = "Select НАИМЕНОВАН, ID from STREETS Where НАИМЕНОВАН LIKE '*" & Trim(txtStreet.Text) & "*'"
Else
SQL = "Select НАИМЕНОВАН, ID from STREETS"
End If
cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MDB;Persist Security Info=False")
rs.Open SQL, cn, , , adCmdText
If rs.RecordCount <= 0 Then Exit Sub
lstStreet.Clear 'lstStreet- куда загружаю названия улиц
For i = 1 To rs.RecordCount
lstStreet.AddItem (rs.Fields(0).Value)
rs.MoveNext
Next i
rs.Close
cn.Close
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
Пока (то, что я понял из Вашего кода) Вы пытаетесь загрузить в txtStreet все названия улиц. Вот только не помню сейчас АДО-вские определения SQL, но в Аксессе ЛАЙК пишется со скобками (подразумевается, что это функция) и кавычками (не апострофами). Про выделение пока и речи нет – это когда юзер что-то выберет из этих списков.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 22 сен 2008, 07:19
- Репутация: 0
- Откуда: Astana
- Контактная информация:
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
txtStreet.Text- сюда юзер начинает набивать по буквам
lstStreet, результат запроса LIKE заргужается
на счет ЛАЙК в Аксессе работает как есть,я ручками пробовал
ваще я направильном пути
lstStreet, результат запроса LIKE заргужается
на счет ЛАЙК в Аксессе работает как есть,я ручками пробовал

ваще я направильном пути

-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
Ради Бога! Только ГИС пока не пахнет. Когда определитесь с улицами и домами – тогда начнется ГИС. Насколько я понимаю, тогда ЛАЙК уже не нужен, т.е. вопрос о синтаксисе ЛАЙКа относится к АДО, а не к IQueryFilter.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 22 сен 2008, 07:19
- Репутация: 0
- Откуда: Astana
- Контактная информация:
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
ну хотел сделать через IQueryFilter, не понимает он ЛАЙКЕ, может мне не стоит применять ADO ваще, не знаю и по этому спрашивал как правильно это сделать...советы ваши нужны мне, задача надесюь ясна вам...AndreyL писал(а):Ради Бога! Только ГИС пока не пахнет. Когда определитесь с улицами и домами – тогда начнется ГИС. Насколько я понимаю, тогда ЛАЙК уже не нужен, т.е. вопрос о синтаксисе ЛАЙКа относится к АДО, а не к IQueryFilter.
За ранее спасибо !!!
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
В принципе Вы все делаете правильно – получить список улиц и номера домов из таблицы – это не ГИС (в том же Аксессе можно решить), хотя инструменты для работы с таблицами есть и в АркГИС (хотя на АДе, по-моему, проще и компактнее). А вот когда улица и номер уже выбраны, и нужно показать объект на карте – вот это уже ГИС. Ссылку на код я Вам давал.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 22 сен 2008, 07:19
- Репутация: 0
- Откуда: Astana
- Контактная информация:
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
по ссылке я прошелся, там не с полигонами работаете,а с точками...или я ошибаюсь...?AndreyL писал(а):В принципе Вы все делаете правильно – получить список улиц и номера домов из таблицы – это не ГИС (в том же Аксессе можно решить), хотя инструменты для работы с таблицами есть и в АркГИС (хотя на АДе, по-моему, проще и компактнее). А вот когда улица и номер уже выбраны, и нужно показать объект на карте – вот это уже ГИС. Ссылку на код я Вам давал.
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
И что? Полигоны выделяются точно так же, как точки – никакой разницы. Единственное, нужно будет определить координаты центра полигона для смещения (если это вообще нужно).Dido писал(а):по ссылке я прошелся, там не с полигонами работаете,а с точками...или я ошибаюсь...?
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
Вот код - минимально передалал
Правда центрировать будет не по сентру полигона, а по первому вертексу. Если нужно, чтобы по центру полигона, то, тадеюсь, сами найдете, как это сделать, заодно поделитесь. Или можно вопрос на ДатаПлюсовком форуме задать - там есть специальная ветка для программистов.
Код: Выделить всё
Public Sub ShowPoint()
'On Error GoTo Err_ShowPoint
Dim pEnumLayers As IEnumLayer
Dim pLayer As ILayer
Dim pMap As IMxDocument
Dim sLayerName As String
Set pMap = ThisDocument
Set pEnumLayers = pMap.FocusMap.Layers
sLayerName = ' тут присваиваем имя слоя
spoint = ' тут присваиваем маску поиска
If pEnumLayers Is Nothing Then Exit Sub
' find the requested layer:
Set pLayer = pEnumLayers.Next
Do While Not pLayer Is Nothing
If UCase(pLayer.Name) = UCase(sLayerName) Then Exit Do
Set pLayer = pEnumLayers.Next
Loop
If pLayer Is Nothing Then Exit Sub
Dim pQueryFilter As IQueryFilter
Set pQueryFilter = New QueryFilter
pQueryFilter.WhereClause = spoint
Dim pFeatureSelection As IFeatureSelection
Set pFeatureSelection = pLayer
pFeatureSelection.SelectFeatures pQueryFilter, esriSelectionResultNew, True
Dim pSelectionSet As ISelectionSet
Set pSelectionSet = pFeatureSelection.SelectionSet
i = pSelectionSet.IDs.Next
Dim pPt_FeatureClass As IFeatureClass
Dim pPt_FeatureLayer As IFeatureLayer
Set pPt_FeatureLayer = pLayer
Set pPt_FeatureClass = pPt_FeatureLayer.FeatureClass
Dim pFeature As IFeature
Dim pPt_Geometry As IGeometry
Dim pPoligon As IPolygon
FieldIndex = pPt_FeatureClass.FindField("Shape")
Set pFeature = pPt_FeatureClass.GetFeature(i)
Set pPt_Geometry = pFeature.Value(FieldIndex)
Set pPoligon = pPt_Geometry
Dim pEnvelope As IEnvelope
Dim pActiveView As IActiveView
Dim pDisplayTransform As IDisplayTransformation
Set pActiveView = pMap.FocusMap
Set pDisplayTransform = pActiveView.ScreenDisplay.DisplayTransformation
Set pEnvelope = pDisplayTransform.VisibleBounds
Dim dXmin As Double, dYmin As Double, dXmax As Double, dYmax As Double
Dim dX As Double, dY As Double, MyCheck As Boolean
pEnvelope.QueryCoords dXmin, dYmin, dXmax, dYmax
Dim pGeo As IGeometry
Set pGeo = pPoligon
Dim pSpRef As ISpatialReference
Set pSpRef = pEnvelope.SpatialReference
pGeo.Project pSpRef
dX = pPoligon.ToPoint.X
dY = pPoligon.ToPoint.Y
MyCheck = (dX < dXmin) Or (dX > dXmax) Or (dY < dYmin) Or (dY > dYmax)
If MyCheck Then
pEnvelope.CenterAt pPoligon.ToPoint
End If
pDisplayTransform.VisibleBounds = pEnvelope
pMap.ActiveView.Refresh
Err_ShowPoint:
Set app = Nothing
End Sub
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 22 сен 2008, 07:19
- Репутация: 0
- Откуда: Astana
- Контактная информация:
Re: как быть, с чего начать... разработка в ArcGIS (ArcObjects)
AndreyL огромное вам спасибо, буду пробовать...AndreyL писал(а):Вот код - минимально передалалПравда центрировать будет не по сентру полигона, а по первому вертексу. Если нужно, чтобы по центру полигона, то, тадеюсь, сами найдете, как это сделать, заодно поделитесь. Или можно вопрос на ДатаПлюсовком форуме задать - там есть специальная ветка для программистов.Код: Выделить всё
Public Sub ShowPoint() 'On Error GoTo Err_ShowPoint Dim pEnumLayers As IEnumLayer Dim pLayer As ILayer Dim pMap As IMxDocument Dim sLayerName As String Set pMap = ThisDocument Set pEnumLayers = pMap.FocusMap.Layers sLayerName = ' тут присваиваем имя слоя spoint = ' тут присваиваем маску поиска If pEnumLayers Is Nothing Then Exit Sub ' find the requested layer: Set pLayer = pEnumLayers.Next Do While Not pLayer Is Nothing If UCase(pLayer.Name) = UCase(sLayerName) Then Exit Do Set pLayer = pEnumLayers.Next Loop If pLayer Is Nothing Then Exit Sub Dim pQueryFilter As IQueryFilter Set pQueryFilter = New QueryFilter pQueryFilter.WhereClause = spoint Dim pFeatureSelection As IFeatureSelection Set pFeatureSelection = pLayer pFeatureSelection.SelectFeatures pQueryFilter, esriSelectionResultNew, True Dim pSelectionSet As ISelectionSet Set pSelectionSet = pFeatureSelection.SelectionSet i = pSelectionSet.IDs.Next Dim pPt_FeatureClass As IFeatureClass Dim pPt_FeatureLayer As IFeatureLayer Set pPt_FeatureLayer = pLayer Set pPt_FeatureClass = pPt_FeatureLayer.FeatureClass Dim pFeature As IFeature Dim pPt_Geometry As IGeometry Dim pPoligon As IPolygon FieldIndex = pPt_FeatureClass.FindField("Shape") Set pFeature = pPt_FeatureClass.GetFeature(i) Set pPt_Geometry = pFeature.Value(FieldIndex) Set pPoligon = pPt_Geometry Dim pEnvelope As IEnvelope Dim pActiveView As IActiveView Dim pDisplayTransform As IDisplayTransformation Set pActiveView = pMap.FocusMap Set pDisplayTransform = pActiveView.ScreenDisplay.DisplayTransformation Set pEnvelope = pDisplayTransform.VisibleBounds Dim dXmin As Double, dYmin As Double, dXmax As Double, dYmax As Double Dim dX As Double, dY As Double, MyCheck As Boolean pEnvelope.QueryCoords dXmin, dYmin, dXmax, dYmax Dim pGeo As IGeometry Set pGeo = pPoligon Dim pSpRef As ISpatialReference Set pSpRef = pEnvelope.SpatialReference pGeo.Project pSpRef dX = pPoligon.ToPoint.X dY = pPoligon.ToPoint.Y MyCheck = (dX < dXmin) Or (dX > dXmax) Or (dY < dYmin) Or (dY > dYmax) If MyCheck Then pEnvelope.CenterAt pPoligon.ToPoint End If pDisplayTransform.VisibleBounds = pEnvelope pMap.ActiveView.Refresh Err_ShowPoint: Set app = Nothing End Sub
в форуме дата+ редко отвечают, и я сомневаюсь, что там есть разработчики, так как там курсы по программированию ArcObject не проводятся, нашел курс только в Новосибирске ( с 29.09 по 3.10 присоединяйтесь)
www.dataeast.ru
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость