none
QueryShape in MapPoint

    Frage

  • Hallo zusammen,

    ich habe ein Visual Basic-Programm, mit dem ich eine MapPoint 2011-Karte steuere. Dabei werden zunächst diverse Rechtecke (Regionen) als Shapes mit der Funktion addPolyline() eingefügt. Anschließend möchte ich mit der Funktion QueryShape() wissen, welche Kunden (Pushpin-Set TempCust) in welchem Rechteck/ Region liegen.

    In der Funktion QueryShape bekomme ich aber bei einigen Regionen einen unbekannten Fehler. 

    objRecordset = objDataSet.QueryShape(Karta.ActiveMap.Shapes(i))

    Da alle Regionen auf die gleiche Weise erzeugt wurden, ist nicht nachvollziehbar, woher der Fehler bei einigen kommt. Die Regionen mit Fehler haben keine Kunden (soweit ich das prüfen konnte). Es gibt aber auch Regionen ohne Kunden und ohne Fehler.

    Wenn die Funktion fertig ist, kann ich die MapPoint-Datei nicht speichern (Karta.SaveMap).

    Unten folgt noch der Code. Ich bin für jede Hilfe dankbar.

    Viele Grüße,

    Susanne

    Friend WithEvents Karta As AxMapPoint.AxMappointControl
    Dim Rect(4) As MapPoint.Location
    Dim shp As MapPoint.Shape
    Dim loc As MapPoint.Location
    Dim olocation As MapPoint.Location
    Dim oPushpin As MapPoint.Pushpin
    Dim dsCoordinates, dsCust As Data.DataSet
    Dim regionType As Integer
    Dim shapenumber As Integer
    Dim i, iMax As Integer
    Dim sql as String
            
    	sql = "SELECT * FROM tblRegionCoordinates"
        dsCoordinates = cls.GetDataSet(sql)
        iMax = dsCoordinates.Tables(0).Rows.Count - 1
    
        For i = 0 To iMax
    		'Upper left (first )
    		Rect(0) = Karta.ActiveMap.GetLocation(dsCoordinates.Tables(0).Rows(i).Item("ULlat"), dsCoordinates.Tables(0).Rows(i).Item("ULlon"))
    		'Upper left AGAIN (last coordinate)
    		Rect(4) = Rect(0)
    		'Upper right
    		Rect(1) = Karta.ActiveMap.GetLocation(dsCoordinates.Tables(0).Rows(i).Item("URlat"), dsCoordinates.Tables(0).Rows(i).Item("URlon"))
    		'lower right
    		Rect(2) = Karta.ActiveMap.GetLocation(dsCoordinates.Tables(0).Rows(i).Item("LLlat"), dsCoordinates.Tables(0).Rows(i).Item("LLlon"))	
    		'lower left
    		Rect(3) = Karta.ActiveMap.GetLocation(dsCoordinates.Tables(0).Rows(i).Item("LRlat"), dsCoordinates.Tables(0).Rows(i).Item("LRlon"))
    	   
    	    'Drawing the map/ insert rectangles for regions
    	    loc = Karta.ActiveMap.Union(Rect).Location
    	 
            shp = Map.ActiveMap.Shapes.AddPolyline(Rect)
    		With shp
                .Line.Weight = 1
                .Name = dsCoordinates.Tables(0).Rows(i).Item("ID")
                .Text = dsCoordinates.Tables(0).Rows(i).Item("ID")
            End With		
    	Next	
    		       
    	sql = "select * from Customers"
    	dsCust = cls.GetDataSet(sql)
    
    	Karta.ActiveMap.DataSets("TempCust").Delete()
    	Karta.ActiveMap.DataSets.AddPushpinSet("TempCust")
    
        If dsCust.Tables(0).Rows.Count > 0 Then
            iMax = dsCust.Tables(0).Rows.Count - 1
    		For i = 0 To iMax
    			olocation = Karta.ActiveMap.GetLocation(dsCust.Tables(0).Rows(i).Item("lat"), dsCust.Tables(0).Rows(i).Item("lon"))
    			oPushpin = Karta.ActiveMap.AddPushpin(AtLocation:=olocation, Name:=dsCust.Tables(0).Rows(i).Item("Custnr").ToString().Trim)
    			oPushpin.MoveTo(Karta.ActiveMap.DataSets.Item("TempCust"))
    		Next
    
    		Dim objRecordset As MapPoint.Recordset
    		Dim objDataSet As MapPoint.DataSet
    		Dim Rnr, custnr As String
    		custnr = ""
    		Rnr = ""
    		objDataSet = Karta.ActiveMap.DataSets("TempCust")
    
    		iMax = Karta.ActiveMap.Shapes.Count
    		For i = 1 To iMax
    			Me.Text = "Saving customers to region " & i & " of " & iMax & ", " & Format((i) / (iMax), "#00%") & " complete"
    			If Len(Trim(Karta.ActiveMap.Shapes(i).Name)) > 0 Then
    				Try
    					'get all pushpins (customers) in shape i
    					objRecordset = objDataSet.QueryShape(Karta.ActiveMap.Shapes(i))
    
    					'get region id of shape i
    					Rnr = Karta.ActiveMap.Shapes(i).Name.Trim
    					objRecordset.MoveFirst()
    
    					'loop through all customers in shape i and add them to region Rnr
    					Do While Not objRecordset.EOF
    						'get customer id in recordset
    						custnr = objRecordset.Pushpin.Name.Trim
    						'...  Save cust-region relation to DB
    						objRecordset.MoveNext()
    					Loop
    					objRecordset = Nothing
    				Catch ex As Exception
    					MsgBox("En error has occured in Shape " & Karta.ActiveMap.Shapes(i).Name & ". Error Message: " & ex.Message)
    				End Try
    			End If
    		Next
    	End If
    

    Dienstag, 12. November 2013 15:05