SQL->MapControl

0 голосов
спросил 28 Март, 07 от combucha (320 баллов) в категории Программные продукты Esri
Нужно в MapControl добавить таблицу из Microsoft SQL server и конвектировать её в shape file(point). В таблице есть поля с координатами точек, их надо отобразить, а потом сделать Graduated Symbols??????????

3 Ответы

0 голосов
ответил 29 Март, 07 от sschainik (4,900 баллов)
Вот пример bp хелпа с использованием файла *.txt
Samples

Create a layer based on XY data
Language
C#

VB.NET

VBA

Show All
Description:

This sample uses a delimited textfile table to create an XY Event layer which is then added to ArcMap. The points displayed by this layer are generated dynamically when the layer is drawn. The same approach may be take to create XY Event layers from any type of standalone table. Products:
ArcView: VBA, C#, VB.NET


Platforms: Windows

Minimum ArcGIS Release: 9.0


How to use:
Paste the code into your code file.
Create a new text file named XYSample.txt, then add the data below to the new textfile. If you name the file something else, you will need to adjust the sample code.
    x,y,place
    419289.2644,3744635.9201,Anaheim CA
    392626.0961,3739354.4688,Long Beach CA
    444090.0630,3768354.3989,Ontario CA
    543630.3519,3737391.7820,Palm Springs CA
    395037.5403,3780560.0343,Pasadena CA
    484233.0769,3768589.0100,Redlands CA
    463278.9584,3755622.1016,Riverside CA
    473051.8917,3777689.9331,San Bernadino CA
    362120.1377,3764646.9229,Santa Monica CA
    373495.0135,3772750.7525,W Hollwood CA
Add the XYSample.txt file to ArcMap as a table.
Run the sample.


[VBA]
Private Sub AddXYEventLayer()

On Error GoTo EH

Dim pDoc As IMxDocument
Dim pMap As IMap
Set pDoc = ThisDocument
Set pMap = pDoc.FocusMap

' Get the table named XYSample.txt
Dim pStTabCol As IStandaloneTableCollection
Dim pStandaloneTable As IStandaloneTable
Dim intCount As Integer
Dim pTable As ITable
Set pStTabCol = pMap
For intCount = 0 To pStTabCol.StandaloneTableCount - 1
    Set pStandaloneTable = pStTabCol.StandaloneTable(intCount)
    If pStandaloneTable.Name = "XYSample.txt" Then
      Set pTable = pStandaloneTable.Table
      Exit For
    End If
Next
If pTable Is Nothing Then
    MsgBox "The table was not found"
    Exit Sub
End If

' Get the table name object
Dim pDataSet As IDataset
Dim pTableName As IName
Set pDataSet = pTable
Set pTableName = pDataSet.FullName

' Specify the X and Y fields
Dim pXYEvent2FieldsProperties As IXYEvent2FieldsProperties
Set pXYEvent2FieldsProperties = New XYEvent2FieldsProperties
With pXYEvent2FieldsProperties
    .XFieldName = "x"
    .YFieldName = "y"
    .ZFieldName = ""
End With

' Specify the projection
Dim pSpatialReferenceFactory As ISpatialReferenceFactory
Dim pProjectedCoordinateSystem As IProjectedCoordinateSystem
Set pSpatialReferenceFactory = New SpatialReferenceEnvironment
Set pProjectedCoordinateSystem = pSpatialReferenceFactory.CreateProjectedCoordinateSystem(esriSRProjCS_NAD1983UTM_11N)

' Create the XY name object and set it's properties
Dim pXYEventSourceName As IXYEventSourceName
Dim pXYName As IName
Dim pXYEventSource As IXYEventSource
Set pXYEventSourceName = New XYEventSourceName
With pXYEventSourceName
    Set .EventProperties = pXYEvent2FieldsProperties
    Set .SpatialReference = pProjectedCoordinateSystem
    Set .EventTableName = pTableName
End With
Set pXYName = pXYEventSourceName
Set pXYEventSource = pXYName.Open

' Create a new Map Layer
Dim pFlayer As IFeatureLayer
Set pFlayer = New FeatureLayer
Set pFlayer.FeatureClass = pXYEventSource
pFlayer.Name = "Sample XY Event layer"

'Add the layer extension (this is done so that when you edit
'the layer's Source properties and click the Set Data Source
'button, the Add XY Events Dialog appears)
Dim pLayerExt As ILayerExtensions
Dim pRESPageExt As New XYDataSourcePageExtension
Set pLayerExt = pFlayer
pLayerExt.AddExtension pRESPageExt

pMap.AddLayer pFlayer

Exit Sub
EH:
   
MsgBox Err.Number & " " & Err.Description

End Sub
[C#]
public CreateXYLayer()
{
try
{
    IMxDocument pMxDoc;
    IMap pMap;
    pMxDoc = (IMxDocument) m_app.Document;
    pMap = pMxDoc.FocusMap;

    // Get the table named XYSample.txt
    IStandaloneTableCollection pStTabCol;
    IStandaloneTable pStandaloneTable;       
    ITable pTable = null;
    pStTabCol = (IStandaloneTableCollection) pMap;
    for (int intCount = 0; intCount < pStTabCol.StandaloneTableCount; intCount++)
    {
      pStandaloneTable = (IStandaloneTable) pStTabCol.get_StandaloneTable(intCount);
      if (pStandaloneTable.Name == "XYSample.txt")
      {
        pTable = pStandaloneTable.Table;
        break;
      }
    }
    if (pTable == null)
    {
      MessageBox.Show("The table was not found");
      return;
    }

    // Get the table name object
    IDataset pDataSet;
    IName pTableName;
    pDataSet = (IDataset) pTable;
    pTableName = pDataSet.FullName;

    // Specify the X and Y fields
    IXYEvent2FieldsProperties pXYEvent2FieldsProperties;
    pXYEvent2FieldsProperties = new XYEvent2FieldsPropertiesClass();
               pXYEvent2FieldsProperties.XFieldName = "x";
    pXYEvent2FieldsProperties.YFieldName = "y";
    pXYEvent2FieldsProperties.ZFieldName = "";

    // Specify the projection
    ISpatialReferenceFactory pSpatialReferenceFactory;
    pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();
    IProjectedCoordinateSystem pProjectedCoordinateSystem;
    pProjectedCoordinateSystem = pSpatialReferenceFactory.CreateProjectedCoordinateSystem(26911);
    // esriSRProjCS_NAD1983UTM_11N

    // Create the XY name object and set it's properties
    IXYEventSourceNam
0 голосов
ответил 29 Март, 07 от sschainik (4,900 баллов)
Вот еще, для получения таблицы из sql

'Create and populate a new property set
Dim pPropset As IPropertySet
Set pPropset = New PropertySet
pPropset.SetProperty "CONNECTSTRING", "Provider=MSDAORA.1;Data source=mydatabase;User ID=oledb;Password=oledb"

'Create a new OleDB workspacefactory and open the OleDB workspace
Dim pWorkspaceFact As IWorkspaceFactory
Dim pFeatWorkspace As IFeatureWorkspace
Set pWorkspaceFact = New esriDataSourcesOLEDB.OLEDBWorkspaceFactory
Set pFeatWorkspace = pWorkspaceFact.Open(pPropset, 0)

'Open a table object
Dim pTable As ITable
Set pTable = pFeatWorkspace.OpenTable("OLEDB.MY_TABLE")
0 голосов
ответил 08 Апр, 07 от combucha (320 баллов)
Спасибо, таблицу из SQL вытащил и добавил как XY Event. теперь надо визуализировать данные по точкам(хотябы с помощью Graduated Symbols или BarChar Symbol)
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...