Access

0 голосов
спросил 23 Янв, 08 от Serg_Sh (240 баллов) в категории Программные продукты Esri

Подскажите........

Каким образом можно обеспечить выбор пространственных данных непосредственно из базы Access

21 Ответы

0 голосов
ответил 23 Янв, 08 от geologic (39,860 баллов)
ВЫ имеете в виду из пространственной базы, или из любой базы вообще? В любом случае нужно, чтобы в атрибутах объектов были хоть какие-то координаты. В геоБД для точек они кажется имеются, остальными нужно озаботиться вручную. В собственной БД, если она собирается по координатным данным (например, по результатам изысканий) координат любых точек любых объектов полно, но задача обычно стоит правильно их структурировать.

Координатные запросы уже отдельная задача, и не такая сложная, по сравнению с вышеперечисленными.

На эту тему целая лекция есть, читал недавно изыскателям. Могу поделиться ссылкой.

Есть, разумеется, и готовые машинки для пространственных запросов. Но тут уже не аксесс и не гис используется, а что-то типа Oracle SDK - в сети есть на эту тему.
0 голосов
ответил 24 Янв, 08 от Serg_Sh (240 баллов)

Спасибо

Если поделитесь ссылкой, будет СУППЕР!

Я, наверное, не корректно сформулировал вопрос.
Имелось ввиду можно ли выделить, допустим, точку в на карте (в проекте AcGis) непосредственно из базы Access.
0 голосов
ответил 24 Янв, 08 от geologic (39,860 баллов)
А, Selection. Это к программистам скорее.
Я думал, "выборка" вас интересует, т.е. сам алгоритм. А у вас должно быть сам алгоритм есть, вам нужно результат передать в ArcMap.
    
0 голосов
ответил 24 Янв, 08 от AndreyL (5,420 баллов)
Имелось ввиду можно ли выделить, допустим, точку в на карте (в проекте AcGis) непосредственно из базы Access.
Есть такой скриптик
Public Sub ShowPoint(pMapMX, spoint As String)
On Error GoTo Err_ShowPoint
    Dim pEnumLayers As IEnumLayer
    Dim pLayer As ILayer
    Dim pMap As IMxDocument
    Dim sLayerName As String
    Set pMap = pMapMX
    Set pEnumLayers = pMap.FocusMap.Layers
    sLayerName = "Points"
    spoint = "point='" & 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 pPoint As IPoint
  FieldIndex = pPt_FeatureClass.FindField("Shape")
  Set pFeature = pPt_FeatureClass.GetFeature(i)
  Set pPt_Geometry = pFeature.Value(FieldIndex)
  Set pPoint = 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 = pPoint
  Dim pSpRef As ISpatialReference
  Set pSpRef = pEnvelope.SpatialReference
  pGeo.Project pSpRef
  dX = pPoint.X
  dY = pPoint.Y
  MyCheck = (dX < dXmin) Or (dX > dXmax) Or (dY < dYmin) Or (dY > dYmax)
  If MyCheck Then
   pEnvelope.CenterAt pPoint
  End If
  pDisplayTransform.VisibleBounds = pEnvelope
 
  pMap.ActiveView.Refresh
 
Err_ShowPoint:
Set app = Nothing
End Sub
 
имя слоя задается    sLayerName = "Points"
идентификатор    spoint = "point='" & spoint & "'"
вызывается примерно так
 
Private Sub Кнопка22_Click()
 Dim spoint As String
 spoint = Forms!Points!point
 Dim sss As String
 Dim app As IMxDocument
 Dim doc As IDocument
 Dim apl As IApplication
 Set app = GetObject(MyGIS)
 Set doc = app
 Set apl = doc.Parent
 sss = apl.Caption
 ShowPoint app, spoint
 AppActivate sss
 Set app = Nothing
End Sub
 
имеется ввиду, что MyGIS – путь к ГИС-проекту, идентификатор берется в форме Points поле point
Только желательно перед этим запустить сам проект – иногда он не становится активным, его потом пешком выбивать приходится.
0 голосов
ответил 24 Янв, 08 от Serg_Sh (240 баллов)
    Большое спасибо!
Буду пробовать

Этот скрипт пишется где - в ArcGis или в Access?
    
0 голосов
ответил 24 Янв, 08 от AndreyL (5,420 баллов)
Все в Access. Есть такой же скрипт в обратную сторону – по хотлинку найти запись и отобразить ее в форме. Вот тот пишется в АркГИС – кто управляет, туда и скрипт писать.
0 голосов
ответил 24 Янв, 08 от Serg_Sh (240 баллов)
    OK!
Спасибо
0 голосов
ответил 12 Сен, 08 от mant (760 баллов)
добрый день,
возможно вопрос немного не по теме, но все же насчет скрипта.
ситуация - в стандартной базе геоданных (mdb) есть атрибутивная таблица, описывающая различные полигональные слои. нужна возможность вызывать описываемый полигональный слой (ну например по хотлинку). можно ли получить такую функцию на основе скрипта?
0 голосов
ответил 12 Сен, 08 от AndreyL (5,420 баллов)
Ничего не понял. Что значит "вызывать описываемый полигональный слой", куда его нужно вызвать? Весь слой, или только какой-то элемент (полигон) этого слоя? Поясните задачу конкретнее, куда Вы хотите кликнуть хот-линком и что при этом должно произойти?
Мы до сих пор обсуждали вопрос выделения элемента слоя нажатием кнопки в форме Access. Есть обратная возможность - кликая хот-линком на элементе слоя получить его аттрибуты в форме Access.
0 голосов
ответил 12 Сен, 08 от mant (760 баллов)
есть база геоданных. в ней есть слои в пользовательской системе координат - уровни грунтовых вод по городам (отдельный город - отдельный слой с уровнем грунтовых вод). в той же бгд есть слой с городами в wgs84 (слой-выборка из карты области с городами, для которых есть слои уровня грунтовых вод) с аттрибутами для этих городов - название, идентификационные номера и т.д.
задача такая, чтобы по гиперссылке со слоя городов вызывать (подгружать) слой с уровнем грунтовых вод.

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...