I see lots of errors in your code.
Code:
Sub displayonmap1(id As Integer, X As Single, Y As Single)
  
  If mapshow Then
    
    If Not HasIndex(Shape1, id) Then
      
      Load Shape1(id)
          With Shape1(id)
            'Set .Container = Pic '*** Not sure if this is need ***
            .Visible = True
            .BorderColor = vbYellow 'QBColor(id)
            .BackColor = vbYellow
            .Width = 500 'You need to identify a width/height to see it (even if Visible = True)!! Because you loaded a new control.
            .Height = 500 'You need to identify a width/height to see it (even if Visible = True)!! Because you loaded a new control.
          End With
          
      Load Label1(id)
          With Label1(id)
            'Set .Container = Shape1(0) '*** Not sure if this is need ***
            .Visible = True
            .AutoSize = True
            .BackColor = vbYellow
            .Caption = id
            .FontBold = True
            .Width = 500 'You need to identify a width/height to see it (even if Visible = True)!! Because you loaded a new control.
            .Height = 500 'You need to identify a width/height to see it (even if Visible = True)!! Because you loaded a new control.
          End With
          
      pic_centre
    End If
    
    Pic.AutoRedraw = True
    
    With Shape1(id)
      .Move X - Shape1(0).Width / 2, -Y - Shape1(0).Height / 2
    End With
    
    With Label1(id)
      If 0 < 10 Then
        .Move X + 100 - Label1(0).Width / 2, -Y - Label1(0).Height / 2
      ElseIf 0 > 10 Then
        .Move X - 10 - Label1(0).Width / 2, -Y + 50 - Label1(0).Height / 2
      End If
    End With
    
  End If
End Sub
This is not tested, and I do not know much about DataBase.
I'm not sure how your code is calculating (looks like a weird formula!) the position of the shapes.